반응형
다시 코딩 테스트를 준비하면서 문제 리뷰를 진행하려고 한다.
해당 문제를 풀면서 첫 번째 풀이에는 Character의 메소드를 사용해서 풀이를 했다.
두 번째 풀이에는 A-Z, a-z 의 아스키 코드 범위를 비교연산자로 비교하면서 해결했다.
대소문자의 아스키 코드는 하단과 같다.
대문자 아스키 코드 : A(65) ~ Z(90)
소문자 아스키 코드 : a(97) ~ z(122)
설명
대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.
입력
첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다.
문자열은 영어 알파벳으로만 구성되어 있습니다.
출력
첫 줄에 대문자는 소문자로, 소문자는 대문자로 변환된 문자열을 출력합니다.
예시 입력 1
StuDY
예시 출력 1
sTUdy
첫 번째 풀이
해당 문제는 대소문자를 서로 변환하는 문제이기에 처음 문제를 풀 때는 Character class의 isUpperCase, toUpperCase 와 같은 함수를 통해서 서로 대소문자를 변환하며 풀이했다.
package section01.E02_대소문자_변환;
import java.io.*;
public class Main {
public String solution(String str) {
StringBuilder answer = new StringBuilder();
for (char inputChar : str.toCharArray()){
if (Character.isUpperCase(inputChar)){
answer.append(Character.toLowerCase(inputChar));
} else if (Character.isLowerCase(inputChar)){
answer.append(Character.toUpperCase(inputChar));
}
}
return answer.toString();
}
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String inputString = br.readLine();
String answer = T.solution(inputString);
bw.write(answer);
bw.flush();
bw.close();
}
}
두 번째 풀이
아스키 코드의 범위를 비교연산자를 사용해서 체크했다.
소문자 아스키 코드와 대문자 아스키 코드의 차이는 32이기에 final static int ASCII_DIFF = 32; 상수로 선언해서 사용을 해서 해결했다.
package section01.E02_대소문자_변환;
import java.io.*;
public class Main {
final static int ASCII_DIFF = 32;
public String solution(String str) {
StringBuilder answer = new StringBuilder();
// A(65) ~ Z(90) : 대문자
// a(97) ~ z(122) : 소문자
for (char asciiNumber : str.toCharArray()){
// 대문자이면
if (asciiNumber >= 65 && asciiNumber <= 90){
// 소문자로
answer.append((char)(asciiNumber + ASCII_DIFF));
}
// 소문자이면
if (asciiNumber >= 97 && asciiNumber <= 122){
// 대문자로
answer.append((char)(asciiNumber - ASCII_DIFF));
}
}
return answer.toString();
}
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String inputString = br.readLine();
String answer = T.solution(inputString);
bw.write(answer);
bw.flush();
bw.close();
}
}
정리
Character에 존재하는 isLowerCase, isUpperCase, toUppderCase, toLowerCase 메소드를 정리를 해볼 수 있었고,
아스키 코드의 값을 직접 비교연산자로 다뤄볼 수 있었다.
반응형
'코딩테스트' 카테고리의 다른 글
[Java] 암호 (0) | 2022.06.19 |
---|---|
[Java] 가장 짧은 문자거리 (0) | 2022.06.19 |