본문 바로가기

BOJ/Python

(192)
[BOJ/백준] 11047 - 동전 0 (Python) 문제문제링크n 종류의 동전의 가치가 주어질 때, 동전을 조합하여 가치의 합을 K로 만들려고 한다. 이때 최소 동전 수를 구하라. 풀이동전의 가치가 오름차순으로 주어지므로 reverse()로 뒤집는다.for문과 if문을 이용해 총액 k보다 동전의 가치가 작은 경우에만 동전의 개수를 더해준다.이때 동전의 개수는 총액을 동전의 가치로 나눈 몫이고 나머지 금액 k - (k//val) = k % val로 계속 for문을 진행한다. 코드n,k=map(int, input().split())values=[int(input()) for _ in range(n)]values.reverse()coins=0for val in values: if k>=val: coins+=k//val k%=val..
[BOJ/백준] 22380 - 割り勘 (Python) 문제문제링크n명의 사람이 총 m엔을 m/n씩 감당하기로 했다.각 사람이 m/n보다 적은 금액을 가지고 있다면 현재 가지고 있는 돈을 모두 내고 나머지는 다음에 지불하기로 한다.오늘 모든 총 금액을 구하라. 풀이n과  m이 모두 0인 경우 입력은 종료된 것이므로 while True문에서 if로 종료 조건을 설정했다.각 사람이 가진 금액을 리스트 형태로 저장하고 for문으로 각 요소에 접근해 m/n(m은 n으로 나누어떨어짐)보다 크거나 같으면 m/n을, 작으면 요소 전체를 합한다. 코드while True: n, m = map(int, input().split()) if n+m == 0: break As = list(map(int, input().split())) tot=0 ..
[BOJ/백준] 24084 - 次の文字 (Next Character) (Python) 문제문제링크길이가 n이고 'J', 'O', 'I'로만 이루어진 문자열 s가 있다. i+1번째 문자가 'J'일 경우 i번째 문자를 출력하라. 풀이i를 0부터 시작하면 종료 조건이 헷갈리므로 1에서 시작해 n보다 작은 경우까지 반복되는 것으로 설정했다.i는 index를 의미하므로, s[i]는 문자열 s에서 index i에 해당하는 문자를 의미한다.이 문자가 'J'라면 바로 그 앞 위치의 문자를 출력한다. 코드n=int(input())s=input()for i in range(1, n): if s[i]=='J': print(s[i-1])
[BOJ/백준] 30067 - Paslėpta suma (Python) 문제문제링크총 9개의 정수의 합을 9개 수 사이에 감춰 총 10개의 수가 있다.숨긴 수를 찾아라. 풀이9개 수의 합을 x라 하자. 9개 수 사이에 x를 숨겼다는 것은 나머지 9개 수와 x의 총합을 구하면 간단하다.(9개 수의 합) + x = x + x = 2 * x이므로 10개의 수를 모두 더해 2로 나누면 x를 구할 수 있다. 코드nums=[int(input()) for _ in range(10)]tot=sum(nums)print(tot//2)
[BOJ/백준] 29546 - Файлы (Python) 문제문제링크총 n개의 파일의 이름이 있을 때, 목록으로 받고 싶은 파일들의 첫번째 파일 번호와 마지막 사진 번호가 주어진다.이에 해당하는 모든 파일 이름을 출력하라. 풀이 파일번호는 1부터 시작되므로, 쉽게 풀기 위해 files 리스트의 index 0에 값 None을 넣고 나머지 파일 이름을 그 뒤에 추가한다.첫 번째 번호(f)와 마지막 번호(l)를 입력 받아 while문으로 그 구간에서의 모든 파일의 번호에 해당하는 파일 이름을 출력한다.이때 파일 번호는 i이고, f에서 시작해 1씩 더해주며  l보다 작거나 같을 경우에 출력문을 실행하게 된다. 코드n=int(input())files=[None]files.extend([input() for _ in range(n)])m=int(input())for _ ..
[BOJ/백준] 30585 - Поп-ит (Python) 문제문제링크팝잇의 높이와 너비가 주어질 때, 처음 판매될 때의 원래 상태로 돌리기 위해 눌러야하는 최소 버블의 수를 구하라. 풀이모든 버블의 상태를 1 (안으로 눌린 상태) 또는 0 (밖으로 나온 상태)으로 맞춰야 하므로 둘의 개수 모두 세서 현재 적은 것을 다른 상태로 바꿔야 한다.0과 1로 이루어진 줄 단위로 버블들의 현재 상태를 입력받는다. (이때 너비는 그리 중요하지 않다.)각 줄마다 1과 0의 개수를 세서 더하고 최종 1과 0의 개수 중 최소값을 출력하면 된다. 코드h, w = map(int, input().split())one_bubbles, zero_bubbles = 0, 0for _ in range(h): bubble=input() one_bubbles+=bubble.count(..
[BOJ/백준] 32604 - Jumbled Scoreboards (Python) 문제문제링크사진에 두 팀에 점수가 찍혀있을 떄, 보내진 사진이 시간 순서대로 정렬되었는지 판단하라. 풀이각 점수 a와 b를 리스트 형태로 리스트 안에 저장한다.리스트의 요소와 바로 다음 인덱스의 요소를 비교해, 나중 요소가 더 작으면 시간 순서대로 온 것이 아니다.a값과 b값 중 둘 중 하나라도 나중 요소가 더 작으면(AB[i][0]>AB[i+1][0] or AB[i][1]>AB[i+1][1]) 시간 순이 아니다.for문 안에 if문으로 각 요소를 판단하고 시간 순이 아닌 순간 break로 반복문을 종료한 후, 'no'를 출력한다. 코드n=int(input())AB=[list(map(int, input().split())) for _ in range(n)]default='yes'for i in range..
[BOJ/백준] 31520 - Champernowne Verification (Python) 문제문제링크k번째 Champernowne 단어는 첫 k개의 양의 정수를 차례대로 나열한 것이다.양의 정수 n이 주어졌을 때, 이것이 Champernowne인지 판별하고 맞으면 몇 번째 Champernowne 단어인지 구하고,아니라면 -1을 출력하라. 풀이k=1부터 시작하여 n의 길이가 k의 길이보다 작아지는 경우까지 아래의 과정을 반복한다.k가 n의 맨 앞에 있는지 startswith()로 판별하고, 맞다면 k의 자릿수만큼 n의 맨 앞 자리에 해당하는 부분을 제거한다.k에 1을 더해주고 계속 반복한다.맨 앞에 없다면 이 수는 Champernowne이 아니다.while문이 종료될 때까지 return 값이 없었다면 이 수는 Champernowne이다.이 상황에서 k 값은 원하는 값에 1이 더해진 값이므로 k..