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

2023. 2. 16. 19:28Algorithm

1. 나머지 구하기


함수의 매개변수로 주어진 정수 num1, num2를 나눈 나머지를 구하라는 문제다.

(내가 생각한 풀이 과정)

Day 1에서 사용했던 람다식과 나머지를 구하는 연산자 "%"를 사용했다.

 

(코드)

더보기

💡 내 코드

solution = lambda num1, num2: num1%num2

 


2. 중앙값 구하기


(문제 설명, 제한사항, 입출력 예)

홀수 길이의 array 배열이 입력되면, 중앙값을 찾아 반환하라는 문제이다. 

(내가 생각한 풀이 과정)

sort 함수를 이용해서 배열을 정렬시키고, 배열 길이의 나누기 2인 인덱스 값을 찾아 반환하면 된다.

 

(코드)

더보기

💡 내 코드

def solution(array):
    array.sort()
    return array[len(array)//2]

 


3. 최빈값 구하기


최빈값(array 배열에서 가장 자주 나오는 값)을 반환하라는 문제이다.

(내가 생각한 풀이 과정)

'파이썬 알고리즘 인터뷰' 책에 있었는 collections 모듈의 Counter 함수를 떠올렸다.
array 배열을 Counter 객체로 불러들여 개수를 세도록 하고, most_common 함수를 이용해 가장 많이 나온 값을 찾았다.

예외처리로 내가 신경써야하는 경우는 입출력 예시 #2, #3에 있는 두 경우였다.
첫 번째, 배열 속 요소가 1개라 그 배열 속 요소자체를 반환해줘야 하는 경우 -> 그냥 mode_number 반환값과 동일
두 번째, 최빈값이 여러 개일 경우 -> 가장 많이 나온 값과 두 번째 많이 나온 값이 서로 같은지 비교할 필요성이 있음!

사실 돌이켜서 생각해 보면, 불 필요한 코드였던 것 같다.

 

(코드)

더보기

💡 내 코드

import collections

def solution(array):
    answer = collections.Counter(array)
    mode_number = answer.most_common(1)[0][0]
    
    if len(array)==1:
        return mode_number
    else:
        if answer.most_common(2)[0][1] == answer.most_common(2)[1][1]:
            return -1
        else:
            return mode_number

 

💡 다른 사람의 풀이 코드

굳이 Counter 함수를 사용하지 않고도, 데이터 타입 Set과 enumerate라는 파이썬의 기능을 활용할 수도 있었다.

def solution(array):
    while len(array) != 0:
        for i, a in enumerate(set(array)):
            array.remove(a)
        if i == 0: return a
    return -1

 


4. 짝수는 싫어요


주어지는 정수 n 이하의 홀수가 오름차순으로 담긴 배열을 구하라는 문제

(내가 생각한 풀이 과정)

리스트 컴프리헨션(List Comprehension)과 조건문(정수와 2를 나눈 나머지가 0이 아니면 홀수)을 이용해서 해결했다.

 

(코드)

더보기

💡 내 코드

def solution(n):
    return [num for num in range(n+1) if num%2!=0]

 

💡 다른 사람의 풀이 코드

range 함수의 세 번째 인자가 step(숫자의 간격)이었다는 것을 깜빡했다.
step을 2로 두면, 자연스럽게 짝수를 계속 건너뛸 수 있을 거다.

def solution(n):
    return [i for i in range(1, n+1, 2)]