✔ 둘만의 암호
문제 분석하기
문자열 s를 하나씩 탐색하면서 아스키 코드 값을 증가시킴
이때 만약 스킵한 문자열에 존재하는 문자가 포함된다면 인덱스 값을 증가시키지 않으며
z를 넘어갈 경우 -26을 해주어 a로 돌아가도록 함 (z의 아스키 코드 값은 122, a의 아스키 코드 값은 97)
손으로 풀어보기
- 문자열 s를 하나씩 탐색하면서 index 만큼 뒤의 알파벳을 바꿔줌
- 이때 스킵한 문자열에 존재하는 문자가 포함된다면 인덱스 값을 증가시키지 않음
- z를 넘어갈 경우 -26을 해주어 a로 돌아가도록 함
- 문자열을 변환한 결과를 반환
슈도코드 작성하기
s(변환할 문자열)
skip(스킵할 문자열)
index(알파벳을 바꿔줄 인덱스)
answer(변환한 결과)
for(i = 0 -> s만큼) {
for(j = 0 -> index만큼) {
문자 증가
if(변환할 문자인 c가 z보다 크다면)
a로 돌아가도록 함
if(변환할 문자인 c가 증가될 때 스킵할 문자열에 존재한다면)
j를 증가시키지 않음
}
변환한 결과에 추가
}
문자열 변환
코드 구현하기
/**
* 155652) 둘만의_암호
*/
public class L070_155652 {
// s(변환할 문자열)
// skip(스킵할 문자열)
// index(알파벳을 바꿔줄 인덱스)
public String solution(String s, String skip, int index) {
// answer(변환한 결과)
String answer = "";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
for (int j = 0; j < index; j++) {
// 문자 증가
c += 1;
// 변환할 문자인 c가 z보다 크다면
if (c > 'z')
// a로 돌아가도록 함
c -= 26;
// 변환할 문자인 c가 증가될 때 스킵할 문자열에 존재한다면
if (skip.contains(String.valueOf(c)))
// j를 증가시키지 않음
j--;
}
// 변환한 결과에 추가
answer += c;
}
// 문자열 변환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L070_155652 solution = new L070_155652();
String s = "aukks";
String skip = "wbqd";
int index = 5;
String result = solution.solution(s, skip, index);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[147355] 크기가 작은 부분문자열 (0) | 2023.10.25 |
---|---|
[150370] 개인정보 수집 유효기간 (0) | 2023.10.24 |
[159994] 카드 뭉치 (0) | 2023.10.22 |
[160586] 대충 만든 자판 (0) | 2023.10.21 |
[161989] 덧칠하기 (0) | 2023.10.20 |