백준(Backjoon) 11655, ROT13

2021. 7. 5. 16:57CodingTest

문제풀이

각각의 문자들을 10진수로 변환한 다음 소문자, 대문자에만 13을 더한다. 단, 13을 더했을때 알파벳 십진수의 범위에서 벗어나는 경우 순회하여 증가시킨다. 예를 들어 소문자 알파벳 'o' 같은 경우 십진수로 111이다. 여기서 13을 더하면 124가 된다. 하지만 124는 97~122의 범위에서 벗어나므로 2 초과한다. 따라서 초과한 만큼 다시 97에서 더하여 98을 만들도록 한다. 공식은 아래와 같다.

더보기

만약 문자가 소문자이고 문자의 십진수+13이 122보다 초과할 때

최종값 = (문자의 십진수+13)-123+97

 

만약 문자가 대문자이고 문자의 십진수+13이 90보다 초과할 때

최종값 = (문자의 십진수+13)-97+65

 

예시) 알파벳 o = 111

(111+13)-97+65 = 92

92->b

소스코드

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

public class Main {
	public static String solution(String str)
	{
		StringBuilder sb = new StringBuilder();
		
		byte[] bytes = str.getBytes();
		for(byte b : bytes)
		{
			int a = b+13;
			if(b>=65 && b<=90)
			{	
				if(b+13>90)
				{
					a = (b+13)-91+65;
				}
				sb.append((char)a);
			}
			else if(b>=97 && b<=122)
			{
				if(b+13>122)
				{
					a = (b+13)-123+97;
				}
				sb.append((char)a);
			}
			else
			{
				sb.append((char)b);
			}
		}
		return sb.toString();
	}
	
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		System.out.println(solution(str));
	}
}

'CodingTest' 카테고리의 다른 글

백준(Backjoon) 10799, 쇠막대기  (0) 2021.07.06
백준(Backjoon) 1026, 보물  (0) 2021.07.06
백준(Backjoon) 1076, 저항  (0) 2021.07.02
백준(Backjoon) 10798, 세로읽기  (0) 2021.06.30
백준(Backjoon) 10816, 숫자 카드 2  (0) 2021.06.28