알고리즘/백준 109

백준 2579: 계단 오르기 (Python)

https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 어차피 마지막칸은 무조건 밟아야 하기 때문에 현재 칸을 밟는 경우의 최댓값을 계산해준다 인덱스 에러가 나지 않기 위해 리스트 인덱스0에 0을 추가했다 n = int(input()) arr = [0] for _ in range(n): arr.append(int(input())) d = [0] * (n+1) d[1] = arr[1] if n >= 2: d[2] = arr[1] + arr[2] for i in ra..

알고리즘/백준 2022.04.05

백준 1932: 정수 삼각형 (Python)

https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 삼각형을 리스트로 차례대로 입력받은 다음, 인덱스 에러가 나지 않게 거꾸로 for문을 돌려주었다 현재값+최댓값 해서 리스트에 저장해주고 제일 마지막 계산 부분(첫번째 줄)에는 값이 하나밖에 없으니 d[0][0] 출력하면 된다! n = int(input()) d = [list(map(int, input().split())) for _ in range(n)] for i in range(n-2, -1, -1): for j in range(i+1): d[i][j] += max..

알고리즘/백준 2022.04.01

백준 1149: RGB거리 (Python)

https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net n = int(input()) d =[list(map(int, input().split())) for _ in range(n)] for i in range(1, n): d[i][0] += min(d[i-1][1], d[i-1][2]) d[i][1] += min(d[i-1][0], d[i-1][2]) d[i][2] += min(d[i-1][0], d[i-1][1]) print(..

알고리즘/백준 2022.03.30

백준 9461: 파도반 수열 (Python)

https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net 무작정 그려놓고 규칙을 찾았다 처음엔 삼각형이 생기는 순서대로 규칙을 계산했다가 [인덱스-2] + [인덱스-3] 으로도 계산이 된다는 걸 찾음 d = [0] * 101 d[1], d[2], d[3] = 1, 1, 1 for i in range(4, 101): d[i] = d[i-2] + d[i-3] t = int(input()) for i in range(t): n = int(input()) print..

알고리즘/백준 2022.03.29

백준 1904: 01타일 (Python)

https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net 피보나치 수열이랑 똑같은 간단한 문제였다 그러나... 첫 번째 코드 - 메모리 초과 n = int(input()) d = [0] * (n + 1) d[1] = 1 d[2] = 2 for i in range(3, n+1): d[i] = d[i-1] + d[i-2] print(d[n] % 15746) 두 번째 코드 - 나머지 계산을 반복문 안에 넣어줌. 런타임 에러 n이 1일 때 d[2] = 2에서 인덱스..

알고리즘/백준 2022.03.29

백준 1003: 피보나치 함수 (Python)

https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 처음 코드 - 걍 냅다 계산.. 당연히 시간 초과 날 줄 알았음 def fib(n): d = [0] * (n + 1) if n == 0: count[0] += 1 return 1 if n == 1: count[1] += 1 return 1 d[n] = fib(n - 1) + fib(n - 2) return d[n] t = int(input()) for i in range(t): n = int(input()) count = [0, 0] fib(n) print(count[0], count[1]) ..

알고리즘/백준 2022.03.29

백준 1300: K번째 수 (Python)

https://www.acmicpc.net/problem/1300 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 알고리즘 자체는 쉬우나 문제 풀이를 이해하는 과정이 너무 어려웠다 그래서 일주일 전 쯤에 풀다가 그 상태로 방치하고 오늘 다시 함..ㅋㅋㅋ 2차원 배열 -> 1차원 배열로 바꾸는 비효율적인 방법밖에 생각이 나질 않아서 다른 사람들 풀이 참고해서 풀었는데 그마저도 이해가 안 가서 오랫동안 끙끙 앓았다ㅠ n = int(input()) k = int(input()) sta..

알고리즘/백준 2022.02.23

백준 2110: 공유기 설치 (Python)

https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 첫 제출은 시간 초과가 떴다.. 입력받는 부분만 sys.stdin.readline()으로 바꿔주니까 통과함 import sys n, c = map(int, sys.stdin.readline().split()) house = [int(sys.stdin.readline()) for _ in range(n)] house.sort() start = 1 ..

알고리즘/백준 2022.02.14

백준 2805: 나무 자르기 (Python)

https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 이진탐색 알고리즘 공부하면서 풀었던 문제랑 똑같네! 하고 후다닥 풀었지만 50%에서 시간 초과.. 시간을 줄이고자 이리저리 고쳐봤지만 더이상 고칠게 없는 거 같은데도 시간 초과.. 결국 구글링.. 이진 탐색으로 풀면 pypy3로 제출해야 시간초과가 뜨지 않는다고 한다ㅠ Counter 라이브러리 쓰면 python3도 통과된다고 하긴 함.. import sys ..

알고리즘/백준 2022.02.12

백준 1654: 랜선 자르기 (Python)

https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 처음엔 제일 작은 수부터 시작해서 점점 길이를 줄이면서 잘라내고 자른 개수 >= N 이면 멈추는 방식으로 코드를 짰는데 틀렸다. # 틀림 import sys k, n = map(int, sys.stdin.readline().split()) cable = [] for i in range(k): cable.append(int(sys.stdin.readline())) len..

알고리즘/백준 2022.02.11