코딩한걸음
728x90
반응형

코딩 테스트 Coding Test 와 코드 리뷰 Code Review


코딩 테스트 문제풀이의 목표

  • 코딩 테스트 문제풀이를 하며 알고리즘에 대한 이해도를 높힌다
  • 팀원들과 코드 리뷰를 하며 해당 코드를 짠 구체적인 이유를 제시한다

문제 1 : https://school.programmers.co.kr/learn/courses/30/lessons/120837

# 개미군단

# 문제설명
# 개미 군단이 사냥을 나가려고 합니다. 
# 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 
# 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 
# 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 
# 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 
# 사냥감의 체력 hp가 매개변수로 주어질 때, 
# 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 
# return하도록 solution 함수를 완성해주세요.

# 제한사항
# hp는 자연수입니다.
# 0 ≤ hp ≤ 1000

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

먼저 반드시 장군개미가 들어가는 것이 이득인지를 생각해보았다.

1 부터 10까지의 경우의수를 생각해보니

 

1 2 3 4 5 6 7 8 9 10
1 2 1 2 1 2 3 2 3 2

 

이렇게 나온다. 장군개미가 무조건 들어가는 것이 이득이다.

hp를 장군개미(5)로 나눈 몫(hp//5)을 먼저 계산하고

나머지(hp%5) 중에 3으로 나눈 몫(hp%5//3)과 나머지(hp%5%3)를 계산하면 끝이다.

 

하지만 무조건 한가지 방법으로만 풀라는 법은 없지.

좀 더 생각할 시간을 가져보고 생각해보니 다른풀이가 생각났다.

def solution(hp):
    a = hp//5
    b = 2 if hp%5%2==0 else 1 
    answer = a+b
    return answer

1~4까지의 최소값을 보면 홀수는 1, 짝수는 2가 나온다

즉 어차피 5로 나눈 나머지는 1~4까지니깐  홀수냐 짝수냐에 따라 b의 값을 정해줘봤다.

당연히 답으로 잘 나온다

if문이 추가되서 리소스는 더 많이 먹겠지만 코드짜는 방법에 다양화도 필요하다


문제 2 : https://school.programmers.co.kr/learn/courses/30/lessons/120819

# 아메리카노

# 문제 설명
# 머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 
# 아이스 아메리카노는 한잔에 5,500원입니다. 
# 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 
# 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 
# return 하도록 solution 함수를 완성해보세요.

# 제한사항
# 0 < money ≤ 1,000,000

def solution(money):
    return [money//5500, money%5500]

간단한 1차 방정식을 코드로 나타내봤다.

# 1차 방정식으로 문제를 먼저 확인
# money = 5500 * x + y
# x = 최대로 마실 수 있는 아메리카노의 잔 수
# y = 남는 돈

 


문제 3 : https://school.programmers.co.kr/learn/courses/30/lessons/120910

# 세균 증식

# 문제 설명
# 어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 
# 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 
# t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

# 제한사항
# 1 ≤ n ≤ 10
# 1 ≤ t ≤ 15

def solution(n,t):
    return n*2**t

이 문제도 간단한 등비수열 문제였다. 

팀원은 while을 사용해서 문제를 풀었는데 t가 정수로만 주어진다면 문제없어 보인다

def solution(n, t):
    answer = 0
    while t > 0:
        t -= 1
        n *= 2 
    answer = n
    return answer

문제 4 : https://school.programmers.co.kr/learn/courses/30/lessons/120823

# 직각삼각형 출력하기

# 문제 설명
# "*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 
# 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.

# 제한사항
# 1 ≤ n ≤ 10

n = int(input())
for i in range(1,n+1): print('*'*i)

처음에 문제가 이해가 잘 되지 않았었지만 결국 첫줄엔 하나

두번째 줄엔 둘... 이렇게 출력하면 된다는 것을 알고 금방 했다

range를 쓸 때 주의해야 할 점은 시작범위를 정해주지 않으면 0부터 시작한다는 점이다.

시작범위가 0이면 위 코드에선 print()가 출력되서 오답이 뜬다.

 

또 다르게 푸는 방법을 생각해 보았다.

# for문으로 answer에 값을 저장하는 방법
n = int(input())
answer=''
for i in range(1,n+1):
    answer += '*'*i + '\n'
print(answer)

# while문을 사용해 출력하는 방법
n = int(input())
count=1
a=""
while count<=n:
    a+= "*"*count+"\n"
    count+=1
print(a)

 

팀원들과 코드리뷰를 하며 느끼는 점은 각자 생각이 다른만큼 코드도 다르게 나온다는 점이다.

그부분이 한문제를 봐도 4가지 풀이가 나오니 코딩테스트 후 코드리뷰를 안 할수가 없다.

728x90
반응형
profile

코딩한걸음

@Joonyeol_Yoon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!