Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Node
- Summer/WinterCoding
- 프로그래머스
- php
- 스킬체크
- androidstudio
- 연습문제
- 코딩테스트
- SimpleDateFormat
- 안드로이드
- 백준
- 코딩테스트연습
- Android
- REACT
- Fullcalendar
- 월간코드챌린지시즌3
- level1
- 스킬체크테스트
- AJAX
- java
- Programmers
- MSSQL
- 월간코드챌린지시즌2
- 나머지가1
- bootstrap
- 모달
- modal
- 부트스트랩
- bootstrapModal
- 동적웹페이지
Archives
- Today
- Total
개발하는 고양이 오이
25. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 시저 암호 / 9번 빼고 실패 해결 / 다른 사람의 풀이 본문
코딩테스트 - JAVA/프로그래머스 Programmers
25. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 시저 암호 / 9번 빼고 실패 해결 / 다른 사람의 풀이
Cucum 2022. 5. 9. 10:36
https://programmers.co.kr/learn/challenges
프로그래머스 코딩테스트 연습 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.
'코딩테스트 - JAVA > 프로그래머스 Programmers' 카테고리의 다른 글
27. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 완주하지 못한 선수 / 효율성 실패 해결 / 다른 사람의 풀이 (0) | 2022.08.02 |
---|---|
26. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 문자열 다루기 기본 / 5,6번 실패 해결 / 다른 사람의 풀이 (0) | 2022.05.09 |
24. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 문자열 내림차순으로 배치하기 (0) | 2022.05.06 |
23. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - k번째수 (0) | 2022.05.03 |
22. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 나누어 떨어지는 숫자 배열 / 다른 사람의 풀이 (0) | 2022.05.02 |