알고리즘/프로그래머스

프로그래머스 - [PCCE 기출문제] 3번 / 수 나누기 C++

초심을 찾자 2024. 10. 27. 15:59
SMALL

오늘은 이전 포스팅 2024.10.19 - [알고리즘/프로그래머스] - 프로그래머스 - [PCCE 기출문제] 2번 / 각도 합치기 C++

에 이어 3번 문제를 풀어보았다. 프로그래머스에 레벨은 비슷하다고 되어 있는데, 아마 틀린 개발자도 많을 것 같다. 헷갈릴만한 정답지 후보가 2개 존재하기 때문에 Level은 1로 선정하였다.

.

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

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

문제 설명

 간단하게 입력받은 2자리 이상의 정수를 2자리씩 나눈 다음에 나누어진 정수의 총합을 구하라는 문제다. 처음에는 문자열 자르기 문제인가?라는 생각도 하였지만, 그냥 INT형으로 입력받아 나누기를 하면 되는 문제다.

출처 : 프로그래머스

제한 사항을 보면 값이 범위는 크다 하지만, 32Byte를 초과하는 값을 반환할 일이 없기 때문에 합산 결과에 대한 변수 Type은 크게 고민하지 않아도 된다. 

출처 : 프로그래머스


문제풀이

 예시 코드를 보면 크게 문제점이 없다고 생각이 들 수 있다. 하지만 for문이 1번 밖에 돌지 않게 되어 있다. 이에 따라 for문 조건을 수정하면 된다는 Hint를 얻을 수 있다. 다만, 제한사항을 보지 않고 예시만 확인하고 급하게 문제를 푼다면 아래와 같은 실수를 할 수 있다.

  • for문 밖에서 한 번더 answer에 +를 하는 방법
  • for문의 조건문을 i<1이 아닌 i <2로 제출하는 방법
  • number /= 100을 answer += ( number / 100 )
#include <iostream>

using namespace std;

int main(void) {
    int number;
    cin >> number;
    
    int answer = 0;
    
    for(int i=0; i<1; i++){
        answer += number % 100;
        number /= 100;
    }
    cout << answer << endl;
    return 0;
}

 하지만 제한상을 보면 자릿수가 정해져 있지 않기 때문에 2자리를 특정 조건이 될 때까지 나누어야 한다. 그래서 여러 방법이 있겠지만 내가 제출한 방법은 while문으로 number > 0 보다 클 때까지 +를 하는 것이다. 하지만 그 이외에도 아래와 같은 방법이 있다.

  • number!=0
  • for문으로 number > 0
  • for문으로 number!=0
#include <iostream>

using namespace std;

int main(void) {
    int number;
    cin >> number;
    
    int answer = 0;
    
    while( number > 0){
        answer += number % 100;
        number /= 100;
    }
    cout << answer << endl;
    return 0;
}

결과

 

출처 : 프로그래머스

문제 링크 : 코딩테스트 연습 - [PCCE 기출문제] 3번 / 수 나누기 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr