문제 설명
두 문자열 s와 skip, 그리고 자연수 index가 주어질 때, 다음 규칙에 따라 문자열을 만들려 합니다. 암호의 규칙은 다음과 같습니다.
- 문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.
- index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.
- skip에 있는 알파벳은 제외하고 건너뜁니다.
예를 들어 s = "aukks", skip = "wbqd", index = 5일 때, a에서 5만큼 뒤에 있는 알파벳은 f지만 [b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다. 따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은 [c, e, f, g, h] 순서에 의해 'h'가 됩니다. 나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.
두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때 위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.
제한사항
- 5 ≤ s의 길이 ≤ 50
- 1 ≤ skip의 길이 ≤ 10
- s와 skip은 알파벳 소문자로만 이루어져 있습니다.
- skip에 포함되는 알파벳은 s에 포함되지 않습니다.
- 1 ≤ index ≤ 20
입출력 예
s skip index result
"aukks" | "wbqd" | 5 | "happy" |
입출력 예 설명
입출력 예 #1
본문 내용과 일치합니다.
package LV1;
public class H155652 {
public String solution(String s, String skip, int index) {
StringBuilder answer = new StringBuilder(); // 결과 문자열을 저장할 StringBuilder를 선언
for (char c : s.toCharArray()) { // 문자열 s를 한 문자씩 순회한다.
int counter = index; // counter 변수를 index로 초기화하고 변수는 알파벳을 몇 칸 이동할지를 결정한다.
while (counter > 0) { // counter가 0보다 클 동안 반복한다.
c++; // 문자 c를 한 칸 뒤로 이동시킨다.
if (c > 'z') { // 만약 문자 c가 'z'를 넘어갈 경우
c = 'a'; // 문자 c를 'a'로 돌려놓는다.
}
if (!skip.contains(String.valueOf(c))) { // 만약 문자 c가 skip에 포함되지 않은 경우
counter--; // counter를 하나 감소시킨다. 이는 실제로 알파벳을 한 칸 이동시키는 것을 의미한다.
}
}
answer.append(c); // 최종적으로 이동한 문자 c를 결과 문자열에 추가한다.
}
return answer.toString(); // 결과 문자열을 String 형태로 변환하여 반환한다.
}
}
문자열 s의 각 문자를 주어진 index만큼 뒤로 이동시키면서, skip에 포함된 문자는 건너뛰는 암호화 규칙을 구현한다.
만약 이동하려는 문자가 알파벳 'z'를 넘어갈 경우, 알파벳 'a'로 돌아가게 되며, 최종적으로 변환된 문자열이 결과값으로 반환한다.
드디어 풀었다..!!! 1레벨 완료
'알고리즘 > 프로그래머스 JAVA LV.1' 카테고리의 다른 글
옹알이 (2) (0) | 2023.06.05 |
---|---|
문자열 나누기 (0) | 2023.05.31 |
[카카오 인턴] 키패드 누르기 (0) | 2023.05.30 |
대충 만든 자판 (0) | 2023.05.29 |
신규 아이디 추천 (0) | 2023.05.24 |