• TOC {:toc}

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

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

2021.04.28 (Python)

메모리 시간 코드 길이
28776KB 68 ms 252 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 11:11:20 11:11:27
풀이 생각 11:11:29 11:14:07
코딩 11:14:09 11:21:45
디버깅 11:21:46 11:36:01
import sys
input = lambda: sys.stdin.readline().rstrip()

s = list(map(int, input().split()))

# s를 인덱스 따라 순회하면서
for i in range(1, len(s)):
    # 인접한 두 원솟값의 차이가 1이 아니면
    if abs(s[i] - s[i - 1]) != 1:
        # mixed를 출력하고 break
        print("mixed")
        break
# 순회를 break 없이 끝냈을 때
else:
    # s의 첫 값이 1이면 ascending 아니면 descending
    print("ascending" if s[0] == 1 else "descending")

디버그

  • else 들여쓰기를 for문 안에다 했었다.
  • descending에 오타가 있었다.

피드백

  • ascending과 descending은 각각 딱 한 가지 경우로 정해져 있기 때문에 각 원소에 대해서 조사하는 게 아니라 입력을 일괄로 받아서 직접 비교하는 게 낫다.

2022.03.17 (JS)

메모리 시간 코드 길이
9436 KB 144 ms 264 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 22:38:04 22:39:42
코딩 22:39:51 22:44:51
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();

if (input === "1 2 3 4 5 6 7 8") {
    console.log("ascending");
} else if (input === "8 7 6 5 4 3 2 1") {
    console.log("descending");
} else {
    console.log("mixed");
}

디버그

  • trim 하지 않으면 오답처리 된다.

피드백

  • 한 번 봤던 문제인데 위 같은 깔끔한 풀이를 또 못 떠올려서 아쉬웠다.
  • 파이썬은 어땠는지 기억이 안나지만 풀이가 엄청 다양하다.

참고 답안 1

# 인풋을 1칸씩 건너뛰면서 받는다 (공백 제거).
a = input()[::2]
# 12345678, 87654321, 그 외(a)로 객체를 만든 뒤
# 받아온 a를 key로 입력한 결과를 출력한다.
print({a: "mixed", "12345678": "ascending", "87654321": "descending"}[a])

참고 답안 2

s = input()
d = "1 2 3 4 5 6 7 8"

# 입력이 "1 2 3 4 5 6 7 8"과 같으면
if s == d:
    # ascending
    print("ascending")
# "1 2 3 4 5 6 7 8"을 역전시킨 것과 같으면
elif s == d[::-1]:
    print("descending")
# 그 외는 mixed
else:
    print("mixed")

참고 답안 3

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split(' ');

let count = 0;

// 현재 수가 다음 수보다 작으면 count를 증가
for (let i = 0; i < 7; i++) {
  if (input[i] < input[i + 1]) count++;
}

// count가 7이면 매번 증가: ascending
if (count === 7) console.log('ascending');
// count가 0이면 매번 감소: ascending
else if (count === 0) console.log('descending');
// 그 외면 mixed
else console.log('mixed');