[요세푸스 문제]-1158번
My answer
import sys
n,k=map(int,sys.stdin.readline().split())
idx,tmp=0,[]
que,que2=[i for i in range(n,0,-1)],[]
while(1):
if(que==[]):
if(que2==[]):
break
que,que2=que2,que
que=list(reversed(que))
if(idx!=k-1):
que2.append(que[-1])
que.pop()
idx+=1
elif(idx==k-1):
tmp.append(que[-1])
que.pop()
idx=0
for i in range(len(tmp)):
if(len(tmp)==1):
print("<%i>"%tmp[i])
elif(i==0):
print("<%d"%tmp[i],end=",")
elif(i==len(tmp)-1):
print(" %d>"%tmp[i],end="")
else:
print(" %d"%tmp[i],end=",")
Another answer
n,m=map(int,input().split())
l=[*range(1,n+1)]
r=[]
i=0
while l:
i=(i+m-1)%len(l)
r+=[str(l.pop(i))]
print('<',', '.join(r), '>',sep='')
더보기
엄청 헤매던 문제라서 풀고 좋아했는데, 이렇게 쉽게 푼 숏코딩을 보니 언제나처럼 현타가 온다. 나도 밑에 코드처럼 간단하게 짰었는데, 이미 제거한 것 때문에 갯수가 달라져서 어떻게 해야할 지 몰라서 i=(i+m-1)%n 까진했었는데,, 뒤에가 n이 아니라 계속 달라지므로 len(l)을 했어야 했다 ㅜㅜ 그리고 출력부분도 나는 엄청 더럽게 짰는데 저런 한줄로 하는 방법이 있다니... 공부해야겠다. 우선 내 코드 설명을 하자면 스택을 두개만들어서 계속 옮기고 바꾸면서 했다. 제거된거는 pop을 해서 tmp라는 정답리스트에 넣고 k번째가 삭제되는것을 index로 표현해서 계속 초기화해주면서 했다. 나는 근데 코드자체가 직관적?이지 않은것 같다. 그래도 문제를 풀었다는 것에 저기 아래코드 출력부분을 보고 감탄했다..
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python/백준] #1850- [최대공약수] (0) | 2021.12.04 |
---|---|
[Python/백준] #1934- [최소공배수] (0) | 2021.12.04 |
[Python/백준] #1406- [에디터] [try_again] (0) | 2021.12.03 |
[Python/백준] #11656- [접미사 배열] (0) | 2021.12.02 |
[Python/백준] #11655- [ROT13] (0) | 2021.12.01 |