코딩을 하기 전 다음과 같이 생각을 해 보았다.
1. Num1과 Num2에 숫자 두 개를 입력 받는다.
2. Num2를 백, 십, 일 의 자리로 분리한다.
- case 1.숫자를 문자열로 변환을 한 후에 파싱해서 각각 따로 변수로 저장한다.
- case 2. 각각의 자리 수를 구해주는 식을 세워서 백, 십, 일 자리를 계산한다.
Case 2 : 각각의 자리 수를 구해주는 식을 세워서 백, 십 , 일 자리를 따로 계산
난 case 2를 택해서 코딩을 했다.
백의 자리를 구할 때 -> 나누기 100
십의 자리를 구할 때 -> (입력값 - 백의자리x100) 를 10으로 나눔.
일의 자리를 구할 때 -> (입력값 - 십의 자리 x10+백의자리*100)
최종 답은 다음과 같다.
#include<iostream>
using namespace std;
int main(){
int Num1,Num2;
int baek,ship,ill;
cin>>Num1>>Num2;
baek=Num2/100; ship=(Num2-baek*100)/10;ill=Num2-(ship*10+baek*100);
cout<<Num1*ill<<endl;
cout<<Num1*ship<<endl;
cout<<Num1*baek<<endl;
cout<<Num1*Num2<<endl;
return 0;
}
Case 1: 문자열로 두 번째 숫자를 입력받아서 파싱하기
그렇다면 case 1으로 문제를 해결하려면?
1. 음... 우선 어쨌든 문자열로 파싱해야 하기 때문에 두 번째로 입력 받는 숫자를 string 형으로 받아야 할 것 같다.
=> string Num2; 선언.
2. string 문자열을 입력받는다.
cin>>Num1;
cin.ignore();
getline(cin,Num2);
cin>>Num1 로 정수를 입력받은 후 누른 엔터 값이 버퍼에 남아있어서 getline 에 들어가게 된다. 따라서 ignore 을 써 줘서 그 값을 무시해주고 getline 을 써줬다.
3. 각 자리 수로 파싱한다.
파싱할 때 substr 함수를 사용했다.
substr 함수의 사용법
#include 헤더를 사용해야 함.
string변수이름.(시작문자열자리,시작부터 몇 개 더 자를건지 갯수)
예를 들어서 string변수이름.substr(1,3) 이라면 1번째문자부터 시작해서 3개가 출력된다.
string에 abcde 가 저장되어있다면 b부터 b,c,d 이렇게 세 개가 출력되는 것이다.
따라서 나는 한 자리씩 파싱할거기때문에 다음과 같이 작성해줬다.
baek = Num2.substr(0,1); //0번째부터 1개까지 즉, 0번째만 출력
ship = Num2.substr(1,1); // 1번째부터 1개 출력 즉, 1번째만 출력
ill = Num2.substr(2,1);//2번째부터 1개 출력. 즉, 2번째 문자열만 출력.
3. 값 출력
현재 baek, ship, ill 모두 다 string형이기 때문에 Num1 과 각 자리 수를 계산 해 주기 위해서는
해당 자리 수 변수(string 형)을 int 형으로 변환해야 한다.
따라서 string->int 으로 변환하는 함수인 stoi 를 사용했다.
(** int -> string 으로 변환하려면 to_string 을 사용)
stoi 함수 사용법
#include<string> 헤더를 사용해야 함.
stoi(string함수명)
cout<<Num1*stoi(ill)<<endl;
cout<<Num1*stoi(ship)<<endl;
cout<<Num1*stoi(baek)<<endl;
최종 제출한 답은 다음과 같다.
#include<iostream>
#include<string>
using namespace std;
int main(){
int Num1; string Num2;
string baek,ship,ill;
cin>>Num1;
cin.ignore();
getline(cin,Num2);
baek = Num2.substr(0,1);
ship = Num2.substr(1,1);
ill = Num2.substr(2,1);
//baek=Num2/100; ship=(Num2-baek*100)/10;ill=Num2-(ship*10+baek*100);
cout<<Num1*stoi(ill)<<endl;
cout<<Num1*stoi(ship)<<endl;
cout<<Num1*stoi(baek)<<endl;
cout<<Num1*stoi(Num2)<<endl;
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
| 백준 10773번(스택): 제로 (0) | 2022.10.18 |
|---|---|
| 백준 10828 (스택): 스택 ...나의 삽질과 고군분투 (0) | 2022.10.18 |
| 백준 10171: 고양이 (특수문자 출력) (0) | 2022.10.14 |
| 백준 10926 : c++에서의 string 사용 (0) | 2022.10.13 |
| 백준 1008번 A/B : 절대오차? 상대오차? (0) | 2022.10.13 |