CodingTest 432

[baekjoon] 백준 3055번(파이썬): 탈출

문제 3055번: 탈출 사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제 www.acmicpc.net 알고리즘 - bfs 탐색을 통해 문제를 수행한다. - 반복문을 통해 시작점의 위치와 물의 위치를 리스트에 담는다. - 고슴도치가 이동할 수 있는 곳과 물이 잠길 수 있는 곳을 bfs 탐색을 한다. - bfs 탐색을 할 때 주의해야 할 점은 임시 리스트를 하나 만들어 현재 탐색해야 하는 곳과 다음에 탐색해야 하는 곳을 나눠 탐색해야 한다는 것이다. (고슴도치의 이동과 물이 잠기는 것은 현재!! 기준으로 수행해야 하기 때문.) - 물이 잠겼다면 고슴도치가 이동할 수 없는 ..

CodingTest/Baekjoon 2021.11.13

[baekjoon] 백준 1520번(파이썬): 내리막 길

문제 1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 알고리즘 - dfs 탐색과 dp를 통해 문제를 수행한다. - dp 배열에 모든 칸에 초기값을 -1로 초기화한다. - 각 칸을 탐색 시 0으로 초기화해주어 탐색 유무를 판단하고 목적지까지 도착하면 1을 리턴 받는다. - dp값이 -1이라면 탐색하지 않은 곳으로 탐색한다. - dp값이 0이라면 탐색한 곳이지만 그 후에 탐색할 곳이 없는 칸이 된다. - dp값이 1 이상의 값이라면 이전에 도착지까지 방문한 값으로 dp값을 리턴 받아 다시는 그 경로를 탐색하지 않게 한..

CodingTest/Baekjoon 2021.11.12

[baekjoon] 백준 2206번(파이썬): 벽 부수고 이동하기

문제 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 알고리즘 - bfs 탐색을 통해 문제를 수행한다. - 시간복잡도를 생각해보면 단순 bfs 탐색을 통해 문제를 풀면 시간초과가 나오는 것을 확인할 수 있다. - 방문 여부에 따른 탐색이 아닌 벽을 부실 수 있는 상태, 벽을 못 부시는 상태 이 2가지 상태에 따라서 탐색을 해야한다. - 벽을 만났고 부실 수 있는 상태라면 벽을 부순 후 상태를 바꿔주어 이동횟수를 초기화한 후 큐에 담는다. - 벽이 아닌 이동 가능한 곳이고 현재 상태로 ..

CodingTest/Baekjoon 2021.11.11

[baekjoon] 백준 7562번(파이썬): 나이트의 이동

문제 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 알고리즘 - bfs 탐색을 통해 문제를 수행한다. - 나이트가 이동할 수 있는 방향을 탐색한다. - 다음칸까지 이동하는 과정에서 현재 칸 + 1을 하여 다음 칸까지 이동하는 횟수를 체크한다. - 이동하려는 칸에 도착하면 리턴한다. 코드 import sys from collections import deque # bfs 탐색 def bfs(): # 나이트가 이동할 수 있는 8가지 방향 표현 dx = [1, -1, -2, 2, -2, 2, 1, -1] dy = ..

CodingTest/Baekjoon 2021.11.10

[baekjoon] 백준 9663번(파이썬): N-Queen

문제 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 알고리즘 - 체스 판에서 퀸이 움직일 수 있는 방향을 생각하면 하나의 열의 하나의 퀸만을 놓을 수 있다. - 따라서 n개의 열의 퀸을 다 놓을 수 있는지 확인한다. - 이때, 대각선으로 퀸은 이동할 수 있으므로 대각선의 퀸을 놓을 수 있는지 확인해준다. - 백 트래킹을 통해 퀸을 n개 놓을 수 없다면 다른 경우의 수로 문제를 해결할 수 있게 한다. 코드 import sys # pypy3 해결.. python(3%) 시간초과 # 대각선의 퀸이 있는지 확인 def check(..

CodingTest/Baekjoon 2021.11.09

[baekjoon] 백준 10026번(파이썬): 적록색약

문제 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 알고리즘 - dfs 탐색을 통해 문제를 수행한다. - 적록색약인이 아닌 사람이 보는 그림의 구역을 dfs 탐색을 통해 찾는다. - 적록색약인이 아닌 사람이 보는 그림의 구역을 찾았다면 적록 색약인 보는 그림으로 바꿔준다.(G -> R) - 바꿔준 그림으로 다시 dfs 탐색을 하여 적록색약인이 보는 그림의 구역을 찾는다. 코드 import sys sys.setrecursionlimit(10 ** 6) # dfs 탐색 def dfs(x, y, c): vi..

CodingTest/Baekjoon 2021.11.08

[baekjoon] 백준 1987번(파이썬): 알파벳

문제 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 알고리즘 - bfs로 문제를 수행한다.(dfs 풀이는 좀 더 고민해봐야 할 것 같다.) - 시간 초과를 줄이기 위해 중복되는 곳을 제거한다. - 말이 지날 수 있는 최대 칸을, 칸을 탐색할 때마다 초기화한다. - 말이 지날 수 있는 칸을 상/하/좌/우로 탐색한다. - 범위 내에 있고 알파벳이 중복이 안된다면 탐색한다. 코드 bfs 풀이 import sys # bfs 풀이 # bfs def bfs(): global cnt queue = set([(0,..

CodingTest/Baekjoon 2021.11.07

[baekjoon] 백준 11437번(파이썬): LCA

문제 11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net 알고리즘 - LCA 알고리즘으로 풀었다. - dfs 탐색을 통해 루트 노드부터 연결된 노드를 재귀적으로 탐색하여 부모 노드와 그 노드의 레벨을 찾는다. - LCA 알고리즘인 두 노드의 레벨을 맞추고 부모 노드를 찾아가며 공통 조상을 찾는다. 코드 pypy3 해결 # pypy3 해결.. # python3 (94%) 시간초과 import sys sys.setrecursionlimit(10 ** 5) # dfs 탐색 def dfs(x, l): visited[..

CodingTest/Baekjoon 2021.11.06

[baekjoon] 백준 20364번(파이썬): 부동산 다툼

문제 20364번: 부동산 다툼 첫 번째 줄에 땅 개수 N과 꽉꽉나라에 사는 오리 수 Q가 공백으로 구분되어 주어진다. (2 ≤ N = 1: flag = target # 다른 오리의 점유된 땅의 번호를 초기화 # 2로 나눠 루트 땅까지 이동 target //= 2 # 루트 땅까지 이동하면서 점유된 땅을 밟았다면 if flag: print(flag) # 밟은 땅의 번호를 출력 # 그게 아니라면 땅을 점유하고 0을 출력 else: visited[tan] = 1 print(0) github GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법 내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by crea..

CodingTest/Baekjoon 2021.11.05

[baekjoon] 백준 2078번(파이썬): 무한이진트리

문제 2078번: 무한이진트리 첫째 줄에 두 정수 A, B(1 ≤ A, B ≤ 2,000,000,000)가 주어진다. 잘못된 입력은 주어지지 않는다고 가정한다. www.acmicpc.net 알고리즘 - 어떤 노드에서 루트 노드로 이동하는 횟수를 카운트하는 방법으로 문제를 수행했다. - a와 b가 1보다 클 때까지 반복하여 한쪽의 이동만을 하게끔 만든다. - 반복이 끝나고 난 후에는 남은 이동 거리를 계산해줘 왼쪽 이동 횟수와 오른쪽 이동 횟수를 출력한다. 코드 import sys a, b = map(int, sys.stdin.readline().split()) l = 0 # 왼쪽 이동 횟수 r = 0 # 오른쪽 이동 횟수 # a와 b가 1보다 클 때까지 반복한다. while a > 1 and b > 1:..

CodingTest/Baekjoon 2021.11.04