본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬 / 자바스크립트] 숫자 찾기(코딩테스트 입문/ level 0)

by 청량리 물냉면 2023. 2. 20.
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/120904

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🐍파이썬
def solution(num, k):
    num = list(map(int, str(num)))
    return num.index(k)+1 if k in num else -1

1️⃣ num 각 자리수를 리스트에 넣는다.

2️⃣ 리스트에 k가 있다면 인덱스+1을 리턴, k가 없다면 -1을 리턴한다.

 

index() vs find()

찾는 원소가 있으면 동일하게 인덱스 값을 리턴하지만 찾는 원소가 없을 경우 find() -1을, index()  AttributeError 에러를 반환한다. (참고: https://ooyoung.tistory.com/78)

 

파이썬 find( ), index( ) 비교 / 인덱스, 위치를 찾는 함수(Python)

파이썬 find( ), index( ) - 순서 - 1.find / index 공통적인 내용 2.find / index 차이점 1. find( ), index( ) 공통적인 내용 1-1) 두 함수의 동일한 사용방법 '변수. find(찾을 문자)' / '변수. index(찾을 문자)'형태로

ooyoung.tistory.com

 

 

다른 풀이 방법

def solution(num, k):
    return -1 if str(k) not in str(num) else str(num).find(str(k)) + 1

find()를 사용한 풀이

 

 

 

🐥자바스크립트
function solution(num, k) {
    if (num.toString().indexOf(k.toString()) == -1){
        return -1
    } else{
        return num.toString().indexOf(k.toString()) + 1;
    }
}

1️⃣ num을 String으로 만든 뒤 indexOf로 첫 번째 등장한 k의 인덱스 값을 찾는다.

2️⃣ 결과가 -1인 경우 문자열을 찾지 못한 경우이므로 -1을 반환하고, -1이 아닌 경우 인덱스+1을 반환한다.

 

indexOf()

  • 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환
  • 지정된 요소가 존재하지 않으면 -1을 반환

다른 답안을 참고한 뒤 작성한 풀이

function solution(num, k) {
    return num.toString().indexOf(k) + 1 || -1
}

 

 

다른 풀이 방법

function solution(num, k) {
    return num.toString().split("").map((el) => Number(el)).indexOf(k) + 1 || -1
}

1️⃣ num을 string으로 만들어 한 자씩 잘라 배열로 만들고 map()을 이용해 배열의 원소를 Number형으로 형변환 한다. 이후 Number형 원소로 이루어진 배열에서 k를 찾아 k의 인덱스+1을 반환한다. 

2️⃣ OR연산자(||) 왼쪽 문장의 결과값이 인덱스 값(ex. 2)이라면 return 3 || -1이다. 이때 3은 true이므로 뒷부분은 확인할 필요도 없이 true가 된다. 따라서 오른쪽 문장을 실행하지 않고 3을 리턴한다.

만약 배열에서 k를 찾지 못했다면 indexOf는 -1을 반환하고, return 0 || -1이고 0은 false이므로 뒷부분을 확인해야 할 필요가 있다. 따라서 오른쪽 문장이 실행되며 -1이 리턴된다. 

 

자바스크립트에서 false / Truth

 

[JavaScript TIPs] && 과 || 를 이용한 powerful한 JavaScripting Powerful JavaScript with && and ||

Java, JavaScript 개발을 해 본 사람이라면 &&, || 연산자를 자주 사용할 것이다. 일반적으로 이 두 연산자를 학습할 때 보면, 앞의 항목이 참인지 거짓인지에 따라서 뒤 연산을 하지 않고 넘어가기 때

4urdev.tistory.com


function solution(num, k) {
    let ind = (''+num).indexOf(k);
    return ind === -1 ? -1 : ind+1;
}

1️⃣ ''+num 을 이용해 num을 문자열로 만든 후 indexOf로 k의 인덱스 값을 찾는다.

2️⃣ ind의 값이 -1이라면 -1을 리턴, -1이 아니라면 인덱스 값 + 1을 리턴한다.


function solution(num, k) {
    var answer = num.toString()
    if (answer.includes(k)) {
        return answer.indexOf(k) + 1;
    } else {
        return -1;
    }
}
반응형