본문 바로가기
알고리즘 Node.js

백준 11718문제. 그대로 출력하기

by 반갑조? 2025. 3. 21.

문제

문제: 입력 받은 대로 출력하는 프로그램을 작성하시오.

입력: 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

출력: 입력받은 그대로 출력한다.

예제 입력: Hello
                 Baekjoon
                 Online Judge

예제 출력: Hello
                 Baekjoon
                 Online Judge

 

풀이

const fs = require('fs');
const input = fs.readFileSync(0, 'utf-8');

console.log(input);

 

풀이 해석

1. 입력받은 그대로 출력해야하므로 공백도, 탭도, 개행도 그대로 출력해야한다.

 

더 알아보기

1. 이런 문제는 왜 낼까?

 

1. 입력/출력 방식에 익숙해지기 위한 문제

  - 이 문제를 통해 '내가 쓰는 언어에서 어떻게 입력을 처리하는가'를 익힐 수 있다.

      - Python : input()/sys.stdin.readline()

      - Java : Scanner, BufferedReader

      - JS : fs.readFileSync(0) →내가 쓰는 방식

  - 특히 백준은 표준 입력/출력 기반으로 채점되기 때문에, 이걸 익히지 않으면 어떤 문제도 풀 수 없다.

 

2. EOF(입력 종료)를 다루는 연습

  - EOF(End Of File)는 파일 입력 끝에 도달했을 때를 말한다.

  - 일반적으로 알고리즘 문제는 입력 줄 수가 주어지지만, 이 문제는 입력 끝을 알려주지 않는다. 그러므로 이 문제는 EOF를 다루는 문제이다. 

  - 프로그래머가 직접 '언제까지 입력을 읽을지' 판단해야하는 훈련이다.

 

3. '입력 그대로 출력' 이라는 조건의 중요성

  - .trim()을 하면 틀리는 문제이다.

  - 즉 이 문제는 '출력 형식에 절대 손대지 마!' 라는 교훈을 주는 문제이다.

 

4. 온라인 채점 시스템과 친해지기 위한 첫걸음

  - 백준을 처음 시작할 때 접하는 문제이다.

  - 그래서 코드가 채점되는 방식을 이해하기 위해 이런 단순한 문제부터 시작하는 것이다.

 

5. 실수를 교훈 삼는 문제

  - 많은 사람들이 이 문제에서 trim()을 쓰고 틀린다.

  - 그래서 '문제를 정말 잘 읽자!', '출력 형식에 민감하자!' 라는 교훈을 준다.

 

2. 이 문제가 왜 5단계 마지막 문제에 나온걸까?

 

1. 문자열을 '가공하지 않고' 그대로 출력하는 것도 문자열 처리의 한 형태이다.

  - 앞의 문제들은 모두 문자를 변형, 가공했다면 이 문제는 그동안의 문자열 문제의 반대편 끝을 보여주는 문제이다.

  - '문자열은 꼭 가공해야하는 게 아니라, 그대로 출력하는 것도 중요하다' 는 메시지가 담아있는것같다.

2. 실수 유도 문제 

  - trim()을 쓰면 틀린다. console.log()를 안 쓰면 틀린다. 공백을 무시하거나 개행을 잘못넣어도 틀린다.

  - 문자열 처리에서 실수가 많이 나오는 부분을 일부러 유도해서 잡아주는 것이다.

3. 다음 심화 단계로 넘어가기 전에 '기본기 점검'의 역할

  - 6단계부터는 조건문, 반복문 조합 등 로직이 더 중요해지기 시작한다.

  - 그 전에 정확하게 입력을 받고 출력하는 힘을 다시 한번 확인하는 문제이다.(그냥 쉬운 문제가 아닌 배움의 마무리 퍼즐)