인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.
파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의
파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런...
www.inflearn.com

내 풀이 (정답 아님)
from collections import deque
#내 풀이
n, m = map(int, input().split())
a = list(map(int, input().split()))
a = deque(a)
target = a[m]
cnt = 0
while True:
tmp = a.popleft()
if tmp[1] >= max(a[1]):
cnt += 1
else:
a.append(tmp)
if target not in a:
break
print(cnt)
테스트케이스1은 통과했지만
같은 값의 위험도가 존재할때 오류가 생긴다.
target 이 아닌 다른 방안을 생각해야 한다.
강의 풀이
from collections import deque
#강의 풀이
n, m = map(int, input().split())
Q = [(pos, val) for pos, val in enumerate(list(map(int, input().split())))]
Q = deque(Q)
cnt = 0
while True:
cur = Q.popleft()
if any(cur[1] < x[1] for x in Q):
Q.append(cur)
else:
cnt += 1
if cnt[0] == m:
print(cnt)
break
일단 입력을 받을때
강사님은 enumerate를 이용하여 (순서, 위험도값)을 한번에 입력받는 방식을 사용하였다.
그 이후 any 함수는 조건에 해당하는 값이 하나라도 있으면 참이 된다.
현재 popleft 한 위험도보다 큰 위험도가 큐에 있다면 맨뒤에 넣고,
popleft 값보다 큰 위험도가 없다면 그대로 순서를 +1 한다.
이후, cnt[0] -> 순서가 처음에 입력받은 n과 같다면 출력후 반복문을 탈출한다.
enumerate의 활용성을 기억하자
똑같은 문제
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
'알고리즘 (Python)' 카테고리의 다른 글
합이 같은 부분집합 (DFS) (0) | 2022.04.01 |
---|---|
부분집합 구하기 (DFS) (0) | 2022.04.01 |
후위 표기식 만들기(스택) (0) | 2022.03.30 |
쇠막대기(스택) (0) | 2022.03.30 |
가장 큰 수(스택) (0) | 2022.03.27 |
댓글