Algorithm Study

    [백준 파이썬] # 2292 벌집

    Bronze II # 2292 벌집 링크 : https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 풀이 N = int(input()) cnt = 1 an = [1, 2] while an[-1]

    [백준 파이썬] # 4153 직각삼각형

    Bronze III # 4153 직각삼각형 링크 : https://www.acmicpc.net/problem/4513 4513번: The Neptune Adventure For each data set in the input, print a single line with the shortest amount of time in minutes it takes to reach the location of the rescue team from your starting location without drowning (if possible). If it is not possible to reach the location of the www.acmicpc.net 풀이 while True: li = list(map(i..

    [백준 파이썬] # 5622 다이얼

    Bronze II # 5622 다이얼 링크 : https://www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 풀이 word = list(input()) dial = [[],[],['A','B','C'],['D','E','F'],['G','H','I'],['J','K','L'],['M','N','O'],['P','Q','R','S'],['T','U','V'],['W','X','Y','Z']] s = 0 for i in word: for j in dial: if i in j: s += dial.index(j) print(s+len(word)) 후..

    [백준 파이썬] # 2480 주사위 세개

    Bronze IV # 2480 주사위 세개 링크 : https://www.acmicpc.net/problem/2480 2480번: 주사위 세개 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개 www.acmicpc.net 풀이 a, b, c = map(int, input().split()) li = [0 for i in range(7)] # 6+1(0을 포함해야 하므로) li[a] += 1 li[b] += 1 li[c] += 1 if max(li) == 3: print(10000+(li.index(max(li))*1000)) elif max(li) ..

    [확률과 통계] 순열과 조합

    순열(nPr) 서로 다른 n개 중 r개를 선택하는 경우의 수 순서가 중요할 때 $$ _nP_r = \frac{n!}{(n-r)!} $$ 3명 중 2명을 뽑아 처음 사람에게 밥을 주고, 두 번째 사람에게 음료를 준다. 이때의 경우의 수는? a, b // b, a 는 서로 다른 경우 : 순서가 중요하다 조합(nCr) 서로 다른 n개 중 r개를 선택하는 경우의 수 순서가 중요하지 않을 때 $$ _nC_r = \frac{n!}{(n-r)!r!} $$ 3명 중 2명을 뽑아서 밥을 주려고 할 때, 경우의 수는? a, b // b, a 는 같은 경우 : 순서가 중요하지 않다 같은 것이 있는 순열 같은 것의 개수만큼 팩토리얼로 나눠준다 case 1: aaabb를 나열하는 경우의 수 case 2 : 원순열 case 3 ..

    [백준 파이썬] # 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]) 후기 백준에서 문제 검색 버튼을 이용하면 에러가 발생하는 원인에 대해 쉽..

    [백준 파이썬] # 2579 계단 오르기

    Silver III # 2579 계단 오르기 링크 : https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 풀이 N = int(input()) li = [0]*300 # [0 for i in range(N)] 적용 시 indexerror 발생 dp = [0]*300 for i in range(N): nums = int(input()) li[i] = nums dp[0] = li[0] dp[1] = li[0]+li[1] dp[2] = max(li[1]+li[2], ..

    [백준 파이썬] # 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]..

    [백준 파이썬] # 1002 터렛

    Silver IV # 1002 터렛 링크 : https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 풀이 T = int(input()) for i in range(T): x1, y1, r1, x2, y2, r2 = map(int, input().split()) l = ((x2-x1)**2 + (y2-y1)**2)**0.5 if l == 0: if r1==r2: print(-1) else: print(0) else: if r1+r2 == l or abs(r2-r1) == l: print(1) elif r1..