일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- flutter #상태관리
- boj #c++
- 백준 #boj
- Flutter
- firebase #파이어베이스
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- flutter #app #취준
- baekjoon #백준 #boj
- baekjoon #boj #c++
- 플러터 #flutter #restful #rest api
- flutter #firebase #플러터 #파이어베이스 #연동
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- flutter #깃
- unity #2d-game #minigame #vscode
- 비주얼 스튜디오 #vs #visual studio
- boj #baekjoon #c++
- 백준 #c++
- 로컬저장소 #이름변경
- flutter #git
- flutter #플러터 #분석
- flutter #플러터
- 비주얼스튜디오 #코드스니펫
- 백준 #boj #baekjoon
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- VS #비주얼스튜디오
- unity #2d-game
- flutter #todolist
- 백준
- boj #baekjoon
- git #unity #깃허브
- Today
- Total
cococo-coding
[C++ 풀이] 11575번. Affine Cipher 본문
문제
풀이
테스트케이스 개수t를 입력받고 while문으로 반복한다. 케이스별로 E(X)=(aX+b)mod 26에 들어갈 a, b값과 평문s를 입력받는다.
이때 우리가 사용할 코드체계는 문제에 나와있는 A=0, B=1, ..., Z=25이고
출력되는 형태는 아스키코드이다.
for문을 이용하여 string을 입력받았을 때, 이 문자열은 아스키코드이므로 우리가 원하는 코드체계로 변경해주어야 한다.
s[i]-65로 이를 구현한다.
ex) 예제에서 "IAMSPY"라는 문자열을 입력했을 때, 'I'라는 문자는 아스키코드로 73이다. 우리가 문제에서 쓰는 체계로 변경하려면 'I'=8이 되어야하므로 원래 코드에서 65를 빼준다.
그리고 원래의 E(X)식대로 E(X)=(aX+b)mod 26를 구현해준다. (X=s[i]-65)
이제 출력만 하면 되는데, 아스키코드에 맞춰서 다시 65를 더해주어야 우리가 원하는 알파벳값이 나온다. (A=65, B=66, ..., Z=90)
아스키코드와 문제의 숫자체계를 왔다갔다해야해서 조금 헷갈릴 수 있는 문제이지만 이 부분만 잘 코딩하면 금방 풀린다.
포인트
출력되는 형태는 아스키코드이며, 우리는 문제에서 만든 A=0, B=1, ..., Z=25의 독자적인 기호체계를 쓰고 있으므로
아스키코드와 문제에서 사용하는 기호체계를 구분해야 함.
코드
#include <iostream>
#include <string>
using namespace std;
/*
1. 테스트케이스 개수 t를 입력받는다.
2. 케이스 별 a와 b, 평문s를 입력받는다.
3. 아핀 암호를 이용해 평문을 바꾼다.
4. 바꾼 결과를 출력한다.
*/
int main() {
//1
int t;
cin >> t;
//2
while (t--) {
int a, b;
string s;
cin >> a >> b >> s;
//3
for (int i = 0; i < s.size(); i++) {
//원래그대로의 문자열 숫자버전이 나와야함
s[i] = ((a * (s[i] - 65) + b) % 26) + 65;
cout << s[i]; //4
}
cout << endl;
}
return 0;
}
ps. 나는 처음에 아스키코드로 변경하지 않고, 문제에 있는 코드체계대로 식만 써서 풀었다가 문자열이 공백으로 출력되는 문제가 있었다. 아스키코드로 변환된 상태가 알파벳라인이 아니기 때문이었다.
'[BOJ] 코드 모음 > C++_learning 문제집' 카테고리의 다른 글
[C++ 풀이] 2355번. 시그마 (0) | 2024.01.16 |
---|---|
[C++ 풀이] 2774번. 아름다운 수 (0) | 2024.01.16 |
[C++] 1453번. 피시방 알바 (0) | 2024.01.15 |
5656번. 비교 연산자 (c++ 풀이) (0) | 2024.01.14 |
2720번. 세탁소 사장 동혁 (c++풀이) (0) | 2024.01.14 |