본문 바로가기

BOJ/Python

(192)
[BOJ/백준] 1436 - 영화감독 숌 (Python) 문제문제링크종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수이다.영화 제목에 항상 종말의 수가 들어간다할 때, N번째 영화 제목에 들어간 수를 출력하라. 풀이이 문제는 브루트포스 알고리즘을 활용하는 문제이다.가장 작은 종말의 수는 666이므로 666부터 시작한다.만약 현재 수(666에서 시작)에 666이 들어있으면 N에서 1을 뺀다. 이 과정을 반복하다가 N이 0이 되는 순간 문제에서 원하는 종말의 수를 얻을 수 있다.만약 현재 수에 666도 안 들어가고 N도 0이 아니라면 다음 수로 넘어가야 하므로 현재 수에 1을 더해준다. 코드N=int(input())nth=666while True: if '666' in str(nth): N-=1 if N==0: print(nth)..
[BOJ/백준] 33571 - 구멍 (Python) 문제문제링크문자열 S는 알파벳(대문자+소문자)와 @로 이루어져있다.S에서 구멍의 개수를 구하라. 풀이문자 중 "AabDdegOoPpQqR@"에는 구멍이 1개, 'B'에는 2개, 나머지는 없다.따라서 구멍의 개수는 'AabDdegOoPpQqR@' 개수와 'B'개수*2를 더하면 된다.Counter는 문자열에 있는 모든 문자의 틍장횟수를 딕셔너리 형태로 반환하므로 sum()으로 이 횟수를 합해준다.'B'에는 구멍이 2개 이므로 2를 곱해주어야 한다. 코드from collections import Counterone_hole="AabDdegOoPpQqR@"counter_one = Counter(one_hole)two_holes='B'S=input()holes=sum(counter_one[i] for i in ..
[BOJ/백준] 33612 - 피갤컵 (Python) 문제문제링크제1회 피갤컵는 2024년 8월에 열렸다.피갤컵은 7개월 주기로 열린다.N번째 피갤컵은 언제인가? 풀이현재 날짜를 2024년 8월로 둔다.1회 피갤컵이 오늘이므로 오늘 기준으로 제n회 피갤컵은 (n-1)*7개월 후에 열린다.이 값을 현재 날짜의 월에 더했을 때 12로 나누어떨어지지 않으면 단순히 몫은 연도에 더하고 나머지를 월로 두면 된다.하지만 12로 나누어떨어지는 경우 실제로는 12월이므로 몫에서 1을 뺀 값을 연도에 더해준다.만약 두 경우를 나누지 않는다면 다음해의 0월로 구해질 것이다. 코드n=int(input())y, m=2024, 8month=(n-1)*7m+=monthif m%12==0: y+=(m//12)-1 m=12else: y+=(m//12) m%=12print(y, m)
[BOJ/백준] 33515 - 노트북 세 대를 가지고 왔다 (Python) 문제문제링크입력으로 주어지는 두 팀원의 문제 풀이 시간보다 작거나 같아야 형진이 노트북으로 대회에 참가할 수 있다.형진이가 문제를 푸는 데 필요한 최대 시간을 초 단위로 출력하라. 풀이형진이의 최대 시간은 두 팀원들의 문제 풀이 시간 중 더 작은 값과 같다. 코드T1, T2 = map(int, input().split())print(min(T1, T2))
[BOJ/백준] 32801 - Generalized FizzBuzz (Python) 문제문제링크generalized version of FizzBuzz는 아래 규칙을 따른다.i가 a와 b 모두로 나누어떨어지면, 'FizzBuzz'이외에, a로 나누어떨어지면, 'Fizz'이외에, b로 나누어 떨어지면, 'Buzz'그 이외에는 i를 출력한다. Fizz, Buzz, FizzBuzz가 정수 n까지 몇 번씩 나오는지 출력하라. 풀이첫번째 경우는 i가 a와 b의 최소공배수로 나누어떨어지는가에 대한 것이다. 코드import sysinput=sys.stdin.readlineimport mathn,a,b=map(int, input().split())FizzBuzz, Fizz, Buzz=0,0,0lcm=(a*b)//math.gcd(a,b) #최소공배수for i in range(1, n+1): if ..
[BOJ/백준] 32902 - Chips (Python) 문제문제링크k개의 캔에 캔마다 n개의 chip이 들어있다.1분마다 캔 하나를 골라 chip 하나씩 먹는다.캔을 골랐을 때 빈 캔일 경우까지 걸리는 최소 시간과 최대 시간을 구하라. 풀이최소 시간은 고른 캔들이 모두 같을 캔일 경우이다. 다 먹는데 n분이 걸리고 빈 캔을 고를 때 1분이 추가되므로 최소 시간은 n+1분이 된다.최대 시간은 마지막으로 고른 캔이 chip들을 모두 먹었을 경우이다. 따라서 n*k+1분이 걸린다. 코드import sysinput=sys.stdin.readlinek,n=map(int, input().split())print(n+1, k*n+1)
[BOJ/백준] 10820 - 문자열 분석 (Python) 문제문제링크문자열 n개가 주어질 때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 수를 구하라.이때 n은 알 수 없다. 풀이몇 번째 줄까지 입력이 있는지 모르므로 try-except문을 사용한다.input을 readline으로 받았으므로 문자열 마지막에는 항상 '\n'이 존해한다, 만약 rstrip()으로 처리하게 되면 마지막에 공백 후에 이어진 개행문자에서 문제가 발생한다. 공백도 함께 사라지는 것이다.따라서 strip으로 처리하지 않고 문자마다 접근할 때 chah=='\n'일 때 pass했다.각각 소문자, 대문자, 숫자, 공백 판단은 islower(), isupper(), isdigit(), isspace()를 사용하고 리스트의 각 위치에 맞게 1을 더하는 방식을 사용했다. 코드import..
[BOJ/백준] 10866 - 덱 (Python) 문제문제링크주어진 명령은 총 8개이다.push_front X: 정수 X를 덱의 앞에 넣는다.push_back X: 정수 X를 덱의 뒤에 넣는다.pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 덱에 들어있는 정수의 개수를 출력한다.empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 ..