코딩테스트 - JAVA/프로그래머스 Programmers
25. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 시저 암호 / 9번 빼고 실패 해결 / 다른 사람의 풀이
Cucum
2022. 5. 9. 10:36
https://programmers.co.kr/learn/challenges
코딩테스트 연습
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr
프로그래머스 코딩테스트 연습 Level.1 - 시저 암호
풀이
import java.util.*;
class Solution {
public String solution(String s, int n) {
int chNum;
int changeNum;
char[] charArray = new char[s.length()];
for (int i = 0; i < s.length(); i++) {
chNum = (byte)s.charAt(i); // String을 char로 변환 후 char를 int(아스키코드)로 변환
if (chNum == 32) { // 아스키코드가 32 = 공백
changeNum = chNum;
}
else {
if (chNum >= 90 && chNum < 96) { // 대문자 판별 = 대문자의 아스키코드가 90을 넘어가면(즉 Z이면) -26
chNum = chNum - 26;
}
if (chNum >= 122) { // 소문자 판별 = 소문자의 아스키코드가 122을 넘어가면(즉 z이면) -26
chNum = chNum - 26;
}
changeNum = chNum + n;
}
if (changeNum > 90 && chNum < 96) { // n만큼 더한 값이 대문자 마지막 아스키코드 값인 90을 넘어가면 -26
changeNum = changeNum - 26;
}
if (changeNum > 122) { // n만큼 더한 값이 소문자 마지막 아스키코드 값인 122을 넘어가면 -26
changeNum = changeNum - 26;
}
charArray[i] = (char)changeNum; // char형 배열에 넣어주기
}
return new String(charArray); // char형 배열을 String을 바꿔서 return
}
}
풀이 과정
① String을 Char로 변환 (charAt(index))
② Char을 아스키코드(숫자)로 변환 (byte(char변수))
③ n값을 + 해주기
④ +해준 int값을 Char형 배열에 넣은 후 String으로 바꿔서 return
(풀이 실패 과정)
import java.util.*;
class Solution {
public String solution(String s, int n) {
String answer = "";
char ch;
int chNum;
int changeNum;
char[] charArray = new char[s.length()];
for (int i = 0; i < s.length(); i++) {
ch = s.charAt(i); // String을 char로 변환
chNum = (byte)ch; // char를 int(아스키코드)로 변환
if (chNum == 32) { // 아스키코드가 32 = 공백
changeNum = chNum;
}
else {
if (chNum >= 90 && chNum < 96) { // 대문자 판별
chNum = chNum - 26;
}
if (chNum >= 122) { // 소문자 판별
chNum = chNum - 26;
}
changeNum = chNum + n;
}
charArray[i] = (char)changeNum;
}
answer = new String(charArray);
return answer;
}
}
실패 이유
= 예를 들어 s가 "P"이고, n이 15일 때 return값은 E이어야 하는데, 위의 코드는 "_"를 출력함. 코드를 살펴보니 n값을 더한 아스키코드가 대문자일때 90(Z)을 넘어가버리기 때문.
다른 사람의 풀이
- Character.isLowerCase()
= 입력 받은 인자가 영문 소문자 인지 여부를 판단하여 true 또는 false 값을 return.
- Character.isUpperCase()
= 입력 받은 인자가 영문 대문자 인지 여부를 판단하여 true 또는 false 값을 return.