1. 프로그래머스 Level - 1(둘만의 암호)
- 문제 설명
1) 문자열이 주어진다.(a~z로 구성 된) -> String s
2) 스킵 해야할 문자열이 주어진다. -> String skip
3) 몇번 점프해야 하는지 index가 주어진다. -> int index
ex) "aukks" , "wbqd", 5
-> skip문자열은 지나가되 index에 포함하지 않음 -> 결과 : "happy"
4) "z"를 넘어갈 경우 "a"부터 다시 시작한다.
2. 초반 접근
- 1) 배열을 전부 돌려보지 않고, contains()를 활용할 수 있는 쪽으로 가고, contains() = true 면 index++(X)
contains() = false 면 index++(O)
2) String.contains()를 사용하려고 했으나 ()안에 char가 먹지않았음.
-> String.contains(String.valueOf())를 사용했으면 됐었음..(번외 이야기)
3. 생각의 오류
while(index>0){
if(skip에 있으면){그 문자+=1}
else{그 문자+=1; index--;}
}
- 이렇게 접근했을 때 s = "zzzzzz" , skip = "abcdefghijklmnopqrstuvwxy", index = 6
-> 기대 값 "zzzzzz" -> 결과 값 "aaaaaa" 실패!
- 오류의 원인
1) skip의 문자열을 뛰어넘다가 skip에 포함되지 않는 문자로 넘어가는 것도 index에 포함이 되어야한다.
2) 위의 로직대로 진행하면, skip에 없는 문자가 나왔을 때 두번 뛰어넘는 꼴이 된다.
4. 문제해결
while (indexTwo > 0) {
sL += 1;
if(sL > 'z') sL = 'a';
if (skList.contains(sL)) {
continue;
}
indexTwo-=1;
}
str.append(sL);
}
- 처음부터 문자를 넘기고, skip에 있다면 index를 증가시키지 않고, 없다면 증가시키는 방향으로 가야했다.
- 뭔가 접근은 비슷했던 것 같았고, 쉬웠던 문제인데 풀이를 봤던게 아쉽다.