전체 글
-
[이코테 # DFS/BFS 1] DFS, BFS 예제Programming 기초/Coding Test 2023. 6. 7. 21:03
* DFS(Depth-First Search, 깊이 우선 탐색) 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. 선입후출. 스택(재귀 함수) 사용 관행적으로 인접한 노드 중에서 방문하지 않은 노드가 여러 개 있으면 번호가 낮은 순서부터 처리한다. def dfs(graph, v, visited): # 현재 노드를 방문 처리 visited[v]=True print(v, end=' ') # 현재 노드와 연결된 다른 노드를 재귀적으로 방문 for i in graph[v]: if not visited[i]: dfs(graph, i, visited) # 인접 리스트 graph = [ [], [2, 3, 8], [1, 7], [1, 4, 5], [3, 5], [3,4], [7], [2, 6, 8], [1,7] ..
-
[이코테 # 구현3] 시뮬레이션 문제 : 게임 개발Programming 기초/Coding Test 2023. 6. 7. 02:11
* 게임 개발(p.118) 시간제한 : 40분 전형적인 시뮬레이션 문제 n, m = map(int, input().split()) x, y, direction = map(int, input().split()) M = [] for i in range(n): M.append([]) M[i] = list(map(int, input().split())) M[x][y] = 9# 시작점 지나온 자리로 표시 dx = [-1, 0, 1, 0] # 순서대로 북, 동, 남, 서 dy = [0, 1, 0, -1] # 순서대로 북, 동, 남, 서 def turn_left(): global direction direction -= 1 if direction == -1: direction = 3 not_move = 0 while..
-
[이코테 # 구현2] 왕실의 나이트Programming 기초/Coding Test 2023. 6. 6. 22:59
* 왕실의 나이트 n*n 체크판에서 나이트의 현재위치를 입력했을 때 나이트가 움직일 수 있는 경우의 수를 출력한다. 열은 abc로 표시하고 행은 123으로 표시한다. 입력 a2은 2행 1열을 뜻함. n = input() r = int(n[1]) c = int(ord(n[0])) - (int(ord("a")) - 1) step = [[-1, -2], [1, -2],[-1, 2], [1, 2], [-2, 1], [-2, -1], [2, -1], [2, 1]] # (c,r)상하좌우 count = 0 for i in range(8): step[i][0] += c step[i][1] += r for i in range(8): if step[i][0] >= 1 and step[i][0] = 1 and step[i]..
-
[이코테 # 구현1] 시뮬레이션 문제: 상하좌우, 완전 탐색 문제 : 시각Programming 기초/Coding Test 2023. 6. 6. 21:40
* 상하좌우(P.110 예제 4-1) 풀이 시간 : 15분 N = int(input()) path = list(input().split()) x, y = 1, 1 for i in range(len(path)): if path[i] == "L" and y - 1 > 0: y -= 1 elif path[i] == "R" and y + 1 0: x -= 1 elif path[i] == "D" and x + 1 = 3 and n = 13 and n = 13 and n < 23: print((3600 - 45 * 45) *..
-
[이코테 # Greedy4] 1이 될 때까지카테고리 없음 2023. 6. 5. 22:21
* 1이 될 때까지 입력된 수 N이 1일 될 때까지 두 가지 연산 중 하나를 선택하는 과정을 반복한다. 1. N에서 1을 뺀다. 2. N을 K로 나눈다.(단, N이 K로 나누어떨어질 때만 선택할 수 있다.) 1번 혹은 2번 과정을 수행하는 최소 횟수를 구하는 프로그램을 작성하시오. * 순환으로 작성해봄. def nkproblem(n, k): global count if n % k == 0 and n != 1: count += 1 nkproblem(n // k, k) elif n % k != 0 and n != 1: count += 1 nkproblem(n - 1, k) else: print(count) n, k = map(int, input().split()) count = 0 nkproblem(n, k..
-
[이코테 # Greedy3] 숫자 카드 게임Programming 기초/Coding Test 2023. 6. 5. 16:24
* 숫자 카드 게임 '각 행마다 가장 작은 수를 찾은 뒤에 그 수 중에서 가장 큰 수'를 찾는 것이 핵심. # 행(n)과 열(m) 개수 입력받기 n, m = map(int, input().split()) # 카드 더미 만들기 d = [] min = [] for i in range(n): d.append([]) min.append(99) d[i] = list(map(int, input().split())) # 게임 룰 적용 # 1 각 행 별로 min 값을 비교해야함 # 0번 인덱스는 1번째 행의 최솟값 for i in range(n): for j in range(m): if min[i] >= d[i][j]: min[i] = d[i][j] MAX = 0 for i in range(n): if min[i] >..
-
[CodeUp#review] 기초 100제Programming 기초/Coding Test 2023. 6. 4. 15:55
100제 중 기록해둘 몇 개 문항만 다룬다. * 짝수 합 구하기(6077번) 정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자. [ 입력 ] 정수 1개가 입력된다. (0 ~ 100) [출력] 1부터 그 수까지 짝수만 합해 출력한다. # 더 빠른 풀이, but 가독성이 떨어짐 k = int(input()) print((k >> 1) * ((k >> 1) + 1)) # 가독성을 조금 더 높인 풀이 # 등차수열의 합공식n*(n+1)/2을 이용함. # 모두 짝수이므로 2를 인수로 가지고 있다. k = int(input()) n = k//2 sum = n*(n+1) print(sum) 시간복잡도 : O(1) # 제공 풀이 n = int(input()) sum=0 for i in rang..
-
[이코테 # Greedy2] 큰 수의 법칙, sort함수, 함수 매개변수의 콜론(:)과 화살표(->)의 의미Programming 기초/Coding Test 2023. 6. 4. 00:14
# 배열의 크기 n, 숫자가 더해지는 횟수 m, 연속 인덱스 k번 제한 # original 답변 n, m, k = map(int, input().split()) data = list(map(int, input().split())) data.sort() max1 = data[4] max2 = data[3] mul1 = m // (k + 1) mul2 = m % (k + 1) sum = k * max1 * mul1 + max2 * mul1 + max1 * mul2 print(sum) * sort 함수 def sort(self: list[SupportsRichComparisonT], *, key: None = None, reverse: bool = False) -> None: ... 위 코드는 sort 함수 ..