목록알고리즘 문제 (57)
성장일기
1부터 N까지 번호가 있고 1번 카드가 제일 위, N번 카드가 가장 아래인 상태 1. 제일 위의 카드를 버림 2. 버린 후 제일 위에 있는 카드를 가장 아래로 옮김 3. 이를 반복하여 마지막 남는 카드 구하기 import sys input=sys.stdin.readline from collections import deque d=deque() #데크 사용 num=int(input().rstrip()) for i in range(1,num+1): d.append(i) #1부터 입력 숫자까지 데크에 추가 while len(d)>1: #데크 길이가 1보다 클 경우 d.popleft() #가장 왼쪽(윗쪽) 지우기 d.append(d.popleft()) #가장 왼쪽을 오른쪽으로 옮기기 print(*d) #그냥 d..
n개의 출입 기록 수 enter인 경우 출근, leave인 경우 퇴근 동명이인이 없으며 대소문자가 다른 경우 다른 사람 현재 회사에 있는 사람을 사전 역순으로 출력하기 🧨sort와 sorted의 용법이 헷갈려서 자꾸 틀렸었다. 아쉬운 실수는 하지 말자😥 import sys input=sys.stdin.readline n=int(input().rstrip()) #로그 기록 수 dic={} for i in range(n): a=input().rstrip() if a.endswith('enter'): #enter로 끝나면 a,b=a.split() dic[a]=1 #딕셔너리에 이름 추가 elif a.endswith('leave'): a,b=a.split() del dic[a] #leave면 지우기 dic_li=..
분자 분모 형태로 숫자가 두 개 주어진다. 두 수의 합을 기약분수형태로 출력하기 🧨문제가 너무 간단해서 반례를 찾기가 어려웠다. import sys input=sys.stdin.readline def gcd(a,b): #최대공약수 if b==0: return a else: return gcd(b,a%b) n,m=map(int,input().split()) j,k=map(int,input().split()) num=n*k+m*j #약분 전 분자 dem=m*k #약분 전 분모 gcd_=gcd(m,k) #분모끼리의 최대공약수 if dem==0: print('0 1') """ 분모가 0이면 0 1 출력(반례찾으러 질문검색에서 봤는데 이렇게 출력하는게 맞는지는 모르겠음 일단 AC) """ else: num=num..
n:m 형태로 주어진 두 수를 최대한 약분해서 출력 import sys input=sys.stdin.readline def gcd(a,b): if b==0: return a else: return gcd(b,a%b) n,m=input().split(':') n=int(n) m=int(m) gcd_nm=gcd(n,m) print(f'{n//gcd_nm}:{m//gcd_nm}') //gcd로 나눠서 출력
저장된 사이트의 주소 수 N 비밀번호를 찾으려는 사이트 주소 수 M 찾으려는 사이트의 비밀번호 출력 import sys input=sys.stdin.readline n,m=map(int,input().split()) dic={} for i in range(n): a,b=input().split() dic[a]=b #딕셔너리에 저장 for i in range(m): print(dic[input().rstrip()])
포켓몬 도감에 수록되어 있는 포켓몬의 개수N 내가 맞춰야하는 문제의 개수 M N개의 줄에 번호가 1번인 포켓몬부터 N번인 포켓몬까지 저장 문자로 들어오면 해당 숫자 출력, 숫자로 들어오면 해당 문자 출력 import sys input=sys.stdin.readline n,m=map(int,input().split()) dic={} for i in range(1,n+1): #1번부터 n번까지 a=input().rstrip() dic[a]=str(i) #a=str(키값) dic[str(i)]=a #키값=a for i in range(m): print(dic[input().rstrip()])