병아리의 코딩 일기

[프로그래머스 코딩테스트 연습] 문자열 안에 문자열 (풀이) 본문

카테고리 없음

[프로그래머스 코딩테스트 연습] 문자열 안에 문자열 (풀이)

oilater 2023. 4. 5. 14:50

1. 프로그래머스 Lv.0 문자열 안에 문자열 

정답률 89% 의 문제였는데, 거의 첫 코딩 테스트 연습이라 어려웠다. Lv 2는 얼마나 어려울지..ㅋㅋㅋㅋ

 

function solution(str1, str2) {
  let answer = 2;

  for (let i = 0; i < str1.length - (str2.length - 1); i++) {
    let three = "";
    for (let j = 0; j < str2.length; j++) {
      three += str1[i + j];
    }
    if (three === str2) {
      answer = 1;
      break;
    }
  }
  return answer;
}

console.log(solution("ab6CDE443fgh22iJKlmn1o", "6CD")); // 1
console.log(solution("ppprrrogrammers", "pppp")); // 2
console.log(solution("AbcAbcA", "AAA")); // 3

 

풀이 전략 : str1 의 각 인덱스에서 str2의 길이 만큼 단어를 한줄로 출력한 후 three 라는 변수에 담는다.

for 문을 돌며 three 에는 위의 문자열들이 차례대로 담길 것이며, three 의 값이 str2 의 값과 같을 때 break 해준다.

 

 

위 코드의 j 값을 i부터 시작해서 아래와 같이 짧게 할 수도 있다.

function solution(str1, str2) {
  let answer = 2;

  for (let i = 0; i < str1.length - (str2.length - 1); i++) {
    let three = "";
    for (let j = i; j < str2.length + i; j++) {
      three += str1[j];
    }
    if (three === str2) {
      answer = 1;
      break;
    }
  }
  return answer;
}

console.log(solution("ab6CDE443fgh22iJKlmn1o", "6CD")); // 1
console.log(solution("ppprrrogrammers", "pppp")); // 2
console.log(solution("AbcAbcA", "AAA")); // 3

오류와 배운 내용

for 문을 잘 써놓고 three 의 변수를 for 문 밖의 전역 변수로 선언해버렸다. 그러니 for 문에는

4개씩 돌린 문자열들이 합쳐져서 계속 길이가 불어났다.

그럴 수 밖에...

위와 같이 변수 three 를 바깥쪽 for 문 안에 선언해야 three에 4개씩 담길 것이 아닌가!!

728x90
반응형
LIST