© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 11575 - Affine Cipher

2024-11-28
BOJ
브론즈 II
cpp
원본 문제 보기
구현
문자열

문제

BOJ 11575 - Affine Cipher

아핀 암호 E(x) = (a*x + b) mod 26을 적용하여 대문자 문자열을 암호화하라.

입력

테스트 케이스 수 N, 각 케이스마다 정수 a, b와 대문자 문자열이 주어진다.

출력

각 케이스마다 암호화된 문자열을 출력한다.

예제

입력출력
1 3 1 HELLOQLCCX

풀이

각 문자에 아핀 변환 공식을 적용하여 암호화한다.

  1. 각 문자를 숫자로 변환한다 (x = 문자 - 'A')
  2. (a * x + b) % 26으로 암호화된 숫자를 구한다
  3. 다시 문자로 변환하여 + 'A' 출력한다

핵심 아이디어: 아핀 암호는 선형 변환 ax + b를 26으로 나눈 나머지를 사용하는 고전 암호 방식이다.

코드

#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
  int n, a, b;
  string word;
  cin >> n;
 
  for (int i = 0; i < n; i++)
  {
    cin >> a >> b >> word;
    for (int j = 0; j < word.length(); j++)
    {
      word[j] = char(((a * word[j] - 'A' + b) % 26) + 'A');
    }
    cout << word << endl;
  }
 
  return 0;
}

복잡도

  • 시간: O(N * L) (N: 테스트 케이스, L: 문자열 길이)
  • 공간: O(L)