https://www.acmicpc.net/problem/1966
문제 설명:
우선순위가 가장 높은 순서인 게시물이 가장 앞에 있으면 꺼내준다. 이때 카운터를 해줘야 한다.
만약 우선순위가 높지 않은데 가장 앞에 있다면 뒤로 보내준다.
내가 찾아야 할 우선순위가 나오면 카운터를 증가해주고 꺼내준다.
처음 헤맨것은 왜 이렇게 입력을 받는거지?
가장 처음 몇 개의 case인지 알았고
1 0 -> 한장의 카드가 있고 0번째에 놓여있는지를 나타내고 있다.
그 이후로 이해가 되지 않았다.
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
알고보니! 3 셋트가 묶여있는것
1 0
5
한 셋트
4 2 -> 4장의 카드가 있고 뽑을 문서는 현재 2번째 위치에 있다.
1 2 3 4 -> 우선순위는 1 2 3 4
한 셋트
즉 내가 뽑고 싶은 카드는 2번째자리(0부터 시작하기 때문에) 즉 우선순위 3을 가지고 있다.
코드를 짜보자.
1. 카드의 숫자-> 자리(0부터 시작) index 라고 하자 / 우선 순위를 매칭 시켜주는 튜플을 생성 할 것이다.
printer = []
prior = list(map(int, input().split()))
index = 0
for value in prior:
printer.append((value,index))
index += 1
2. 그 다음 printer 에 들어있는 요소를 꺼내어 우선순위가 가장 높은지 확인한다.
만약 우선순위가 높지 않다면 뒤로 다시 넣어줄 것
우선순위가 맞다면 cnt 값을 증가시켜줄 것
while True:
check = printer.pop(0)
if all(check[0] >= x[0] for x in printer):
cnt += 1
else:
printer.append(check)
3. 내가 찾고싶은 요소의 값이 있다면 if문에 pop 했을 것
그렇기 때문에 더 이상 printer에 존재하지 않는다.
그럼 이걸 미리 복사해서 tmp = printer.copy() 해서 tmp[M] 의 값이 printer에 없다면
내가 찾을 요소는 이미 빠져나가 이때 cnt을 확인하면 되지 않을까?
tmp = printer.copy()
cnt = 0
while True:
check = printer.pop(0)
if all(check[0] >= x[0] for x in printer):
cnt += 1
else:
printer.append(check)
if tmp[M] not in printer:
print(cnt)
break
'코딩테스트 > 백준' 카테고리의 다른 글
[Python] 백준 17219. 비밀번호 찾기 (0) | 2023.10.20 |
---|---|
[Python] 백준 1920. 수 찾기 (0) | 2023.10.20 |
백준 2164. 카드2 (1) | 2023.10.19 |
백준 1874번. 스택수열 (1) | 2023.10.18 |
Valid Parentheses (0) | 2023.10.18 |