[Programmers/Lv. 0] 코딩테스트 입문 Day 8 - 배열, 구현, 수학 (Python)

2023. 4. 23. 14:44Algorithm

1. 배열 자르기


주어진 배열의 num1 인덱스부터 num2 인덱스까지 자른 배열을 반환하라는 문제이다.

 

(내가 생각한 풀이 과정)

파이썬 슬라이싱을 사용하면 되는 아주 간단한 문제이다.
이때, 파이썬 슬라이싱의 두 번째 요소는 해당 인덱스의 값을 포함하지 않기 때문에 +1을 시켜줘야 한다.

 

(코드)

더보기

💡 내 코드

def solution(numbers, num1, num2):
    return numbers[num1:num2+1]

 


2. 외계행성의 나이


0부터 9까지의 숫자를 알파벳(a~j) 순으로 정해진 문자로 조합한 문자열을 반환하라는 문제다.

 

(내가 생각한 풀이 과정)

아스키코드 기준 97번이 알파벳 a이기 때문에 숫자를 이용하여, 변환하는 방법을 생각했다.
앞에 수부터 한자릿수 단위로 끊어(//=10 식을 사용) 숫자를 알파벳으로 변환하고, 최종적으로 반환되는 문자열을 뒤집어주면 될 것이라 생각했다. 

 

(코드)

더보기

💡 내 코드

def solution(age):
    new_age = ""
    
    while age!=0:
        new_age+=chr(age%10+97)
        age//=10
    
    return new_age[::-1]

 

💡 다른 사람의 풀이 코드

나와는 같은 방법을 사용했지만, join 함수와 리스트 컴프리헨션을 사용해 코드 식을 간결하게 줄일 수도 있었다.

def solution(age):

    return ''.join([chr(int(i)+97) for i in str(age)])

 


3. 진료순서 정하기


응급도가 써있는 배열을 보고, 응급도가 높은 순서대로 우선순위를 작성해 배열을 반환하라는 문제이다.

 

(내가 생각한 풀이 과정)

응급도가 써있는 배열을 한 요소씩 반복시키면서 배열이 정렬되어 있을 때의 인덱스를 찾으면 된다고 생각했다.
단, 인덱스는 0부터 시작하니 1을 더해준 값을 해야 1순위부터 진료순서를 정할 수 있겠다.

 

(코드)

더보기

💡 내 코드

def solution(emergency):
    s_emergency = sorted(emergency, reverse=True)     
    return [s_emergency.index(i)+1 for i in emergency]

 

💡 다른 사람의 풀이 코드

위와 마찬가지로, 내 코드를 한줄로 줄이는 것도 가능했다.

def solution(emergency):
    return [sorted(emergency, reverse=True).index(e) + 1 for e in emergency]

 


4. 순서쌍의 개수


자연수 n이 입력값으로 주어질 때, 두 자연수의 곱으로 n을 만들 수 있는 순서쌍의 개수를 반환하라는 문제다.

 

(내가 생각한 풀이 과정)

곱으로 어떤 수를 만들 수 있다는 것은 그 수를 나누었을 때 나머지가 없이 나누어 떨어진다는 뜻과 같다.

거기에 순서쌍이라는 조건 때문에 중복값을 제거하지 않아도 되는 만큼,
숫자를 1부터 반복시키면서 주어진 수 n을 해당 숫자와 나누었을 때 나머지가 남지 않는 수의 카운트를 세면 된다고 생각했다.

 

(코드)

더보기

💡 내 코드

def solution(n):
    answer = [i for i in range(2, n+1) if n % i == 0]
    return len(answer)+1

 

💡 다른 사람의 풀이 코드

나와 비슷한 방법이면서, filter와 lambda 함수를 이용해 코드를 줄일 수도 있다.

def solution(n):
    return len(list(filter(lambda v: n % (v+1) == 0, range(n))))