• TOC {:toc}

이 글은 백준 온라인 저지의 1668번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2021.05.19

메모리 시간 코드 길이
28776 KB 64 ms 230 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 17:25:30 17:26:01
풀이 생각 17:26:08 17:26:46
코딩 17:29:31 17:35:14
T = [int(input()) for _ in range(int(input()))]

now = 0
ci = 0
for x in T:
    if x > now:
        ci += 1
        now = x

now = 0
cd = 0
for y in reversed(T):
    if y > now:
        cd += 1
        now = y

print(ci)
print(cd)

피드백

  • 함수를 만들어서 썼으면 더 간결하게 작성 할 수 있었다.

참고 답안

# 풀이 1-1
def count(T):
    now = 0
    c = 0
    for x in T:
        if x > now:
            c += 1
            now = x
    return c

T = [int(input()) for _ in range(int(input()))]

print(count(T))
print(count(T[::-1]))

# 풀이 1-2
N = int(input())
# N 번 숫자를 입력받아 T에 저장한다.
# T는 입력받은 수로 이루어진 튜플이 된다.
T = eval("int(input())," * N)
# ... for i in range(N): N까지의 수를 순회하면서
# sorted(T[:i])[::-1] < [T[i]]:
    # T를 i - 1번까지 자른 리스트를 정렬해 역전시킨 것과 현재 값을 비교한다.
    # 이전까지의 리스트의 최댓값과 현재값을 비교하는 것과 같다.
    # 현재값이 크면 True를 아니면 False를 반환한다.
# sum(): True, False로 구성된 이터레이터의 합을 구한다.
    # True는 1 False가 0이므로 True의 개수가 반환된다.
f = lambda T: sum(sorted(T[:i])[::-1] < [T[i]] for i in range(N))

print(f(T), f(T[::-1]))

아이디어 & 풀이

파이썬에서 두 리스트를 비교할 때는 0번째 원소부터 차례대로 비교한다.