728x90
SMALL
백준 문제 풀이: 1871 [좋은 자동차 번호판]
문제 링크: https://www.acmicpc.net/problem/1871
문제 설명:
자동차 번호판은 ABC-1234
형태로 주어집니다. 번호판에서 앞의 3글자는 알파벳으로 이루어져 있으며, 이를 26진법 숫자로 변환한 값과 뒤의 4자리 숫자 간의 차이가 100 이하면 nice
, 그렇지 않으면 not nice
를 출력하는 문제입니다.
문제 해결 코드
// 백준 1871 - 좋은 자동차 번호판
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n; // 테스트 케이스 수
for (int i = 0; i < n; i++) {
string s;
cin >> s; // 번호판 입력
// 앞 3자리 알파벳을 26진법 숫자로 변환
int fs = 0;
for (int j = 0; j < 3; j++) {
fs += (s[j] - 'A') * pow(26, 2 - j);
}
// 뒤의 숫자 부분을 정수로 변환
int bs = stoi(s.substr(4));
// 차이 계산 및 결과 출력
if (abs(fs - bs) <= 100) {
cout << "nice\n";
} else {
cout << "not nice\n";
}
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명.
- 핵심 알고리즘:
- 앞의 3자리 알파벳을
(A=0, B=1, ..., Z=25)
로 변환하여 26진법의 숫자값을 계산합니다. - 뒤의 숫자는 문자열에서 잘라낸 뒤
stoi
를 사용해 정수로 변환합니다. - 두 값의 차이를 구해 100 이하인지 확인합니다.
- 앞의 3자리 알파벳을
- 구현 세부사항:
- 알파벳 부분의 변환은 반복문에서 26의 거듭제곱을 곱해가며 계산합니다.
- 숫자 부분은
substr
을 사용하여 잘라낸 뒤stoi
로 처리합니다. - 차이의 절대값을 구하기 위해
abs
함수를 사용합니다.
- 시간 복잡도 분석:
- 알파벳 변환: O(1)
- 숫자 변환: O(1)
- 테스트 케이스 수를
n
이라 할 때 총 시간 복잡도는 O(n)입니다.
결과
제출 시, 모든 테스트 케이스에 대해 올바른 결과를 출력합니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 3059번 [등장하지 않는 문자의 합](C++) -yes6686- 티스토리 (0) | 2024.12.16 |
---|---|
백준 1453번 [피시방 알바](C++) -yes6686- 티스토리 (0) | 2024.12.16 |
백준 2578번 [빙고](C++) -yes6686- 티스토리 (0) | 2024.12.14 |
백준 1491번 [나선](C++) -yes6686- 티스토리 (0) | 2024.11.18 |
백준 5598번 [카이사르 암호](C++) -yes6686- 티스토리 (0) | 2024.11.18 |