Python 202

[Python] 24553. 팰린드롬 게임

문제 https://www.acmicpc.net/problem/24553 24553번: 팰린드롬 게임 첫째 줄에 테스트 케이스의 개수 $T$가 주어진다. ($1 \le T \le 1\,000$) 둘째 줄부터 $T$개의 줄에 걸쳐, 돌 무더기에 쌓여 있는 돌의 개수 $N$이 주어진다. ($1 \le N \le 10^{18}$) www.acmicpc.net 풀이 과정 시간제한을 보고 구현은 아니겠다고 생각했는데, 그리디 방법을 찾는 것에 시간이 걸렸다. 그것은 주어진 돌의 개수 n이 10의 배수인지 아닌지로 바로 판단할 수 있다. n이 10의 배수인 경우는 승우가 아무리 머리를 쓰더라도 상윤이가 이기게 된다. 예) n = 10 / 승: 9(승우가 몇 개를 가져와도 나머지가 생김) / 상윤: 1 ➡︎ 상윤 승..

Algorithm/Baekjoon 2022.09.19

[Python] 3048. 개미

문제 https://www.acmicpc.net/problem/3048 3048번: 개미 T초가 지난 후에 개미의 순서를 출력한다. 첫 번째 개미 그룹은 왼쪽에서 오른쪽으로 움직이고, 두 번째 그룹은 반대 방향으로 움직인다. www.acmicpc.net 풀이 과정 딕셔너리로 풀까, 한 칸씩 이동하도록 할까 등 여러 가지 방식을 고민하다가 0으로 채워진 리스트에 개미들을 넣는 방식으로 풀었다. 그래서 개미들을 각 자리에 맞게 넣어주도록 계산하는 것이 중요했다. 개미들이 들어갈 리스트를 만들어준다. 이때, 각 그룹마다 개미들을 두 칸씩 띄워 넣어줄 것이기 때문에 넉넉한 크기로 만들어준다. 첫 번째 그룹 개미들을 넣는데, 시간(t) 자리부터 넣어준다. (t * 2 ~ t * 2 + n1 * 2) (두 칸씩 띄..

Algorithm/Baekjoon 2022.09.18

[Python] 20057. 마법사 상어와 토네이도

문제 https://www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 풀이과정 구현문제로 토네이도 방향이 변화하는 것과 퍼지는 비율을 토네이도 방향대로 돌려주는 것이 핵심이다. 코드 import sys sys.stdin = open('input.txt') # 모래 이동 비율 ratio = [[0, 0, 0.02, 0, 0], [0, 0.1, 0.07, 0.01, 0], [0.05, 0, 0, 0, 0], [0, 0.1, 0.07..

Algorithm/Baekjoon 2022.09.15

[Python] 2211.네트워크 복구

문제 https://www.acmicpc.net/problem/2211 2211번: 네트워크 복구 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 회선의 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 컴퓨터와 B번 컴퓨터가 통신 시간이 C (1 ≤ C ≤ 10)인 회선으로 연결되어 있다 www.acmicpc.net 풀이과정 컴퓨터와 시간을 주고 최소 시간으로 모든 컴퓨터를 연결해야 한다. 그리고 연결하는 횟수와 연결할 컴퓨터의 번호를 출력하는 문제이다. 따라서 노드와 거리(시간)이 있고 최단 거리 찾기라고 생각하여 다익스트라 알고리즘을 활용하여 풀었다. 처음에는 for문으로 dijkstra 함수를 모든 컴퓨터에서 시작시켜서 거기서 가장 시간이 적게 드는 곳을 연결해야지 라고 ..

Algorithm/Baekjoon 2022.08.24

[Python] 9935. 문자열 폭발

words = input() # 입력받은 문자열 explode = list(input()) # 폭발 문자열 exp_l = len(explode) new_words = [] for word in words: new_words.append(word) # 기존 문자열의 단어 하나를 새 리스트에 추가 # new_words의 마지막 글자가 폭발 문자열의 마지막 글자와 같고, # 그래서 끝의 글자들이 폭발 문자열과 같다면 if new_words[-1] == explode[-1] and new_words[-exp_l:] == explode: for _ in range(exp_l): # 폭발 시키기 (문자 제거) new_words.pop() if new_words: # 문자 남아있다면 문자열로 변환하여 print pr..

Algorithm/Baekjoon 2022.01.17

[Python] 1339. 단어 수학

n = int(input()) # 단어의 개수 words = [[] for _ in range(8)] # 단어를 자리 수별로 저장할 리스트 word_dic = {} # 단어 값을 넣을 딕셔너리 for i in range(n): word = input() # 단어 입력받기 len_word = len(word) for j in range(len_word): words[7-j].append(word[len_word-j-1]) # words에 자리 별로 단어 넣어주기 word_dic[word[j]] = word_dic.get(word[j], 0) + 10 ** (len_word-j-1) # 해당 자리에 맞는 값 넣기 numbers = [] for num in word_dic.values(): # 알파벳 빼고 값..

Algorithm/Baekjoon 2022.01.15

[Python] 10971. 외판원 순회 2

n = int(input()) # 도시의 수 cost = [list(map(int, input().split())) for _ in range(n)] # 비용 행렬 visited = [False for _ in range(n)] # 도시 방문 리스트 (모든 도시를 방문해야 함) answer = 1e9 # 최소 비용이므로 정답 크게크게 def dfs(s, now, total): global answer if answer < total: # 가지치기 return # 이미 비용이 기존에 저장한 순회 경로 비용보다 커졌다면 돌아가 if s == now and False not in visited: # 모든 도시를 방문했고, 시작지점으로 돌아왔다면 if total < answer: # 최소 비용으로 갱신 answ..

Algorithm/Baekjoon 2022.01.15

[Python] 14496. 그대, 그머가 되어

import heapq def dijkstra(): dist = [float('inf') for _ in range(n+1)] # 가중치 초기화 queue = [[0, a]] # 횟수, 시작 문자 넣기 dist[a] = 0 # 시작지점 가중치 0 while queue: d, now = heapq.heappop(queue) # 현재까지 치환 횟수, 현재 문자 뽑기 if now == b: # 바꾸려고 하는 문자 b라면 print(d) # 현재까지 치환 횟수 출력 return if dist[now] < d: # 저장한 치환횟수보다 꺼낸게 더 크다면 패스 continue for next in visited[now]: # 현재 문자에서 바꿀 수 있는 문자로 가보기 nd = d + 1 # 치환 횟수 + 1 if n..

Algorithm/Baekjoon 2022.01.14

[Python] 20309. 트리플 소트

처음 풀이 n = int(input()) numbers = list(enumerate(map(int, input().split()))) # (인덱스, 숫자) 같이 저장 numbers.sort(key=lambda x: x[1]) # 숫자 기준으로 정렬 is_even = True # 홀수 순서, 짝수 순서 판별 for idx, num in numbers: if (idx % 2 and is_even) or (not idx % 2 and not is_even): # 인덱스가 홀수인데 짝수 순서이거나, 인덱스가 짝수인데 홀수 순서라면 print('NO') # 정렬 불가능 break is_even = not is_even else: print('YES') 위의 풀이는 (인덱스, 숫자)를 같이 저장하고 정렬해서 해당..

Algorithm/Baekjoon 2022.01.14