😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[BAEKJOON C++] 1871_쒋은 μžλ™μ°¨ 번호판 λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/BAEKJOON

[BAEKJOON C++] 1871_쒋은 μžλ™μ°¨ 번호판

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 7. 13. 22:27
728x90
λ°˜μ‘ν˜•
μ•¨λ²„νƒ€μ˜ μžλ™μ°¨ λ²ˆν˜ΈνŒμ€ 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"λ₯Ό μΆœλ ₯ν•œλ‹€.
// [1871] 쒋은 μžλ™μ°¨ 번호판

/*
μ•¨λ²„νƒ€μ˜ μžλ™μ°¨ λ²ˆν˜ΈνŒμ€ 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"λ₯Ό 좜λ ₯ν•œλ‹€.
*/

#define _CRT_SECURE_NO_WARNINGS
// ν‘œμ€€ μŠ€νŠΈλ¦Όμ—μ„œ 읽기 및 μ“°κΈ°λ₯Ό μ œμ–΄ν•˜λŠ” 개체λ₯Ό μ„ μ–Έ
#include <iostream>
#include <algorithm>    // find
#include <string>
#include <cmath>        // abs
using namespace std;

int main()
{
    // 번호판의 수 N
    int N;
    cin >> N;

    for (int i = 0; i < N; i++) {
        string carNumber;
        cin >> carNumber;

        // λ¬Έμžμ—΄μ—μ„œ '-'λ₯Ό 찾으면
        int pipe = carNumber.find('-');              

        // μžλ™μ°¨ μ•žκΈ€μž
        string front = (carNumber.substr(0, pipe));
        // μžλ™μ°¨ λ’€μˆ«μž
        // stoi : string 을 int 둜 λ³€κ²½
        int back = stoi(carNumber.substr(pipe + 1));

        int a, sum = 0;
        double b;

        // 첫 번째 λΆ€λΆ„μ˜ κ°€μΉ˜ (26진법 수)
        for (int i = 0; i < front.length(); i++) {
            char c = front[i];
            
            a = int(c) - 65;             
            b = a * pow(26, front.length() - i - 1);
            sum += b;
        }

        // 첫 번째 λΆ€λΆ„μ˜ κ°€μΉ˜ (차이가 100을 λ„˜μ§€ μ•Šκ²Œ ν•˜κΈ°)
        int num = abs(sum - back);

        if (num <= 100) {
            cout << "nice" << "\n";
        }
        else {
            cout << "not nice" << "\n";
        }
    }
    return 0;
}

728x90
λ°˜μ‘ν˜•
Comments