프로그래머스 - [PCCE 기출문제] 3번 / 수 나누기 C++
오늘은 이전 포스팅 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