백준 암호

KIMYEONGJUN·2024년 10월 5일
post-thumbnail

문제

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

첫째 줄에 평문이,
둘째 줄에 암호화 키가 주어진다.
평문은 알파벳 소문자와 공백문자(space)로만 구성되며,
암호화 키는 알파벳 소문자만으로 구성된다.
평문의 길이는 공백까지 포함해서 30000자 이하이다.
첫 번째 줄에 암호문을 출력한다.

내가 이 문제를 보고 생각해본 부분

문자열의 각 문자를 암호화 키의 문자로 빼서 변형된 문자의 알파벳상 순서(n)를 구했다.
알파벳 순서의 시작을 0으로 잡았기 때문에 -1을 해줬다.
만약 n이 0보다 작다면 26을 더해서 알파벳 맨 뒤부터 몇 번째인지를 구했다.
출력할 때 % 26을 코드에 추가했는데, 이는 n이 25(마지막 알파벳의 순서)보다 커지는 것을 막기 위함이다.

코드로 구현

package baekjoon.baekjoon_23;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 1718번 문제
public class Main797 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine(); // 평문
        String code = br.readLine(); // 암호화 키

        for(int i = 0; i < s.length(); i++) {
            if(s.charAt(i) == ' ') {
                System.out.printf(" ");
            } else { // 변형된 문자의 순서
                int n = s.charAt(i) - code.charAt(i % code.length()) - 1;
                if(n < 0) {
                    n += 26;
                }
                System.out.printf((char)(n % 26 + 'a') + "");
            }
        }
        br.close();
    }
}

마무리

이번 문제는 암호확 관련해서 문제였다. 예전에 대학생때 암호학을 들은적이 있어서 재미있게 풀었다. 코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글