[프로그래머스]

[코딩테스트 스터디 Week1] 코딩테스트 입문

EYZ27 2022. 12. 27. 11:32

1) 숫자 비교하기 https://school.programmers.co.kr/learn/courses/30/lessons/120807

 

문제 설명
정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요.

def solution(num1, num2):
    if num1 == num2:
        answer = 1
    else:
        answer = -1
    return answer
    
# if문 활용: 두 수가 같은지 아닌지 여부에 따라 answer 값을 달리함

2) 삼각형의 완성조건 (1) https://school.programmers.co.kr/learn/courses/30/lessons/120889

 

문제 설명

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.


제한사항
  • sides의 원소는 자연수입니다.
  • sides의 길이는 3입니다.
  • 1 ≤ sides의 원소 ≤ 1,000
def solution(sides):
    long_side = sides.pop(sides.index(max(sides)))
    # sides 리스트에서 가장 큰 수를 끄집어내고, 끄집어낸 수를 long_side에 할당
    if long_side < sum(sides):
    	# 나머지 두 개 값이 long_side보다 크다면 1
        answer = 1
    else:
        answer = 2
    return answer

3) 각도기 https://school.programmers.co.kr/learn/courses/30/lessons/120829

 

문제 설명

각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

  • 예각 : 0 < angle < 90
  • 직각 : angle = 90
  • 둔각 : 90 < angle < 180
  • 평각 : angle = 180

제한사항
  • 0 < angle ≤ 180
  • angle은 정수입니다.
def solution(angle):
    answer = 1
    if angle == 90:
        answer = 2
    elif 90<angle<180:
        answer = 3
    elif angle == 180:
        answer = 4
    return answer
    
# else 부분은 if문 앞에 위치시켜도 되...지만 명확하게 하면 좋긴 하겠죠...

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

 

문제 설명

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


제한사항
  • 1 ≤ n ≤ 100
def solution(n):
    answer = n//7
    if n%7 > 0:
        answer += 1
    return answer
    
# 나머지가 있는 경우 한판이 더 필요함

5) 배열 두배 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/120809

 

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.


제한사항
  • -10,000 ≤ numbers의 원소 ≤ 10,000
  • 1 ≤ numbers의 길이 ≤ 1,000
def solution(numbers):
    answer = []
    for i in numbers:
        answer.append(i*2)
    return answer
    
# numbers 리스트 내 각 요소 i마다 2배하고 answer 리스트에 삽입

# 아래와 같이 한 줄로 작성 가능
def solution(numbers):
	return [i*2 for i in numbers]

6) 피자 나눠 먹기 (3) https://school.programmers.co.kr/learn/courses/30/lessons/120816

 

문제 설명

머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.


제한사항
  • 2 ≤ slice ≤ 10
  • 1 ≤ n ≤ 100
def solution(slice, n):
    answer = (n-1)//slice + 1
    return answer
    
# n이 slice의 배수일 경우와 아닌 경우에 동시에 적용하기 위해
# (n-1)//slice를 사용하고 1을 더함

7) 문자 반복 출력하기 https://school.programmers.co.kr/learn/courses/30/lessons/120825

 

문제 설명

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.


제한사항
  • 2 ≤ my_string 길이 ≤ 5
  • 2 ≤ n ≤ 10
  • "my_string"은 영어 대소문자로 이루어져 있습니다.
def solution(my_string, n):
    answer = ''
    for i in my_string:
        answer+=i*n
    return answer
    
# 문자열 내에서 for문 돌려서 각 문자를 n만큼 곱해서 answer에 더해준다.

8) 최댓값 만들기 (1)  https://school.programmers.co.kr/learn/courses/30/lessons/120847

 

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.


제한사항
  • 0 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers의 길이 ≤ 100
def solution(numbers):
    numbers.sort()
    return (numbers.pop())*(numbers.pop())
    
# numbers 리스트를 정렬하고, 뒤에서부터 두 요소를 꺼내 곱한다
# 정렬된 리스트에서 뒤로갈수록 수가 커지니까!

9) 짝수의 합 https://school.programmers.co.kr/learn/courses/30/lessons/120831

 

문제 설명

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.


제한사항

0 < n ≤ 1000

def solution(n):
    answer = 0
    for i in range(0,n+1,2):
        answer += i
    return answer
    
# 0에서 n까지 2개씩 넘어가며 answer에 i를 더한다.
# n이 1일 수 있기 때문에(answer = 0) 0부터 시작하는 것이 맞다.

# 아래와 같이 한줄로 표현할 수 있다.
def solution(n):
	return sum([i for i in range(0,n+1,2)])

10) 머쓱이보다 키 큰 사람 https://school.programmers.co.kr/learn/courses/30/lessons/120585

 

문제 설명

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


제한사항
  • 1 ≤ array의 길이 ≤ 100
  • 1 ≤ height ≤ 200
  • 1 ≤ array의 원소 ≤ 200
def solution(array, height):
    answer = 0
    for i in array:
        if i - height > 0:
            answer+=1 
    return answer
    
# array에서 머쓱이의 키(height)와 하나씩 비교.
# 차이가 양수일 때 머쓱이의 순서는 하나씩 뒤로 밀린다.

# 아래와 같이 한줄로 쓸 수 있다.
def solution(array, height):
	return sum([1 for i in array if i - height > 0])

11) 짝수 홀수 개수 https://school.programmers.co.kr/learn/courses/30/lessons/120824

 

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항
  • 1 ≤ num_list의 길이 ≤ 100
  • 0 ≤ num_list의 원소 ≤ 1,000
def solution(num_list):
    even, odd = 0, 0
    for i in num_list:
        if i%2 == 0:
            even += 1
        elif i%2 == 1:
            odd += 1
    return [even, odd]
    
# num_list의 요소마다 홀수/짝수 여부 판단해서 각 변수에 1씩 더한다.

12) 분수의 덧셈 https://school.programmers.co.kr/learn/courses/30/lessons/120808

 

문제 설명

첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1, 두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항
  • 0 <denum1, num1, denum2, num2 < 1,000
def solution(denum1, num1, denum2, num2):
    num3 = num1*num2				# 결과값의 분모는 num1과 num2의 곱셈
    denum3 = (denum1*num2)+(denum2*num1)	# 분자는 1의 분자와 2의 분모, 2의 분자와 1의 분모를 곱하고 더함
    i = 1
    while i <= num3 and i <= denum3:		# 결과값의 분모와 분자의 최대공약수를 구해서 약분
        if num3 % i == 0 and denum3 % i == 0:	# 1부터 시작해 분모 혹은 분자의 수까지
            gcd = i				# 약수의 값을 계속해서 gcd에 할당, 마지막 수가 최대공약수
        i+=1
    answer = [denum3/gcd, num3/gcd]		# 분자와 분모를 리스트화
    return answer

 

 


Week 1 과제



Q1) 콜라 문제 https://school.programmers.co.kr/learn/courses/30/lessons/132267

 

문제 설명

콜라를 받기 위해 마트에 주어야 하는 병 수 a, 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수 b, 상빈이가 가지고 있는 빈 병의 개수 n이 매개변수로 주어집니다. 상빈이가 받을 수 있는 콜라의 병 수를 return 하도록 solution 함수를 작성해주세요.


제한사항

  • 1 ≤ b < a  n ≤ 1,000,000
  • 정답은 항상 int 범위를 넘지 않게 주어집니다.
def solution(a, b, n):
    answer = 0			# 머쓱이가 갖고 있는 빈병의 개수(n)가 주어야 하는 빈병의 수(a)보다 큰 동안만
    while n >= a:		# 즉, 머쓱이가 빈병을 마트에 줄 수 있는 동안만
        coke = ((n//a)*b, n%a)	# (마트에 빈병을 주고 새로 받는 콜라의 수, 마트에 주고 남은 빈병)
        n = (n//a)*b + n%a	# 머쓱이가 갖고 있는 병의 개수(n) 업데이트(새로 받은 병 + 남은 병)
        answer += coke[0]	# 머쓱이가 마트에서 받을 때마다 answer에 그 수만큼 더해줌
    return answer

Q2) 두 정수 사이의 합 https://school.programmers.co.kr/learn/courses/30/lessons/12912

 

문제 설명

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

제한 조건
  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.
def solution(a, b):
    if a > b: a, b = b, a 
    return sum(list(range(a,b+1)))
    
# range() 함수의 경우 시작 수와 종료 수에 따라 방향이 바뀌어야 하므로,
# a와 b를 우선 작은 수 = a, 큰 수 = b 순서로 정렬해준다.
# a와 b 사이의 수를 리스트화하고, 리스트를 더해준다.