[BOJ] 백준_23080번_스키테일 암호_C/C++백준 알고리즘2021. 10. 6. 09:45
목차
문제 출처
https://www.acmicpc.net/problem/23080
문제
고대 그리스의 옛 나라인 스파르타의 군대에서는 비밀메시지를 전하는 방법으로 스키테일 암호를 사용했다.
스키테일 암호는 스키테일(Scytale)이라고 하는 정해진 굵기의 원통형 막대에 종이로 된 리본을 위에서 아래로 감은 다음 옆으로 메시지를 적는 방식으로 메세지를 암호화한다. 리본을 풀어 길게 늘어선 글을 읽으면 무슨 뜻인지 전혀 알 수 없지만, 암호화할 때와 같은 굵기의 막대에 감으면 내용을 알 수 있게 된다.
다음은 굵기 3의 막대를 사용하여 "iupc" 라는 문자열을 암호화하는 예시이다.
굵기가 X인 막대에 리본을 감고 세로로 글자 X개를 적으면 막대를 한바퀴 돌아오게 된다. 이 막대는 굵기가 3이므로, 세로로 3글자를 적으면 막대를 한바퀴 돌아올 것이다.
암호화하는 문자열을 리본의 가장 왼쪽 끝 부분을 포함하는 가로 한 줄만 사용하여 쓰고, 남은 공간은 아무 문자로나 채운다.
마지막으로 막대에서 리본을 풀면 암호화가 완료된다.
스키테일 암호로 암호화한 문자열과 막대의 굵기가 주어진다. 암호를 해독해 보자!
입력
첫 번째 줄에 막대의 굵기 K가 주어진다. 두 번째 줄에 알파벳 소문자만으로 구성된 암호문 S가 주어진다.
출력
첫 번째 줄에 암호문을 해독한 결과를 출력한다.
제한
- 3 ≤ K ≤ 10
- 1 ≤ S의 길이 ≤ 1000
코드
//[BOJ] 23080번_스키테일 암호
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char n[1000];
int i, k;
cin >> k;
cin >> n;
for (int i = 0; i < strlen(n); i += k)
cout << n[i];
return 0;
}
풀이 과정
문자열을 n에 입력받고 n을 처음부터 입력받은 두께(k)만큼 건너뛰며 출력하는 것을 strlen함수를 사용해서 i가 n의 길이보다 작을 때 까지 반복시킨다. 주의해야할 점은 i < strlen(n)에서 등호를 사용하지 않아야 한다는 것이다. 작거나 같다는 조건을 넣을 경우 문자열의 마지막 부분인 널 문자('\0')까지 출력시킬 수 있으므로 오류가 발생한다.
728x90
반응형
LIST
'백준 알고리즘' 카테고리의 다른 글
[BOJ] 백준_7568번_덩치_C/C++ (0) | 2021.10.08 |
---|---|
[BOJ] 백준_4673번_셀프 넘버_C/C++ (0) | 2021.10.07 |
[BOJ] 백준_2231번_분해합_C/C++ (0) | 2021.10.05 |
[BOJ] 백준_23037번_5의 수난_C/C++ (0) | 2021.10.03 |
[BOJ] 백준_23028번_5학년은 다니기 싫어요_C/C++ (0) | 2021.09.29 |
@kdj :: Childev'note
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!