728x90
1. 문제
https://codeup.kr/problem.php?id=2002
비밀편지
셀던과 레오나드는 암호화화여 문자를 주고 받았다. 암호화하는 방법은 숫자 S 만큼 알파벳을 이동하는 대치 문자를 이용하였다. (알파벳은 대문자만 사용) 여기서 S를 구하는 방법은 S = 3P + K 이다. K는 입력으로 주어지고, P는 문자열의 각 자릿수값이다. 예를 들어, K=3이고, ZOOM이라는 문자를 암호화한다면, S = 3*1 + 3 = 6 , Z ==> F S = 3*2 + 3 = 9 , O ==> X S = 3*3 + 3 = 12 , O ==
codeup.kr
[출처 : 코드업(https://codeup.kr/)]
이번 문제는 입력받은 문자를 아스키코드를 이용하여 S = 3*P+K만큼 빼주고난 뒤에 다시 문자로 변경해주는 문제입니다.
이문제는 A - 1 => Z인 부분까지 계산을 해주어야 됩니다.
2. 해답
#include <stdio.h>
void decode(int k, int p, char c) {
int n = 0;
n = (int)c - 65 - (3 * p + k) + (26 * 3);
/*
A == 0을 기준
(3 * p + k)만큼 빼기
모든자리의 n을 양수로 만들어야되는 최소의 S값을 더해줌
최소 S = 3 * 20(20글자) + 9(최대9) = 69
알파벳은 26개이므로 69보다 크지만 가장 작은 값 (26 * 3)을 더해줍니다.
*/
n %= 26; // 26으로 나눈 나머지
n += 65; // 65를 더해 다시 아스키코드값상의 알파벳으로 변경
printf("%c", (char)n);
}
int main() {
int k;
char str[21];
scanf("%d", &k);
scanf("%s", str);
for (int i = 0; i < strlen(str); i++) {
decode(k, i + 1, str[i]);
}
return 0;
}
'프로그래밍 > CodeUp' 카테고리의 다른 글
CodeUp[Q_2006] : 앞으로 뒤로 (0) | 2020.02.08 |
---|---|
CodeUp[Q_2005] : 잉여계 (0) | 2020.02.05 |
CodeUp[Q_2004] : 체크보드 출력 (0) | 2020.02.05 |
CodeUp[Q_2003] : 아이콘 확대 (0) | 2020.02.05 |
CodeUp[Q_2001] : 최소대금 (0) | 2020.02.04 |