728x90
문제를 보고 어떻게 풀까, 고민을 했다.
해결 과정은 아래와 같다.
1. int 형으로 A,B,C 3개의 수를 입력 받기
2. 세 수의 곱셈 연산 수행
3. 결과 값을 string으로 바꾸기
4. 배열을 순회하며 숫자 개수 세기
5. 결과 출력
내가 마주한 고비는 연산한 Int형 정수를 어떻게 string으로 바꾸어야 하는지부터 시작했다.
근데 진짜 쉽다.
<string>을 include 해주고, 원하는 값을 to_string(); 안에 넣어주기만 하면 된다.
#include <string>
...
int main(){
int a,b,c;
cin >> a >> b >> c;
int mul;
mul = a*b*c;
string mulStr = to_string(mul);
...
}
그럼 다음 순서.
배열을 순회하며 0이 몇 번, 1부터 9까지 각각 숫자가 몇 번 쓰였는지 개수 구하기.
int ary[10] = {};
- 크기가 10인 정수형 배열 ary를 선언하고, 모든 요소를 0으로 초기화
- 배열 ary는 각 숫자(0~9)의 등장 횟수를 저장하는 용도로 사용
for(char chr : mulStr){
}
- 문자열 mulStr의 각 문자를 chr에 저장하면서 반복
여기서 필자는 한 번의 고비를 마주하게 된다.
for문을 순회하며 각 문자를 chr에 넣는데.. 숫자를 어떻게 증가시키면서 사용된 숫자의 개수를 셀까.
해결 방법은 아래와 같았다.
- C++에서 문자(char형)는 ASCII(아스키 코드) 값으로 저장됨
- '0' --> 48, '1' --> 49, ... 등과 같이 숫자로 전환되어 저장됨
- 문자로 사용하기 위하여, 아래와 같이 코드 블록 작성
ary[chr-'0']++;
-'0' ???
문자 '5'의 ASCII 값이 53일 때, '0'의 ASCII 값인 48을 빼면 5라는 값이 나오게 되며,
사용하고자하는 숫자 5를 도출해낼 수 있게 된다.
그래서 우리는 '0'을 빼주어야 한다.
이제 마지막 단계.
(1) for 문을 통하여 배열 ary의 모든 요소를 처음부터 끝까지 하나씩 가져와 nums에 저장
for(int nums : ary){
}
(2) 저장된 배열 요소 출력
cout << nums << '\n';
전체 코드
#include <iostream>
#include <string>
//숫자의 개수
using namespace std;
int main(){
int a,b,c;
cin >> a >> b >> c;
int mul;
mul = a*b*c;
string mulStr = to_string(mul);
int ary[10] = {};
for(char chr : mulStr){
ary[chr-'0']++;
}
for(int nums : ary){
cout << nums << '\n';
}
return 0;
}
브론즈2 난이도의 문제였지만,
바로 풀이가 떠오르지 않았던 문제.
혼자 고민하다 기본 개념부터 함수 활용까지
여러 블로그를 많이 참고하였다.
문자형 변환이 아직 어려운 것 같다.
더 좋은 풀이가 있다면 댓글로 알려주세요 !!
피드백 환영입니다☺️
728x90
'Algorithm' 카테고리의 다른 글
[백준] 10814번 : 나이순 정렬 - C/C++ (0) | 2025.03.02 |
---|---|
[백준] 2947번 : 나무 조각 - C/C++ (0) | 2025.03.01 |
[백준] 10817번 : 세 수 - C/C++ (0) | 2025.02.28 |
[백준] 2744번 : 대소문자 바꾸기 - C/C++ (0) | 2025.02.27 |
[백준] 2693번 : N번째 큰 수 - C/C++ (0) | 2025.02.26 |