728x90
1. 문제
https://codeup.kr/problem.php?id=2002
[출처 : 코드업(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 |