코딩한걸음
728x90
반응형

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


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

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

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

# https://school.programmers.co.kr/learn/courses/30/lessons/120814
# 피자 나눠 먹기 (1)

# 문제 설명
# 머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 
# 피자를 나눠먹을 사람의 수 n이 주어질 때, 
# 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 
# return 하는 solution 함수를 완성해보세요.

# 제한사항
# 1 ≤ n ≤ 100

# 피자 한판에 7조각
# n <= pizza*7
# 즉 pazza >= n/7 을 만족하는 자연수 최소값을 찾으면 된다
n = 8
a=0
if n%7 !=0:a=1
answer = n//7 + a

# 제출용 함수
def solution(n):
    a=0
    if n%7 !=0:a=1
    answer = n//7 + a
    return answer

# for문으로 풀기
def solution(n):
    for i in range(16):
        if i*7>=n : 
            answer = i
            break
    return answer

쉬운 문제라 정석으로 풀었다고 생각했는데 팀원이 더 괜찮은 코드를 들고 왔다

 

def solution(n):    
    answer = (n-1)//7 +1
    return answer

이런코드가 너무 맘에 든다

정석대로 하면서도 깔끔한 코드 너무 잘 만드셨다

별거 아닌거같은데도 잘 짠 코드라 생각했다


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

# 팩토리얼

# 문제 설명
# i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 
# 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 
# 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 
# return 하도록 solution 함수를 완성해주세요.
# i! ≤ n

# 제한사항
# 0 < n ≤ 3,628,800

# 팩토리얼을 직접 구현해보자
# for문으로 구현
factorial=1 
for i in range(1,n+1):
    factorial *= i
    if factorial > n : break
    else: answer = i
print(answer)


# 제출용 함수
def solution(n):
    factorial=1 
    for i in range(1,n+1):
        factorial *= i
        if factorial > n : break
        else: answer = i
    return answer

팩토리얼 구현자체는 쉽다.  for문으로 계속 곱해주기만 하면 된다.

대신 주어진 값 n보다 커지면 break를 해줬다.

for문이나 while문을 쓸 때 필요 이상으로 돌아가지 않도록

항상 주의해주면서 짜는게 좋다


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

# 숨어있는 숫자의 덧셈 (1)

# 문제 설명
# 문자열 my_string이 매개변수로 주어집니다. 
# my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

# 제한사항
# 1 ≤ my_string의 길이 ≤ 1,000
# my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

my_string = "1a2b3c4d123"

# in으로 조건 만들기
answer = 0
for i in my_string:
    if i in ['1','2','3','4','5','6','7','8','9']:
        answer+=int(i)

# 제출용 함수
def solution(my_string):
    answer = 0
    for i in my_string:
        if i in ['1','2','3','4','5','6','7','8','9']:
            answer+=int(i)
    return answer

# chr와 replace 써보기
def solution2(my_string):
    answer = 0
    for i in range(65,123):
        my_string = my_string.replace(chr(i),"")
    for i in my_string:
        answer +=int(i)
    return answer

먼저 in을 써서 if문의 조건을 구상해봤다

그리고 숫자를 넣으면 아스키코드에서 그에맞는 문자를 return하는

chr 함수를 써서 replace로 문자들을 지웠다


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

# 이진수 더하기

# 문제 설명
# 이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때, 
# 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

# 제한사항
# return 값은 이진수를 의미하는 문자열입니다.
# 1 ≤ bin1, bin2의 길이 ≤ 10
# bin1과 bin2는 0과 1로만 이루어져 있습니다.
# bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

# 이진수를 십진수로 변환
def bin_to_dec(bin):
    sum = 0
    bin = [int(i) for i in bin]
    bin.reverse()
    for i in range(len(bin)):
        if bin[i]==1: sum += 2**(i)
    return sum

# 십진수를 이진수로 변환
def dec_to_bin(dec):
    sum = ""
    if dec == 0: sum = "0"
    while True:
        if dec==0: break
        if dec%2 ==0:
            dec /= 2
            sum = "0" + sum
        else:
            dec = dec//2
            sum = "1" + sum
    return sum

def solution(bin1, bin2):
    answer = dec_to_bin(bin_to_dec(bin1)+bin_to_dec(bin2))
    return answer

십진수와 이진수의 변환은 int로 쉽게 할 수 있지만

기왕에 문제로 푸는거 함수로 만들어봤다.

확실히 직접 함수로 만들어보니깐 개념이해가 더 잘된다

 

728x90
반응형
profile

코딩한걸음

@Joonyeol_Yoon

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