본문 바로가기

알고리즘/프로그래머스

프로그래머스 - [PCCE 기출문제] 1번 / 문자 출력 C++

SMALL

 오늘은 PCCP 기출문제를 모두 완료하고, PCCE 기출문제 시리즈의 시작인 1번 문자 출력을 포스팅하려고 한다. 근데 문제를 보고? 할 정도로 너무 당황스러웠다... 너무 쉬웠기 때문이다. 하지만 C++를 처음 하는 개발자에게는 필요할 수도 있다는 생각이 들어, 간단하게 정답이 왜 그렇게 나오는지 간단하게 설명도 하고, 입 출력에 관한 내용도 공유하고자 한다.

 

알고리즘 난이도 및 시간 ( ※ 개인적인 의견 )

  • 난이도 : Level 0 ( ※ Min : 0, Max : 10 )
  • 풀이 시간 : 1분
  • 제출 횟수 : 1번 
  • 풀이 결과 : Pass

문제 설명

  문제를 보면 너무 짧아서 당황스러겠지만, 정말 말 그대로 코드에 변수를 데이터를 저장하고, 출력 예시와 같이 출력되게 하라는 문제다.

출처 : 프로그래머스

 

 그나마 아래 출력에서 유의해야 할 점이 있다면 라인을 넘겨서 출력을 해야 한다는 것이다. 문제를 출력할 때 라인을 변경할 수 있는 방법은 문자열 뒤에 "\n"을 하는 것과 endl을 통해 라인을 바꾸는 것이다. 

그러면 여기서 왜 굳이 라인을 바꿀 수 있는 방법이 2개나 있는 거지?라는 생각이 들게 될 수 있다.  여담 : 새로 들어오는 팀원분들에게도 늘 말하는 것이지만, 내가 코드를 구현할 때 내가 작성한 코드를 다 이해하고 있는지? 그리고 내가 사용하는 방법이 올바른지?를 생각하면서 구현을 해야 한다는 것이다. 물론 정답은 없다. 하지만 더 효율적인 방법은 늘 존재할 수 있기 때문에 공부는 쉬지 않아야 한다. 두 방법의 차이는 아래와 같다.

  • \n : 따로 입출력을 위해 사용된 임시 버퍼를 비우지 않는다.
  • endl : 출력을 위해 사용된 임시 버퍼를 비운다.

그러면 처음 개발하는 사람은 무슨 버퍼?라는 생각을 할 수 있다. 보통 컴퓨터는 키보드라는 하드웨어로부터 문자를 입력받는다. 그러면 문자를 받을 때마다 바로바로 전달을 할까? 어떻게 설계되었냐에 따라 다를 수 있지만, 통상적으로 버퍼에 저장하였다가 일정 용량이 다 차거나 전달하라는 명령( 예시 : endl )이 있을 경우 전달한다.

 여기서 이해가 된 사람들은 이렇게 생각할 수 있다. 그러면 \n이 endl 보다 출력을 할 때 라인 변경이 많다면 조금 더 빠르겠구나? 와 같은 생각이다. 혹시나 내용을 보고 궁금한 점이 있다면 댓글 작성 부탁한다.

출처 : 프로그래머스


문제풀이

 해당 문제에서는 endl을 통해 매번 작성할 수 없는 문제다. 왜냐하면 특이하게 빈칸을 채우는 문제이기 때문이다. 그렇게 때문에 우리가 배운 방법 중 "\n"을 사용하여 아래와 같이 풀면 된다.

#include <iostream>

using namespace std;

int main(void) {
    string message = "Let's go!";

    cout << "3\n" << "2\n" << "1" << endl;
    cout << message << endl;

    return 0;
}

결과

출처 : 프로그래머스

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/340207?language=cpp

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr