[Programmers/Lv. 0] 코딩테스트 입문 Day 9 - 수학, 문자열, 해시, 완전탐색, 조건문 (Python)

2023. 4. 24. 19:09Algorithm

1. 개미 군단


장군개미는 5의 공격력, 병정개미는 3의 공격력, 일개미는 1의 공격력을 가지고 있을 때,
사낭감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 반환하라는 문제이다.

 

(내가 생각한 풀이 과정)

위에서부터 5, 3, 1의 순서대로 값을 나누어 그 반환값을 계속 더하면 된다고 생각했다.

 

(코드)

더보기

💡 내 코드

def solution(hp):
    count = 0

    count += hp // 5 
    hp %= 5

    count += hp // 3
    hp %= 3

    count += hp

    return count

 

💡 다른 사람의 풀이 코드

내가 생각한 문제 풀이 방식과는 같지만, 코드를 한 줄로 줄일 수도 있었다. 아래와 같이.

def solution(hp):    
    return hp // 5 + (hp % 5 // 3) + ((hp % 5) % 3)

 


2. 모스부호 (1)


모스부호 문자열을 영어로 변환한 문자열을 반환하라는 문제이다.

 

(내가 생각한 풀이 과정)

우선 각 모스부호는 공백으로 나누어져 있기에 split(' ') 함수를 사용해서 각 글자별로 분리를 해 반복문을 돌렸다.
morse라는 딕셔너리가 주어져있기 때문에, key값을 이용해서 문자열을 변환한 후, join 함수를 이용해서 새로운 문자열을 만들면 되는 문제이다.

 

(코드)

더보기

💡 내 코드

def solution(letter):
    morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}
    return ''.join([morse[i] for i in letter.split(' ')])

 


3. 가위 바위 보


가위는 2, 바위는 0, 보는 5로 표현할 때, 주어진 문자열을 이길 수 있는 새로운 문자열을 반환하라는 문제이다.
예를 들어, 205(가위 바위 보)가 주어져 있을 때, 이를 이길 수 있는 052(바위 보 가위)를 문자열로 반환하라는 뜻이다.

 

(내가 생각한 풀이 과정)

위 모스부호(1) 문제와 굉장히 유사하게 풀 수 있다.
각 가위 바위 보 별로 이길 수 있는 딕셔너리를 미리 만들어두고, 반복을 시키면서 값을 변환시키면 해결할 수 있다.

 

(코드)

더보기

💡 내 코드

def solution(rsp):
    win = {'0': '5', '2': '0', '5': '2'}   
    return ''.join([win.get(i) for i in rsp])

 


4. 구슬을 나누는 경우의 수


서로 다른 n개의 구슬의 개수가 주어질 때, m개를 고르는 경우의 수를 구하라는 문제이다. 

 

(내가 생각한 풀이 과정)

예전 수학시간에 배웠던 서로 다른 n개중 m개를 뽑는 경우의 수 식을 사용하면 된다.

 

(코드)

더보기

💡 내 코드

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

def solution(balls, share):
    return factorial(balls)/(factorial(balls-share)*factorial(share))

 

💡 다른 사람의 풀이 코드

열심히 구할 수도 있지만, 이처럼 math 모듈 내에 comb라는 내장 함수를 이용하면 쉽게 구할 수도 있다.

import math

def solution(balls, share):
    return math.comb(balls, share)