목록algorithm/baekjoon (96)
하루일문
문제 1063번: 킹 8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 www.acmicpc.net 체스 판에서 움직이는 문제이다. 포인트는 움직이는 방법을 정의해주고, 체스판의 형태를 잘 이해하여 체스를 움직이는 것이다. 공간을 이해한다면 수월하게 풀 수 있다. 코드 # 움직이는 방향 move = {"R" : (0, 1), "L" : (0, -1), "B" : (1, 0), "T" : (-1, 0), "RT" : (-1, 1), "LT" : (-1, -1), "RB" : (1, 1), "LB" : (1, -1)} k, s, n = map(str, input().s..
문제 24060번: 알고리즘 수업 - 병합 정렬 1 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109) www.acmicpc.net 이 문제는 자리수를 /2를 계속하여 최대한 줄인 다음에 오름차순으로 정렬하는 문제이다. 예를 들어 4 5 1 3 2라면 [4, 5, 2], [3, 2] → [4, 5], [1], [3, 2] → [4] [5], [1], [3], [2] → [4, 5], [1], [3], [2] → [1, 4, 5], [2, 3] → [1, 2, 3, 4, 5] 이런식으로 변한다. 코드 import sys input = sys...
문제 25305번: 커트라인 시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다. www.acmicpc.net 코드 import sys input = sys.stdin.readline sys.setrecursionlimit(10**6) n, k = map(int, input().split()) X = list(map(int, input().split())) X.sort(reverse = True) print(X[k-1])
문제 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 주의! 0일 때를 생각 안하면 런타임오류가 뜬다! 코드 def su(a, b): global cnt cnt += 1 if N == 0: return print(0) if cnt == N: print(b) else: c = a + b su(b, c) N = int(input()) cnt = 0 su(0, 1)
문제 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 코드 N = int(input()) def d(n): if n == 0: return 1 return n * d(n-1) print(d(N))
문제 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 비에 잠기지 않는 지역을 구하는 문제이다. 개인적인 문제 포인트는 비에 완전히 잠기지 않는 0도 고려를 해줘야한다는 점이다. 코드 # DFS dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] def dfs(graph, x, y, visited, I): for _ in range(4): nx = x + dx[_] ny = y + dy[_] if 0 I: visited[i][j] = True dfs(graph, i, j, visited, I) cnt..
문제 포인트 정답을 보는것은 어렵지 않다. 하지만, 시간 초과 많이 나는 문제인 것 같다. 그래서 시간을 어떻게 줄이는가? 가 중요한 문제 같다. 풀이 import sys, heapq input = sys.stdin.readline sys.setrecursionlimit(10**6) n = int(input()) X = list(map(int, input().split())) x_c = sorted(set(X)) X_dict = {} for i in range(len(x_c)): X_dict[heapq.heappop(x_c)] = i for j in X: print(X_dict[j], end = " ") 해설 문제 보자마자 생각했던 것은 set, heapq, dictionary라서 이것들을 가지고 풀이를..
문제 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 DFS dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] big = 0 def dfs(graph, x, y, visited): global c c += 1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0