반응형
https://programmers.co.kr/learn/courses/30/lessons/12926
<시저 암호>
○ 처음 시도한 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i=0;i<s.length();i++) {
if((char)(s.charAt(i)+n) > 'Z' && (char)(s.charAt(i)+n) < 'a'
||(char)(s.charAt(i) +n) > 'z') {
answer += (char)(s.charAt(i) + -26 +n);
}else if(s.charAt(i)==' ') {
answer += " ";
}else
answer += (char)(s.charAt(i) + n);
}
return answer;
}
}
|
cs |
[시행착오]
- 문자열 i번지 각각의 아스키코드에 n만큼을 더해준다.
- z또는 Z를 넘어갈때 26을 빼주고 다시 n만큼을 더해준다.
- 문자열의 i번지를 char형태의 배열로 담아 처리해야한다고 생각했다.
charAt() 메소드의 사용이 next().charAt()에서만 쓸 수 있다고 생각했다.
s도 String 배열이기 때문에 점연산자로 s.charAt()으로 접근할 수 있다.
- 대문자와 소문자를 나누지 않아서 Y를 4만큼 증가시킬때 같은 경우 특수문자가 출력됐다.
- 공백 처리를 아스키코드로만 처리해야한다고 생각하였다.
" "를 += 연산자로 더해주면 문자열 그대로 더해져서 출력된다.
○ 다시 수정한 풀이
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
|
class Solution {
public String solution(String s, int n) {
String answer = "";
// s의 길이만큼 반복하여 체크하기
for(int i=0;i<s.length();i++) {
// i번지 알파벳이 대문자일 경우
if(s.charAt(i)>='A' && s.charAt(i)<='Z') {
// n을 더한 값이 Z를 넘어갈 경우
if((char)(s.charAt(i)+n)>'Z')
answer += (char)(s.charAt(i)+n-26); // n을 더하고 26을 빼준다
else
answer += (char)(s.charAt(i)+n); // n만 더해준다
// i번지 알파벳이 소문자일 경우
}else if(s.charAt(i)>='a' && s.charAt(i)<='z') {
// n을 더한 값이 z를 넘어갈 경우
if((char)(s.charAt(i)+n)>'z')
answer += (char)(s.charAt(i)+n-26); // n을 더하고 26을 빼준다
else
answer += (char)(s.charAt(i)+n); // n만 더해준다
// i번지가 공백일 경우
}else if(s.charAt(i)==' ')
answer += " "; // 공백을 String으로 더해주면 그대로
}
return answer;
}
}
|
cs |
- 대문자의 범위와 소문자의 범위를 나누어 구분하였다.
- 대문자와 소문자 if문 안에 z또는 Z를 벗어날 경우를 else문으로 처리하였다.
- 구멍없이 원하는 결과값은 나왔지만 if문이 7개로.. 너무 많다.
○ 좋아요를 많이 받은 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Caesar {
String caesar(String s, int n) {
String result = "";
n = n % 26;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLowerCase(ch)) {
ch = (char) ((ch - 'a' + n) % 26 + 'a');
} else if (Character.isUpperCase(ch)) {
ch = (char) ((ch - 'A' + n) % 26 + 'A');
}
result += ch;
}
return result;
}
}
|
cs |
- Character.isLowerCase() : 소문자를 구분하는 메소드
Character.isUpperCase() : 대문자를 구분하는 메소드
- % 연산자를 사용하여 밀어줄 수를 구하는 방법
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
문자열 내림차순으로 배치하기/java/프로그래머스/Level1 (0) | 2020.02.23 |
---|---|
K번째수/java/프로그래머스/Level1 (0) | 2020.02.16 |
약수의 합/java/프로그래머스/Level1 (0) | 2020.02.15 |
2016년/java/프로그래머스/Level1 (0) | 2020.02.15 |
소수 찾기/java/프로그래머스/Level1 (0) | 2020.02.15 |