알고리즘

    [백준 파이썬] # 1904 01타일

    Silver III # 1904 01타일 링크 : https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net 풀이 N = int(input()) dp = [0] * (N+1) # indexerror 방지 dp[0] = 1 dp[1] = 2 for i in range(2, N): dp[i] = (dp[i-2] + dp[i-1]) % 15746 # 메모리 크기 제한 print(dp[N-1]) 후기 백준에서 문제 검색 버튼을 이용하면 에러가 발생하는 원인에 대해 쉽..

    [백준 파이썬] # 2525 오븐 시계

    Bronze IV # 2525 오븐 시계 링크 : https://www.acmicpc.net/problem/2525 2525번: 오븐 시계 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.) www.acmicpc.net 풀이 A, B = map(int, input().split()) C = int(input()) B += C while True: if B >= 60: A += 1 B -= 60 else: break if A >= 24: A -= 24 print(A, B) 후기 while ~ else: break 구문으로 무한 반복되는 것을 방지했다

    [백준 파이썬] # 1932 정수 삼각형

    Silver I # 1932 정수 삼각형 링크 : https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 풀이 T = int(input()) li = [] # 입력값 list 만들기 for _ in range(T): nums = list(map(int, input().split())) li.append(nums) # 마지막 인덱스로부터 최대값을 구해나가기 for i in reversed(range(T-1)): for j in range(len(li[i])): li[i][j] = li[i][j] + max(li[i+1][j]..

    [백준 파이썬] # 10814 나이순 정렬

    Silver V # 10814 나이순 정렬 링크 : https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 풀이 N = int(input()) li = [] for i in range(N): a, b = input().split() li.append([a, b]) li = sorted(li, key = lambda a: int(a[0])) # point! for i in li: print(i[0], i[1]) 후기 lambda를 이용해 정의할 때 숫자 기준..

    [백준 파이썬] # 10845 큐

    Silver IV # 10845 큐 링크 : https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 풀이 import sys from collections import deque N = int(sys.stdin.readline()) queue = deque() for i in range(N): a = sys.stdin.readline().split() if a[0] == "push": queue.append(a[1]) elif a[0]..

    [백준 파이썬] # 15649 N과 M (2)

    Silver III # 15649 N과 M (2) 링크 : https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 N, M = map(int, input().split()) def dfs(start, seq): if len(seq) == M: print(' '.join(list(map(str, seq)))) return for i in range(start, N+1): if i not in seq: seq.append(i) dfs(i+1, se..

    [백준 파이썬] # 15651 N과 M (3)

    Silver III # 15651 N과 M (3) 링크 : https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 N, M = map(int, input().split()) def dfs(depth, seq): if depth == M: print(' '.join(list(map(str, seq)))) return for i in range(1, N+1): seq.append(i) dfs(depth+1, seq) seq.pop() dfs(0, ..

    [백준 파이썬] # 7568 덩치

    Silver V # 7568 덩치 브루트 포스 링크 : https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 풀이 N = int(input()) li = [] for i in range(N): w, h = map(int, input().split()) li.append([w, h]) for i in range(N): rank = 1 for j in range(N): if (li[i][0] < li[j][0]) and (li[i][1] <..

    [백준 파이썬] # 13305 주유소

    Siver IV # 13305 주유소 그리디 알고리즘 링크 : https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 풀이 N = int(input()) D = list(map(int, input().split())) # Distance P = list(map(int, input().split())) # Price C = 0 # Cost M = 1000000001 # Minimum Distance C += D[0]*P[0] # D, P의..

    [백준 파이썬] # 2231 분해합

    Bronze II # 2231 분해합 브루트 포스 링크 : https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 풀이 N = int(input()) li = [] # 출력값이 N보다는 작은 값이라는 가정하에 모든 경우의 수 확인 for i in range(N): s = 0 # for문이 돌 때마다 s를 갱신해야 함 s += i for j in str(i): s += int(j) if s == N: li.append(i) ..