• TOC {:toc}

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

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

2021.05.14 (Python)

메모리 시간 코드 길이
56876 KB 416 ms 178 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 23:49:18 23:49:21
풀이 생각 23:49:23 23:52:43
코딩 23:52:45 00:08:47
디버깅 00:08:48 00:14:06
import sys
input = sys.stdin.readline

N = int(input())
# N 번 반복하면서
# 입력받은 두 값을 분리해 숫자로 바꾼 뒤 리스트로 만들어 담은 리스트를
# 정렬해 L에 대입한다.
L = sorted([list(map(int, input().split())) for _ in range(N)])

# L의 각 리스트의 원소를 공백으로 구분해 합친 뒤
# 이들을 다시 줄 바꿈 기호로 구분해 합쳐 출력한다.
print("\n".join(list(" ".join(map(str, p)) for p in L)))

디버그

  • L에 대입해야 하므로 만든 리스트에 sort()를 사용하는 게 아니고 sorted()의 인자로 생성한 리스트를 넣어야 한다.

2022.03.19 (JS)

메모리 시간 코드 길이
58540 KB 552 ms 386 B
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 22:05:15 22:05:21
풀이 생각 22:05:22 22:05:29
코딩 22:05:31 22:10:05
const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\n");

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

function main(C) {
    const res = C.map((c) => c.split(" ")).sort((c1, c2) => {
        const [x1, y1] = c1;
        const [x2, y2] = c2;

        return x1 - x2 || y1 - y2;
    });
    return res.map((c) => c.join(" ")).join("\n");
}

console.log(main(C));

아이디어 & 풀이

  • splitsort 과정에서 하면 $n^2$번 하는 거라서 inputsplit 하고 sort 후 다시 join 하는 게 낫다고 생각했다.

참고 답안 1

from sys import stdin, stdout
input()
stdout.write(
    # 각 원소를 줄 바꿈으로 구분해서 출력한다.
    "\n".join(
        # for line in stdin: stdin의 각 줄의 입력을
        # sorted(tuple(map(int, line.split())): split 해 int로 매핑해 만든 튜플을 원소로 갖는 리스트 정렬한 뒤
        # f"{x}, {y}" for x, y in: C의 튜플 원소의 두 값을 다음과 같은 포맷으로 합친 뒤
        f"{x} {y}" for x, y in sorted(tuple(map(int, line.split())) for line in stdin)
    )
)

참고 답안 2

import sys
input = sys.stdin.readline

C = [input() for _ in range(int(input()))]
C = sorted(
    C, key = lambda c: (int(c.split()[0]), int(c.split()[1]))
)

print("".join(C))