https://school.programmers.co.kr/learn/courses/30/lessons/155652
문제 접근
아스키 코드로 인해 문자들을 숫자로도 표현할 수 있는데 'a'+1 = 'b'가 되는 걸 활용하였다.
s의 문자열들을 한 문자씩 1씩 index만큼 증가시키면서 skip과 겹치는 지 확인하였고 겹친다면 검사중인 s의 문자를 1더 증가시켰다.
처음에 while문이 if문이었으나 반례 s = "y", skip = "za"일 경우 y → b로 바뀌지 않고 y → a로 되는 걸 보고 while문으로 바꾸고 s의 문자가 'z'를 넘는 경우를 위 아래에 넣고 검사하였다.
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
String answer = "";
char sChar[] = new char[s.length()];
for (int i = 0; i < s.length(); i++) {
sChar[i] = s.charAt(i);
for (int j = 0; j < index; j++) {
sChar[i]++;
if (sChar[i] > 'z') sChar[i] = 'a';
while (skip.contains(String.valueOf(sChar[i]))) {
sChar[i]++;
if (sChar[i] > 'z') sChar[i] = 'a';
}
}
answer += sChar[i];
}
return answer;
}
}
다른 사람 풀이
import java.util.*;
class Solution {
public String solution(String s, String skip, int index) {
StringBuilder result = new StringBuilder();
for(char c : s.toCharArray()) { // 문자열을 한 문자 씩 차례대로 분리해주는 메서드
for(int i=0; i<index; i++) { // s문자는 index 크기만큼 뒤의 문자로 가야된다
c = addChar(c); // addChar 메서드가 s문자를 1씩 증가시키는 메서드
while(skip.contains(String.valueOf(c))) // skip이랑 겹치면 s문자를 한 번 더 증가시킴
c = addChar(c);
}
result.append(c); // 한 문자를 다 이동시키면 추가시켜주기
}
return result.toString(); // StringBuilder는 toString으로 출력
}
public char addChar(char c) {
return (++c > 'z') ? 'a' : c; // 여기서 1씩 증가
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 숫자 문자열과 영단어 / JAVA] (0) | 2023.02.13 |
---|---|
[프로그래머스 / 개인정보 수집 유효기간 / JAVA] (0) | 2023.02.10 |
[프로그래머스 / 최소직사각형 / JAVA / 완전탐색] (0) | 2023.02.03 |
[프로그래머스 / 성격 유형 검사하기 / JAVA] (0) | 2023.02.01 |
[프로그래머스 / 숫자 짝꿍 / JAVA] (0) | 2023.01.30 |
댓글