분류 전체보기 720

[백준][Python] 16927 배열돌리기2

배열돌리기 1에서 달라진것은 각 cycle마다 회전 횟수의 압축이 필요하다는 점. cycle크기는 하나 안으로 들어갈때마다 8칸씩 줄어들기때문에 각 사이즈로 나눈 나머지값만큼만 회전시켜준다. import sys input = sys.stdin.readline def rotate(start): #init_tmp top = matrix[start][start] left = matrix[N-start-1][start] bottom = matrix[N-start-1][M-start-1] right = matrix[start][M-start-1] # top for i in range(start+1,M-start): matrix[start][i-1] = matrix[start][i] # left for i in r..

카테고리 없음 2021.10.01

[백준][Python] 1213 펠린드롬 만들기

불가능한 경우는 홀수번 나오는 문자가 2개 이상일 경우다. 이 경우를 제외하고 각 문자를 배열에 넣어 정렬 후 뒤집은 배열과 합치는 방법으로 펠린드롬을 만들 수 있다. import sys input = sys.stdin.readline from collections import defaultdict name = input().rstrip() count = defaultdict(int) for char in name: count[char] += 1 char_set = [] flag = 0 mid = '' for char in count: if count[char] % 2: if flag: print("I'm Sorry Hansoo") exit() else: mid = char flag = 1 for _ i..

[SWEA][Python] 1242 암호코드스캔

암호문에서 16진수로 표현된 바코드를 찾아 2진수로 변환, decode 규칙에 따라 해석한 10진수가 암호의 조건에 맞으면 암호값을 산출하는 문제입니다. input값을 정제하는 것부터 매우 어려웠습니다. 결국 핵심은 2진수 값을 구하면 0,1,0,1의 비율을 찾아 매칭시키는 것 입니다. 웃긴건 112자리 안에 56자리 암호가 숨어있을수도 있으니 조심하시면 됩니다. import sys sys.stdin = open('input.txt') # 알파뱃이면 10 + 그 번호 즉 16진수를 10진수로 치환하는 함수. def get_val(ch): val = (ord(ch) - ord('A')) + 10 if ord(ch) > ord('9') else ord(ch) - ord('0') return val # 남의 ..

[백준][Python] 17142 연구소 3

연구소 2에서 동일하나 마지막에 비활성화 바이러스만 남아있는 경우를 배제해줘야한다. 즉 최소 시간 배열을 만들고 비활성화 바이러스가 있는 영역을 제외한 영역을 차지하는데 걸린 시간을 찾아야한다. import sys input = sys.stdin.readline from collections import deque from itertools import combinations def bfs(q): for x, y in q: visited[x][y] = True times[x][y] = 0 cnt = len(q) while q: for _ in range(len(q)): x, y = q.popleft() for i in range(4): nx, ny = x + dx[i], y + dy[i] if 0

[백준][Python] 1120 문자열

긴 문자열인 B에 A를 매칭시키며 가장 적은 차이가 답이다. (그 매칭위치에서 좌우 B에 맞춰주면 차이가 더 벌어지지 않음) import sys input = sys.stdin.readline A, B = input().split() # 그냥 B에 A매칭시키면서 차이 가장 작은거 찾아서 출력. min_cnt = float('inf') for i in range(len(B) - len(A) + 1): cnt = 0 for j in range(len(A)): if B[i+j] != A[j]: cnt += 1 min_cnt = min(min_cnt, cnt) print(min_cnt)

[백준][Python] 1238 파티 : 역방향 그래프로 돌아오는 길을 찾자

처음 풀이는 다음과 같다. 모든 노드에 갔다가 돌아오는 각 합중 max값을 찾는 풀이 그리고 다른 분들의 풀이를 본 결과 역방향 그래프를 그리는 것이 반대로 도착지점에서 현지점까지 오는 거리를 측정할 수 있음을 깨달았다. import sys input = sys.stdin.readline from heapq import heappop, heappush def dijkstra(start): heap = [] visited = {i: float('inf') for i in range(1, N + 1)} visited[start] = 0 heappush(heap, (0, start)) while heap: time, cur_node = heappop(heap) if visited[cur_node] < time..