본문 바로가기

백준/C++

[BaeKJoon/C++] 백준 1871 c++ 좋은 자동차 번호판

반응형

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

 

1871번: 좋은 자동차 번호판

각각의 자동차 번호판에 대해서, 좋은 번호판이면 "nice"를, 아니면 "not nice"를 출력한다.

www.acmicpc.net

문제

앨버타의 자동차 번호판은 ABC-0123 (세 글자, 네 숫자)와 같이 두 부분으로 나누어져 있다.

좋은 번호판은 첫 번째 부분의 가치와 두 번째 부분의 가치의 차이가 100을 넘지 않는 번호판이다.

글자로 이루어진 첫 번째 부분의 가치는 글자를 26진법 수처럼 계산한다. (각 자리가 [A.. Z]) 예를 들어, "ABC"의 가치는 28 (0 ×262+ 1 ×261+ 2 ×260)이 된다. "ABC-0123"은  |28 - 123| ≤ 100 이기 때문에, 좋은 번호판이다.

자동차 번호판이 주어졌을 때, 좋은 번호판인지 아닌지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 번호판의 수 N (1 ≤ N ≤ 100)이 주어진다. 다음 N개 줄에는 자동차 번호판이 LLL-DDDD 형식으로 주어진다.

출력

각각의 자동차 번호판에 대해서, 좋은 번호판이면 "nice"를, 아니면 "not nice"를 출력한다.

예제 입력 1 예제 출력 1
2
ABC-0123
AAA-9999
nice
not nice

 

풀이

1. 문자열을 입력받고 str.find() 함수를 이용해서 '-'의 문자 위치를 찾는다.

2. 문자의 위치를 찾았다면, substr() 함수를 이용해서 '-' 문자를 기준으로 문자열을 자른다.

ex) ABC-123 ==> 1. ABC  2. 123

3. 대문자 A의 아스키코드값은 65다. 근데 문제에서 A는 0, B는 1, C는 2로 계산하므로 -65를 해준다.

4. 그리고 abs() 함수를 이용해서 절댓값을 씌워준다.

5. 절댓값이 된 수가 100보다 작다면 'nice', 크다면 'not nice' 출력

 

코드

#include <iostream>
#include <string>
#include <algorithm>    // find
#include <cmath>        // abs(절댓값)
 
using namespace std;
 
int main() {
 
    int test;
    cin>>test;
 
    for(int i=0; i<test; i++){
        string str;
        cin>>str;
 
        // 문제 풀이 1번
        int sever = str.find('-');              // 문자열에서 '-'를 찾으면
 
        // 문제 풀이 2번
        string str1 = (str.substr(0,sever));    // -를 기준으로 쪼갠다.
        int bi = stoi(str.substr(sever+1));
 
        int a, sum=0;
        double b;
 
        int len = str1.length();
 
        for(int i=0; i<len; i++){
            char c = str1[i];   
            // 문제 풀이 3번
            a = int(c) - 65;  
            // if(c==소문자) -97                   
            b = a * pow(26, len-i-1);
            sum+=b;
        }
 
        // 문제 풀이 4번
        int num = abs(sum-bi);
 
 
        // 문제 풀이 5번
        if(num<=100){
            cout<<"nice\n";
        }
        else{
            cout<<"not nice\n";
        }
    }
    return 0;
}
 
// find, abs, pow, substr
 
cs

 

이문제는 내장 함수를 많이 알고 있다면 충분히 쉽게 풀 수 있는 문제다.

반응형