문제 설명

정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 0 < num < 1,000,000
  • 0 ≤ k < 10
  • num에 k가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.

입출력 예

numkresult
2918313
23244344
1234567-1

입출력 예 설명

입출력 예 #1

  • 29183에서 1은 3번째에 있습니다.

입출력 예 #2

  • 232443에서 4는 4번째에 처음 등장합니다.

입출력 예 #3

  • 123456에 7은 없으므로 -1을 return 합니다.

✍ SOLUTION1

const solution = (num, k) => 
String(num).includes(String(k))? String(num).indexOf(k)+1:-1;

/* 
내가 처음 작성한 코드이다.

1. String(num): 매개변수로 들어오는 num은 number타입이기 때문에 문자열로 변환을 해준다.
2. includes(String(k)): includes를 통해서 String(num)에 String(k)가 있는지 확인해준다.
만약 'k'가 포함되어 있다면 이 표현식은 true를 반환하고, 그렇지 않다면 false를 반환한다.
3. 삼항 연산자를 이용해서 2번 결과가 true가 나왔을때 String(num).indexOf(k)+1을 return 해주고 
false일 경우 -1을 반환해준다.
*/

✍ SOLUTION2

function solution(num, k) {
    var index = num.toString().split("").indexOf(k.toString());

    if (index === -1){
        return index;
    }
    else{
        return index + 1;
    }
}

/* 
다른 분의 풀이도 공부할겸 가져와봤다.

SOLUTION1에서는 String으로 num을 형변환 해주었는데 SOLUTION2에서는 toString() 메서드를
사용하여 변환해었다.

1. num.toString().split(""): 이 줄은 먼저 주어진 정수 num을 문자열로 변환하고(toString()),
그 문자열을 각각의 문자로 분리하여 배열로 만든다.(split("")) 
2. indexOf(k.toString()): 이 배열에서 특정 숫자 k(문자열로 변환된)의 인덱스를 찾는다.(indexOf()) 
만약 k가 존재한다면 그 위치(0부터 시작하는 인덱스)를 반환하고, 존재하지 않으면 -1을 반환한다. 
3. 이 값을 변수 index에 저장한다.
4. if문: 만약 index가 -1(즉, 숫자 k가 없는 경우)이라면 -1을 그대로 반환한다. 
반대로, 숫자 k가 존재한다면 (즉, index 가 0 이상인 경우), 문제에서 요구하는 대로 "자리 수"를 
반환해야 하므로 실제 인덱스에 1을 더한 값을 반환한다. (index + 1) 
왜냐하면 자바스크립트의 배열 인덱스은 0부터 시작하기 때문에 실제 자리수와 맞추기 위해선 1을 더해줘야 한다.
*/

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글