알고리즘/백준

[백준] 11655번 : ROT13 - JAVA(자바)

온한온 2025. 2. 26. 13:55

백준 11655번 : ROT13

 

 

문제 풀이

백준 11655번은 브론즈 1 난이도로 구현, 문자열에 관한 문제입니다.

 

우선 문자열을 입력 받은 뒤 문자열의 길이만큼 반복문을 돌립니다.

이때 charAt()함수를 사용해서 char형으로 문자열을 잘랐고,

그 문자가 A ~ Z 범위인지, a ~ z 범위인지를 구분했습니다.

 

또 구분한 그 안에서 만약 아스키 코드 값으로 원래 문자 + 13을 했을 때 z의 범위가 넘어갈 경우

문자 - 13을 하면 다시 a값부터 시작하므로 알맞은 문자를 찾을 수 있습니다.

대소문자 둘 다 동일한 방식이므로 아스키 코드만 바꿨습니다.

 

코드
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String S = br.readLine();
		StringBuilder sb = new StringBuilder();
		
		for (int i = 0; i < S.length(); i++) {
			char chr = S.charAt(i);
			if (chr >= 'A' && chr <= 'Z') {
				if (chr + 13 > 90) {
					sb.append((char) (chr - 13));
				} else {
					sb.append((char) (chr + 13));
				}
			}
			else if (chr >= 'a' && chr <= 'z') {
				if (chr + 13 > 122) {
					sb.append((char) (chr - 13));
				} else {
					sb.append((char) (chr + 13));
				}
			}
			else {
				sb.append(chr);
			}
		}
		
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}

}

A ~ Z 대문자의 경우 Z는 아스키 코드로 90이므로 90을 초과하는지,

a ~ z 소문자의 경우 z는 아스키 코드로 122이므로 122를 초과하는지를 확인했습니다.

만약 초과한다면 char형으로 변경한 문자의 값에서 - 13을 해주었습니다.

아니라면 그대로 13을 더해도 z의 범위를 벗어나지 않으므로 + 13을 했습니다.

 

마지막으로 문자가 아닌 공백, 숫자의 경우도 있으므로 그건 그냥 추가해주기만 하면 됩니다.