Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 입문 : A로 B 만들기 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 입문 : A로 B 만들기

썸머몽 2023. 3. 28. 01:47
728x90

문제 및 제한사항

 

문자열 before after 매개변수로 주어질 , before 순서를 바꾸어 after 만들 있으면 1, 만들 없으면 0 return 하도록 solution 함수를 완성해보세요.

 

**제한사항**

0 < before의 길이 == after의 길이 < 1,000

before after 모두 소문자로 이루어져 있습니다.

 

풀이 방법

 

예를 들어 "olleh" "hello"는 순서가 바뀌어도 같은 단어를 만들지만 "allpe" "apple"은 순서를 바꿔도 만들 수 없다.

전자의 경우를 1로, 후자의 경우를 0로 리턴해야 한다.

 

풀이 방법은 2가지다.

 

1) sort()

문자열을 배열로 만든 후 sort로 동일한 순서를 맞춰준 후 비교하는 것이다.

삼항연산자를 사용해 같을 경우 1을, 그렇지 않을 경우 0을 리턴하게 했다.

 

2) 이중for문

처음에 이중으로 풀려다가 안돼서 챗지피티에 물어봤는데 두 번째 코드로 리팩토링 해줬다.

전자 문자열의 각 문자를 하나씩 순회해 후자 문자열에서 해당 문자가 있는지 찾아본다.

해당 문자가 없다면 & 모든 문자를 순회하고도 문자열을 만들지 못했다면 0을 반환하고

모든 문자를 순회하여 문자열을 만들었다면 1을 반환한다.

누가 봐도 1번이 훨씬 가독성이 좋다... (당연함 2번은 문자열의 길이가 길어지면 시간 복잡도를 가진다고 한다.)

 

코드

function solution(before, after) {
    return before.split('').sort().join('') === after.split('').sort().join('') ? 1 : 0
}
function solution(before, after) {
  for (let i = 0; i < before.length; i++) {
    let found = false;
    for (let j = 0; j < after.length; j++) {
      if (before[i] === after[j]) {
        found = true;
        break;
      }
    }
    if (!found) {
      return 0;
    }
  }
  return 1;
}
728x90