본문 바로가기

CodingTest/BOJ

[BOJ 2577] 백준 숫자의 개수 풀이 - C++

사용언어 :  C++

 

 

 

 

 

문제풀이

(1) A,B,C 값 입력받기. A*B*C 값 구하기. int형인 A*B*C값을 string으로 바꾸기 (char 배열에 저장된 거랑 동일)

cin >> A >> B >> C;
	tmp = to_string(A*B*C); //string tmp;

to_string : int형을 string으로 바꾸기 위해 사용

 

 

(2) 반복문으로 tmp(string:char 배열)에 순차적으로 접근해 해당 값을 int arr[10]배열에 넣어주기

for (int i = 0; i < tmp.size(); i++) {
		arr[tmp[i]-'0']++;
	}

 * tmp[i]는 char형이다.

- 여기서 tmp[i] 형변환을 위해 string을 int로 바꿔주려고 하다보니 자꾸 오류가 났다. 이유는 string에서 index로 접근하는, 즉 하나의 값은 char형이기 때문이다.(string은 char의 배열)

- arr[tmp[i]]++ => 아스키코드 값으로 나옴

- arr[(int)tmp[i]]++ => 아스키코드 값으로 나옴

 

 

(3) arr배열에 저장돼 있는 값 순차적으로 출력해주기 

for (int i = 0; i < 10; i++) {
		cout << arr[i] << "\n";
	}

 

 

 

 

전체코드

#include <iostream>
#include<string>
using namespace std;
int A; int B; int C; int arr[10]; string tmp; int X;
int main() {
	cin >> A >> B >> C;
	tmp = to_string(A*B*C);

	for (int i = 0; i < tmp.size(); i++) 
		arr[tmp[i]-'0']++;

	for (int i = 0; i < 10; i++) 
		cout << arr[i] << "\n";
}

 

 

 


총평

간단한 문제일 줄 알았는데 예상외로 배열의 타입은 뭐로 할지, 처음 값을 입력받을 땐 어떤 타입으로 받아야 할지, 자료형을 정하는 게 헷갈렸다. 그리고 이후 형변환에서도 조금 막혔다. 알고 있었다고 생각한 것들이 헷갈려서 이번 기회에 정확히 정리하는 기회가 된 것 같다. 


문제 출처

https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

www.acmicpc.net