개인공부-5

박상훈·2023년 4월 27일
0

개인공부

목록 보기
5/16

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를 증가시키지 않고, 없다면 증가시키는 방향으로 가야했다.
  • 뭔가 접근은 비슷했던 것 같았고, 쉬웠던 문제인데 풀이를 봤던게 아쉽다.
profile
기록하는 습관

0개의 댓글