Algorithm Study
[백준 파이썬] # 10250 ACM 호텔
Bronze III # 10250 ACM 호텔 링크 : https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 풀이 T = int(input()) for i in range(T): H, W, N = map(int, input().split()) if N%H == 0: print(H*100 + N//H) else: print(N%H*100 + N//H+1) 후기 층과 방 번호를 문자열로 더하려다가 많이 실패.. 했었다
[백준 파이썬] # 2775 부녀회장이 될테야
Bronze II # 2775 부녀회장이 될테야 링크 : https://www.acmicpc.net/problem/2775 2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다 www.acmicpc.net 풀이 T = int(input()) for i in range(T): k = int(input()) n = int(input()) apart = [[1]*n for j in range(k+1)] apart[0] = list(range(1, n+1)) for j in range(1, k+1): for h in range(1, n): apart[j][h] = apart[j][h-1] ..
[백준 파이썬] # 9461 파도반 수열
Silver III # 9146 파도반 수열 링크 : https://www.acmicpc.net/problem/9146 9146번: Linie Na výstupu bude věta "Smernice byla dodrzena.", pokud neexistuje žádná trojice policistů stojících na jedné přímce. Jinak program vypíše na výstup větu "Tito policiste porusuji smernici:" a na každém z dalších řádků bude vždy výpis www.acmicpc.net 풀이 N = int(input()) def P(n): dp = [1, 1, 1] num = int(input()) if num..
[백준 파이썬] # 1003 피보나치 함수
Silver III # 1003 피보나치 함수 링크 : https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 풀이 N = int(input()) for _ in range(N): num = int(input()) dp = [[1,0],[0,1]] if num >= 2: for i in range(2, num+1): dp.append([dp[i-1][0]+dp[i-2][0], dp[i-1][1]+dp[i-2][1]]) print(dp[-1][0], dp[-1][1]) else: print(dp[num][0], dp[num][1]) 후기 DP의 첫 ..
[백준 파이썬] # 9184 신나는 함수 실행
Silver II # 9184 신나는 함수 실행 링크 : https://www.acmicpc.net/problem/9184 9184번: 신나는 함수 실행 입력은 세 정수 a, b, c로 이루어져 있으며, 한 줄에 하나씩 주어진다. 입력의 마지막은 -1 -1 -1로 나타내며, 세 정수가 모두 -1인 경우는 입력의 마지막을 제외하면 없다. www.acmicpc.net 풀이 d = [[[0]*21 for i in range(21)] for j in range(21)] def w(a,b,c): if a20: return w(20,20,20) # 배열에 값이 저장되어 있으면 계산하지 않고 출력 if d[a][b][c]: return d[a][b][c] if a
[백준 파이썬] # 1874 스택 수열
Silver III # 1874 스택 수열 링크 : https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 풀이 N = int(input()) stack = [] # 숫자를 담을 리스트 result = [] # '+' or '-'을 담을 리스트 cnt = 1 # 입력값의 경우의 수를 제한하기 위해 사용하는 기준 temp = True # 오류 판별에 사용 for i in ..
[백준 파이썬] # 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 (4)
Silver III # 15651 N과 M (4) 링크 : https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 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): seq.append(i) dfs(i, seq) seq.pop() dfs(1,..