728x90
▶ BufferedReader와 isLetter을 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
입력 & 출력
아스키코드표 (ASCII)
나의 풀이
이번 문제는 "ROT13" 암호화를 적용하는 문제입니다.
Chracter.isLetter() 메서드를 잘몰랐기 때문에 아스키코드의 10진수를 활용해보았습니다.
먼저 빠른 입력을 위해서 BufferedReader 클래스를 사용하여 입력을 받아주고, 문자열 결합을 위하여 StringBuilder 클래스를 활용해 주었습니다.
String 타입으로 입력을 받아주고, 해당 길이만큼 반복하는 for문을 작성해 줍니다.
charAt() 메서드를 사용하여 각 요소를 문자로 변수 ch에 저장합니다. 그리고 ch를 int형으로 캐스팅하여 저장해 줍니다.
위의 아스키코드를 보면 대문자 A ~ Z의 10진수는 65 ~ 90 & 소문자 a ~ z의 10진수는 97 ~ 122입니다.
따라서 해당 10진수의 범위인 문자 요소로 if문의 조건을 걸어줍니다.
대문자일 경우에 범위를 넘어가지 않으면 해당 문자를 13을 밀어주고, 범위를 넘어간다면 26을 빼주고, 소문자도 마찬가지로 작업을 해줍니다.
그리고 다시 char타입으로 캐스팅을 한 뒤 StringBuilder 클래스의 append() 메서드를 사용하여 문자열 연결을 해주고, 반환하여 마무리해 주었습니다.
다른 풀이✅
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
StringBuilder result = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
char rotated = ch;
if (Character.isLetter(ch)) {
if (ch >= 'A' && ch <= 'Z') { // 대문자인 경우
rotated = (char) (ch + 13);
if (rotated > 'Z') {
rotated -= 26;
}
} else if (ch >= 'a' && ch <= 'z') { // 소문자인 경우
rotated = (char) (ch + 13);
if (rotated > 'z') {
rotated -= 26;
}
}
}
result.append(rotated);
}
System.out.println(result.toString());
}
}
이번 풀이는 isLetter() 메서드를 활용한 코드입니다.
전체적인 풀이 맥락은 "나의 풀이"와 동일합니다.
참고 ❗
'Coding Test > 백준' 카테고리의 다른 글
[백준] 나누기 (BufferedReader, printf, 1075번, Java) (0) | 2024.06.06 |
---|---|
[백준] 저항 (BufferedReader, HashMap, 1076번, Java) (0) | 2024.06.05 |
[백준] 8진수 2진수 (BufferedReader, StringBuilder, toCharArray, 1212번, Java) (1) | 2024.06.04 |
[백준] 단어 뒤집기 (BufferedReader, StringBuilder, 9093번, Java) (0) | 2024.06.02 |
[백준] Hashing (BufferedReader, 모듈러 연산, 15829번, toCharArray(), Java) (1) | 2024.06.02 |