코딩한걸음
728x90
반응형

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


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

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

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

# 피자 나눠 먹기 (2)

# 문제 설명
# 머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 
# 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, 
# n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 
# 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

# 제한사항
# 1 ≤ n ≤ 100

# 최소공배수 물어보는건가?
pizza = [6,3,2,1]
n = 4
for i in pizza:
    if n%i==0: 
        answer = n//i
        break
print(answer)

# 제출용 함수
def solution(n):
    pizza = [6,3,2,1]
    for i in pizza:
        if n%i==0: 
            answer = n//i
            break
    return answer

# 하드코딩
def solution2(n):
    answer = 0
    if n%6==0: answer=n//6
    elif n%2==0: answer=n//2
    elif n%3==0: answer=n//3
    else : answer=n
    return answer

최소공배수 개념으로 문제를 풀어봤다

pizza의 약수를 정의해주고

for문으로 각각 n이 i로 나누어 떨어질때의 몫을 answer에 넣고 break

하드코딩은 for문대신 if문만으로 풀었을 때이다


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

# 외계행성의 나이

# 문제 설명
# 우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다.
# 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 
# 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 
# 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 
# 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 
# return하도록 solution 함수를 완성해주세요.

# 제한사항
# age는 자연수입니다.
# age ≤ 1,000
# PROGRAMMERS-962 행성은 알파벳 소문자만 사용합니다.

age = 23

answer = ''
arr = {'0':'a', '1':'b', '2':'c',
    '3':'d', '4':'e', '5':'f',
    '6':'g', '7':'h', '8':'i', '9':'j'}
age_str = str(age)
for i in age_str:
    answer += arr[i]
print(answer)

# 제출용 함수 - 딕셔너리 활용하기
def solution(age):
    answer = ''
    arr = {'0':'a', '1':'b', '2':'c',
        '3':'d', '4':'e', '5':'f',
        '6':'g', '7':'h', '8':'i', '9':'j'}
    age_str = str(age)
    for i in age_str:
        answer += arr[i]
    return answer

# 아스키코드로 풀기
def solution2(age):
    answer=""
    for i in str(age):
        answer += chr(97+int(i))
    return answer

딕셔너리와 아스키코드를 활용해서 풀어봤다.

팀원 중에 깔끔하게 푼 코드가 있어서 인상깊었음

 

def solution(age):
    answer = ''
    alphabet = 'abcdefghij'
    for i in str(age):
        answer += alphabet[int(i)]
    return answer

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

# 편지

# 문제 설명
# 머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 
# 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적으려고 하며, 
# 편지를 가로로만 적을 때, 축하 문구 message를 적기 위해 필요한 
# 편지지의 최소 가로길이를 return 하도록 solution 함수를 완성해주세요.

# 제한사항
# 공백도 하나의 문자로 취급합니다.
# 1 ≤ message의 길이 ≤ 50
# 편지지의 여백은 생각하지 않습니다.
# message는 영문 알파벳 대소문자, ‘!’, ‘~’ 또는 공백으로만 이루어져 있습니다.

message = "I love you~"
print(len(message))

# 제출용 함수
def solution(message):
    answer = len(message) * 2
    return answer

" "(스페이스바)도 문자열로 취급된다는게 중요한 포인


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

# 머쓱이보다 키 큰 사람

# 문제 설명
# 머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 
# 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 
# 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 
# return 하도록 solution 함수를 완성해보세요.

# 제한사항
# 1 ≤ array의 길이 ≤ 100
# 1 ≤ height ≤ 200
# 1 ≤ array의 원소 ≤ 200

array = [149, 180, 192, 170]
n = 167

answer = 0
answer = sum((1 if n < i else 0) for i in array)
print (answer)

# 제출용 함수
def solution(array,n):
    answer = sum((1 if n < i else 0) for i in array)
    return answer

# for문 이용해서 풀어보기
def solution2(array,n):
    answer=0
    for i in array :
        if n<i : answer=answer+1
    return answer

문제가 단순해서 한줄로 끝낼 수 있을까 고민하다가 

처음에는

answer += ((1 if n < i else 0) for i in array)

이렇게 해봣는데 안됬다.

이유를 생각해보니 for문에서 generator 형식으로 반환을 했다

그래서 혹시나 sum으론 되려나 시도해보니 문제 없었다.

728x90
반응형
profile

코딩한걸음

@Joonyeol_Yoon

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