• TOC {:toc}

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

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

2021.05.14 (Python)

메모리 시간 코드 길이
49804 KB 268 ms 180 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 22:59:01 22:59:47
풀이 생각 22:59:48 23:00:18
코딩 23:00:19 23:08:18
import sys
input = sys.stdin.readline

L = []
for _ in range(int(input())):
    L.append(tuple(input().split()))

L.sort(key=lambda x: int(x[0]))

for x in L:
    print(x[0], x[1])

아이디어 & 풀이

입력받은 값을 튜플로 L에 추가한 뒤 정렬한다.

  • 정렬할 때 비교 기준이 같으면 리스트에 입력된 순서대로 정렬되기 때문에 나이가 같을 때 가입한 순으로 정렬하는 것은 따로 신경 쓰지 않아도 된다.

피드백

  • 값을 리스트에 입력할 때 입력 자체는 split() 없이 문자열 통째로 받고 sort() 할 때 key를 입력을 split() 한 것의 첫 번째 원소로 지정하면 된다.

2022.03.19

메모리 시간 코드 길이
30196 KB 376 ms 287 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 21:41:57 21:42:41
풀이 생각 21:42:47 21:44:35
코딩 21:44:51 21:49:08
디버깅 21:49:35 21:57:08
const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\n");

const [N, ...M] = input;

function main(M) {
    const res = M.sort((m1, m2) => {
        return parseInt(m1) - parseInt(m2);
    });
    return res.join("\n");
}

console.log(main(M));

디버그

  • input 받을 때 trim() 해주지 않았더니 출력형식이 잘못되었습니다 오류가 계속 떴다.

피드백

  • 다차원 배열 정렬시, JS 어차피 원래부터 숫자 정렬은 함수 작성해서 써야해서 정렬 우선순위 같은 거 알아보지 않아도 그냥 작성하면 됐다.
  • 정렬할 때 split해서 첫 번째 원소 비교해서 정렬하면 엄청 오래 걸린다. parseInt 쓰기.

참고 답안 1

import sys
input = sys.stdin.readline

N = int(input())
L = sorted([input() for _ in range(N)], key=lambda x: int(x.split()[0]))
print("".join(L))

아이디어 & 풀이

입력은 split() 없이 받은 뒤, 정렬 기준을 입력받은 값을 split()한 첫 번째 값으로 지정한다.

  • readline()으로 입력을 받아 입력 끝에 \n을 포함하고 있기 때문에 join 매개로 ""를 사용해도 한 줄씩 출력된다.

참고 답안 2

N, *L = open(0)
print(*sorted(L, key=lambda x: int(x.split()[0])), sep="")

아이디어 & 풀이

open()을 이용해서 stdin의 입력을 받는다.

정렬은 참고 답안1과 동일하게 하되, 별도의 리스트로 저장하지 않고 그대로 언 패킹해서 출력한다.