백준-1158 요세푸스 문제

Yeom Jae Seon·2021년 1월 25일
0

알고리즘

목록 보기
5/19
post-thumbnail

백준-1158 요세푸스 문제

원에 앉아있는 사람의 수 : N
이 원을 빙글빙글 돌면서 K번째 사람을 제거함

나는 무한루프 내에서 변수 i에 대해 한번의 루프마다 1씩 증가하며 i가 K일때 의 리스트의 원소를 삭제하는식으로함.

굳이이랬어야했나 싶다. 그냥 K - 1씩 더해가면서 해당 원소를 삭제하고 리스트의 크기를 넘었을 경우 num = num % len(array)를 통해서 초기화 시키면 되는게 아닌가 싶다.

  • 통과는 했지만 불만족 스러운 코드 😅
N, K = map(int, input().split())

arr = []
resultArr = []

for i in range(0, N):
    arr.append(True)

exitValue = 0
z = 0
i = 1 # K관한 변수
while True:
    if arr[z] == False:
        z += 1
    else:
        if i == K:
            arr[z] = False
            resultArr.append(z + 1)
            exitValue += 1
            if exitValue == N:
                break;
            i = 0
        z += 1
        i += 1
    if z == N:
        z = 0

print('<', end='')
for i in range(0, len(resultArr)):
    if i == len(resultArr) - 1:
        print(resultArr[i], end='')
    else:
        print(resultArr[i], end=', ')
print('>')
  • solution 😁
N, K = map(int, input().split())

arr = [i for i in range(1, N + 1)]
resultArr = []

popNum = 0
while len(arr) > 0:
  popNum = (popNum + (K - 1)) % len(arr)
  popElement = arr.pop(popNum)
  resultArr.append(popElement)

print('<', end='')
for i in range(0, len(resultArr)):
    if i == len(resultArr) - 1:
        print(resultArr[i], end='')
    else:
        print(resultArr[i], end=', ')
print('>')

popNum = (popNum + (K - 1)) % len(arr) 이런식으로 리스트를 통해 원을 구현할수 있다.

0개의 댓글