목록백준 (73)
하루일문
문제 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
문제 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 import sys input = sys.stdin.readline n = int(input()) li = [] for _ in range(n): age, name = input().split() li.append((int(age), name)) li.sort(key= lambda x: x[0]) for _ in li: print(*_) 해설 두 수를 받아 튜블로 묶고, 람다로 정렬하여 하나씩 프린트했다.
문제 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로 www.acmicpc.net 풀이 DFS # 방향으로 움직일 리스트 dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] big = 0 def dfs(graph, x, y, visited): global big, c # 큰 값을 구해줘 big = max(big, visited[x][y]) # 빠지지 않고 계속 움직이면 돌아가더라도 숫자를 유지시켜줘 c += 1 for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0
문제 https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 풀이 import sys input = sys.stdin.readline n = int(input()) n_li = [] for _ in range(n): a, b = map(int, input().split()) n_li.append((a, b)) # 오름차순으로 정렬해줘, 키로 람다를 하용해서 기준인 x는 1번 후 0번 순서야 n_..