
내가 생각했을때 문제에서 원하는부분
열의 개수 K(1 ≤ K ≤ 20)가 주어지고 두 번째 줄에는 암호화 된 문자열(모두 영소문자)이 주어진다.
(문자열의 길이는 200 이하이며 K의 배수이다.)
첫 줄에 원래의 문자열을 출력한다..
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 열의 개수 K와 암호화된 문자열을 입력받는다.
for 루프를 통해 각 열을 순회한다.
내부 for 루프는 각 행을 순회한다.
sz / K는 행의 개수를 나타난다.
sb.append(...) 부분에서 원래 문자열의 문자를 선택해준다.
j % 2 == 0 조건문을 통해 짝수 행과 홀수 행을 구분해준다.
짝수 행일 경우: 왼쪽에서 오른쪽으로 읽고, 홀수 행일 경우: 오른쪽에서 왼쪽으로 읽는다.
복원된 문자열을 StringBuilder에서 출력해준다.
코드로 구현
package baekjoon.baekjoon_23;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 1855번 문제
public class Main801 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int K = Integer.parseInt(br.readLine()); // 열의 개수 K 입력받기
String str = br.readLine(); // 암호화된 문자열 입력받기
int sz = str.length(); // 문자열의 길이
StringBuilder sb = new StringBuilder(); // 원래 문자열을 저장할 StringBuilder
// 암호화된 문자열을 복원하는 로직
for (int i = 0; i < K; i++) {
for (int j = 0; j < sz / K; j++) {
// 짝수 행일 때는 왼쪽에서 오른쪽, 홀수 행일 때는 오른쪽에서 왼쪽으로 읽음
sb.append(str.charAt(j % 2 == 0 ? j * K + i : j * K + K - 1 - i));
}
}
// 결과 출력
System.out.println(sb.toString());
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.