코딩테스트 대비/BOJ 127

[Baekjoon/Python] 10026번: 적록색약 - 효과는 굉장했다!

10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 SOLUTION import sys from collections import deque sys.setrecursionlimit(10000) # recursion error 때문에 범위를 제한함 N

[Baekjoon/Python] 7662번: 이중 우선순위 큐 - 효과는 굉장했다!

7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 알고리즘 분류 자료 구조 트리를 사용한 집합과 맵 우선순위 큐 SOLUTION import sys import heapq for _ in range(int(sys.stdin.readline())): max_heap, min_heap = [], [] visited = [False] * 1000000 # k의 범위가 1000000까지 이므로 k = int(sys.stdin.readline()) for i in range(k): letter, n = sys.std..

[Baekjoon/Python] 7569번: 토마토 - 효과는 굉장했다!

7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색 SOLUTION import sys from collections import deque def tomato(): while queue: z, y, x = queue.popleft() # 순차적으로 발견된 익은 토마토에서 부터 시작, 한번 실행되면 popleft()를 통해 중복 실행되지 않도록 함 for i in range(6): nx = x + dx[i] # x좌표 설정 ny = y..

[Baekjoon/Python] 5403번: AC - 효과는 굉장했다!

5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 알고리즘 분류 구현 자료 구조 문자열 파싱 덱 SOLUTION import sys from collections import deque T = int(sys.stdin.readline()) for _ in range(T): p = sys.stdin.readline() n = int(sys.stdin.readline()) array = deque(sys.stdin.readline().rstrip()[1:-1].split(',')) if n == 0: array = deque() state = True cnt = 0 fo..

[Baekjoon/Python] 1107번: 리모컨 - 효과는 굉장했다!

1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 알고리즘 분류 브루트포스 알고리즘 SOLUTION import sys N = int(sys.stdin.readline()) M = int(sys.stdin.readline()) if M: # 고장난 버튼이 있을때 broken_buttons = sys.stdin.readline().rstrip().split() else: broken_buttons = [] # +/- 버튼만 눌러서 움직일 경우 cnt = abs(100 - N) # N의 최댓값이 5..

[Baekjoon/Python] 16928번: 뱀과 사다리 게임 - 효과는 굉장했다!

16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색 SOLUTION import sys from collections import deque def bfs(): queue = deque([1]) # 보드게임의 시작은 1번 칸부터 while queue: marker = queue.popleft() # 주사위의 눈 1 ~ 6 for move in range(1,7): move_marker = move + marker ..

[Baekjoon/Python] 11403번: 경로 찾기 - 효과는 굉장했다!

11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net 알고리즘 분류 그래프 이론 그래프 탐색 플로이드-와샬 SOLUTION import sys N = int(sys.stdin.readline()) path = [list(map(int, sys.stdin.readline().split())) for _ in range(N)] #플로이드-와샬 알고리즘 for k in range(N): for i in range(N): for j in range(N): if path[i][k] and path[k][j]: path[i][j] = 1 for row in path: ..

[Baekjoon/Python] 11286번: 절댓값 힙 - 효과는 굉장했다!

11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 알고리즘 분류 자료 구조 우선순위 큐 SOLUTION import sys import heapq N = int(sys.stdin.readline()) heap = [] for _ in range(N): x = int(sys.stdin.readline()) if x != 0: if x < 0: heapq.heappush(heap, [-x,x]) else: heapq.heappush(heap, [x,x]) else: if heap == []: p..

[Baekjoon/Python] 6064번: 카잉 달력 - 효과는 굉장했다!

6064번: 카잉 달력 입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다. www.acmicpc.net 알고리즘 분류 수학 정수론 중국인의 나머지 정리 SOLUTION import sys def calender(M, N, x, y): # 마지막해는 M 과 N의 최소공배수 이므로 최대 M * N 까지 범위를 가진다 while x x+M번째(x+M,?) -> x+M+M번째(x+M+M,?) # y는 y+N 번째 마다 돌아온다 y번째(?,y) -> y+N번째(?,y+N) -> y+N+N번째(?,y+N+N) print(calender(M, N, x, y))

[Baekjoon/Python] 2667번: 단지번호붙이기 - 효과는 굉장했다!

2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 알고리즘 분류 그래프 이론 그래프 탐색 너비 우선 탐색 깊이 우선 탐색 SOLUTION import sys # 굳이 모든 구역을 예시처럼 1구역, 2구역 ,3구역으로 만들 필요는 없다. # 생각의 전환 -> 그냥 0으로 만들어주면서 아파트 개수만 세주면 된다. # 총 단지수는 answer의 길이 def house_map(x,y): global cnt house[x][y] = '0' # 들어온 house[x][y] == 1 이므로 0 으로 만들어주면서 바로 cnt ..