728x90
SMALL
백준 문제 풀이: 11575 (Affine Cipher)
문제 링크: https://www.acmicpc.net/problem/11575
문제 설명:
Affine Cipher(아핀 암호)는 다음과 같은 식으로 암호화됩니다:
E(x) = (a * x + b) % 26
여기서 x
는 원문의 알파벳을 숫자로 표현한 값입니다.
예를 들어, A=0, B=1, ..., Z=25로 나타내고, 암호화된 값은 다시 알파벳으로 변환됩니다.
주어진 a
와 b
에 대해 문자열을 암호화하는 프로그램을 작성하세요.
문제 해결 코드
#include <iostream>
#define MOD 26 // 알파벳 개수
using namespace std;
// Affine Cipher 암호화 함수
int e(int a, int b, int x) {
return (a * x + b) % MOD;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int T; // 테스트 케이스 개수
cin >> T;
while (T--) {
int a, b;
cin >> a >> b; // 계수 a와 b 입력
string s;
cin >> s; // 암호화할 문자열 입력
for (int i = 0; i < s.size(); i++) {
// 원문 알파벳을 숫자로 변환 후 암호화
int al = e(a, b, s[i] - 'A');
char c = al + 'A'; // 다시 알파벳으로 변환
cout << c;
}
cout << '\n'; // 결과 출력
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명:
- Affine Cipher 식 적용:
E(x) = (a * x + b) % 26
를 사용하여 알파벳을 암호화합니다. - 입출력 처리:
- 입력으로
a
,b
, 그리고 암호화할 문자열s
를 받습니다. - 문자열의 각 문자
s[i]
를 숫자(0 ~ 25)로 변환한 후 암호화합니다. - 암호화된 결과를 다시 알파벳으로 변환하여 출력합니다.
- 입력으로
세부 구현:
s[i] - 'A'
: 알파벳을 숫자(0~25)로 변환합니다.e(a, b, x)
: 암호화 식을 계산합니다.al + 'A'
: 숫자 결과를 다시 알파벳으로 변환합니다.
시간 복잡도 분석
- 입력 문자열의 길이를
n
이라고 하면, 각 문자를 암호화하는 데 O(1)의 시간이 걸립니다. - 전체 시간 복잡도는 O(T * n)입니다. 여기서
T
는 테스트 케이스 수입니다.
결과
Affine Cipher를 사용해 주어진 문자열을 암호화한 결과를 출력합니다.
- 입력 예시:
2 1 1 HELLO 3 2 ABC
- 출력 예시:
IFMMP CEG
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 문자열' 카테고리의 다른 글
백준 16171번 [나는 친구가 적다 (Small)](C++) -yes6686- 티스토리 (0) | 2024.07.16 |
---|---|
백준 11656번 [접미사 배열](C++) -yes6686- 티스토리 (0) | 2024.07.13 |
백준 2495번 [연속구간](C++) -yes6686- 티스토리 (1) | 2024.06.30 |
백준 10820번 [문자열 분석](C++) -yes6686- 티스토리 (0) | 2024.06.29 |
백준 2789번 [유학 금지](C++) -yes6686- 티스토리 (0) | 2024.05.06 |