[Programmers/Lv. 0] 코딩테스트 입문 Day 17 - 문자열, 수학, 조건문, 배열, 사칙연산 (Python)

2023. 5. 31. 18:41Algorithm

1. 숫자 찾기


정수 num과 k가 주어질 때, 정수 num 중에서 k가 있다면 정수 num에서의 k가 있는 자릿수를 반환하라는 문제이다.
만약에, 정수 k가 num 안에 없다면 -1을 반환하도록 한다.
num에 k가 여러 개 있다면, 가장 처음 나타나는 자리를 반환하면 된다.

 

(내가 생각한 풀이 과정)

인덱스가 아니라 자릿수를 반환하라는 문제이므로, 결국은 인덱스를 찾아, 마지막에는 +1을 해줘야 한다는 것이 먼저 떠올랐다.

find() 함수를 사용해서 인덱스를 찾아주었다.
단, find() 함수를 사용하기 위해 주어진 정수들은 문자열로 변환해서 사용했다.

 

(코드)

더보기

💡 내 코드

def solution(num, k):
    answer = str(num).find(str(k))

    if answer == -1: return answer
    else: return answer+1

 

💡 다른 사람의 풀이 코드

나와 같은 풀이를 한 줄로 축약해서 쓴 코드이다.

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

 


2. n의 배수 고르기


정수 n과 numlist 정수 배열이 함께 주어질 때,
주어진 정수 배열 numlist에서 정수 n의 배수가 아닌 수들은 제거해서 반환하는 문제이다. 

 

(내가 생각한 풀이 과정)

어려울 것이 없다.
리스트 컴프리헨션 안에 numlist 배열의 요소들을 하나씩 반복하면서 n과 나누어 떨어지는지 확인하면 되는 쉬운 문제이다.

 

(코드)

더보기

💡 내 코드

def solution(n, numlist):
    return [i for i in numlist if i%n==0]

 


3. 자릿수 더하기


주어진 정수의 각 자리 숫자의 합을 구하라는 문제이다.

 

(내가 생각한 풀이 과정)

예전에 한 번 푼적 있는 것 같은데,
주어진 정수 값을 10으로 0이 될 때까지 계속 나누기 연산을 해주면서, 나머지 값은 계속 반환값에 더해주면 된다.
결국은 첫째 자릿수에 있는 수들만 계속 더해주는 역할을 하게 되는 거다.

 

(코드)

더보기

💡 내 코드

def solution(n):
    answer = 0
    while n != 0:
        answer += n % 10
        n //= 10
    return answer

 

💡 다른 사람의 풀이 코드

1번 문제에서 풀었던 것처럼, 정수를 문자열로 인식해서 계산하면 값을 반복을 통해서 더해줄 수 있다.
더하는 연산은 sum() 함수를 이용!

def solution(n):
    return sum(int(i) for i in str(n))

 


4. OX퀴즈


배열 안에 수식이 들어있는("X 연산자 Y = Z") 형태로 주어진다.
수식이 옳다면 "O"를, 틀리다면 "X"를 순서대로 담은 배열을 구하라는 문제이다.

연산은 덧셈과 뺄셈 연산만 포함된다.
연산 기호와 숫자 사이는 항상 하나의 공백이 존재하며, 숫자는 0부터 9 사이로 이루어져 있다 (음수도 가능).
X, Y, Z는 0을 제외하고는 0으로 시작되지 않는다.

 

(내가 생각한 풀이 과정)

결국은 지난 문자열 계산하기 문제처럼 (링크 3번 문제에 설명되어 있음) eval() 함수를 사용하면 될 것 같다는 생각이 들었다.

단, =을 기준으로 eval() 함수를 넣어줘야 하며, = 이후의 값과 같은지 다른지를 비교하면 될 것 같다.

 

(코드)

더보기

💡 내 코드

def solution(quiz):
    answer = []
    for q in quiz:
        if str(eval(q[:q.find("=")])) == q[q.find("=")+2:]: answer += "O"
        else: answer += "X"
    return answer