Programmers 문제 풀이
1. 두 정수 사이의 합
def solution(a, b):
answer = 0
if a < b:
for num in range(a, b+1):
answer += num
elif a == b:
answer += a
else:
for num in range(b, a+1):
answer += num
return answer
2. 문자열을 정수로 바꾸기
def solution(s):
s = int(s)
return s
3. 정수 내림차순으로 배치하기
def solution(n):
n = str(n)
n = sorted(n, reverse=True) # reverse와 reversed의 차이?
answer = "".join(n)
answer = int(answer)
return answer
print(solution(1652))
4. 나머지가 1이 되는 수 찾기 - 월간코드챌린지시즌3
def solution(n):
answer = 0
x = 1
while x < n:
if n % x == 1:
answer = x
break
else:
x += 1
return answer
5. 음양 더하기 - 월간코드챌린지시즌2
def solution(absolutes, signs):
answer = 0
for i in range(0, len(absolutes)):
if signs[i] == True:
answer += absolutes[i]
else:
answer -= absolutes[i]
return answer
6. 예산 - Summer/Winter Coding(~2018)
def solution(d, budget):
count = 0
d.sort()
for i in range(0, len(d)):
if budget >= d[i]:
budget -= d[i]
count += 1
return count
'''
뽀인트 : if budget >= d[i]
'''
7. K번째 수 - 정렬
def solution(array, commands) :
answer = []
for i in range (len(commands)) :
new_array = array[commands[i][0]-1:commands[i][1]]
new_array.sort()
answer.append(new_array[commands[i][2]-1])
return answer
8. 같은 숫자는 싫어 - 스택/큐
def solution(arr):
stack = [10]
for i in range(0, len(arr)):
if arr[i] != stack[-1]:
stack.append(arr[i])
stack.pop(0)
return stack
9. 실패율 - 2019 KAKAO BLIND RECRUITMENT
def solution(N, stages):
fail = {} # 아래의 fail[key] = value 로 저장되고 있음
all_user = len(stages) # 전체 이용자 수
# 스테이지 레벨 만큼 반복 : i는 stage 레벨을 말함
for i in range(1, N+1):
this_user = stages.count(i) # 해당 스테이지 user수
if this_user == 0: # 해당 스테이지 user가 없으면 실패율 = 0
fail[i] = 0
else:
fail[i]= this_user / all_user # 해당 스테이지의 실패율
all_user -= this_user # user가 없으면 전체 사용자에서 빼줄 필요 없으므로 else 이후 부분에서만 this_user수를 빼줌
# 딕셔너리 정렬 : value 기준으로 정렬할 때 key 값만 얻는 목적
s_fail= sorted(fail, key=fail.get, reverse=True) # 이부분은 https://gomgomkim.tistory.com/26 참고함!
return s_fail
10. 소수 만들기 - Summer/Winter Coding(~2018)
from itertools import combinations
def solution(nums):
count = 0
random_nums = list(combinations(nums, 3))
random_nums_cnt = len(random_nums)
def is_prime_number(num):
if num==0 or num==1:
return False
else:
for n in range(2, (num//2)+1):
if num % n == 0:
return False
return True
for i in range(0, random_nums_cnt):
num = sum(random_nums[i])
if is_prime_number(num) == True:
count += 1
return count
'''
소수 : N이 N의 제곱근보다 크지 않은 어떤 소수로도 나눠지지 않는다. 수가 수를 나누면 몫이 발생하게 되는데 몫과 나누는 수, 둘 중 하나는 반드시 N의 제곱근 이하이기 때문입니다.
-> i * i ≤ n 일 때까지만 비교하면 됨
+ Tip!
#1. 소수 만들기 문항에서 'cominations'를 이용하면 훨씬 우아하게 풀 수 있습니다.
'from itertools import combinations' 로 import해서 사용하시면 되구요,
많이 사용되니 용례를 학습해보시면 좋을 것 같습니다.
(+ https://ourcstory.tistory.com/414 )
#2. 어떤 값이 소수인지 여부를 판단하는 간단한 함수
def is_prime_number(num):
if num==0 or num==1:
return False
else:
for n in range(2, (num//2)+1):
if num % n == 0:
return False
return True
'''