[코딩테스트 스터디 Week1] 코딩테스트 입문
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 사이의 수를 리스트화하고, 리스트를 더해준다.