백준 암호

KIMYEONGJUN·2024년 10월 8일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

열의 개수 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();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글