1. 콜라츠 추측
문제 설명
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.
예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.
제한 사항
- 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.
나의 풀이
def solution(num):
cnt = 0
while num > 1:
cnt += 1
if num%2 == 1:
num = num*3 + 1
else:
num /= 2
if cnt == 500:
cnt = -1
break
return cnt
기본적인 문제.. 너무 오랜만에 풀어서 다 까먹음 ㅠ
2. 없는 숫자 더하기
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
나의 풀이
def solution(numbers):
list = []
for i in numbers:
if i not in list:
list.append(i)
return sum([i for i in range(10)]) - sum(list)
for 문과 if 문을 통해서 고유 값만 가지는 리스트 list를 만든 뒤에
0 부터 9까지의 합계에서 고유값 리스트 요소의 합계를 빼서 구했다.
다른사람 풀이 + 개선점
나는 0 부터 9까지의 합계를 위와 같이 하나의 리스트형식으로 또 만들어서 구했지만,
아래와 같이 range (10) 의 합계를 구해도 동일하게 나온다.
sum(range(10))
문제를 다시 읽어보니 조건에 모든 요소가 다르다고 되어있었다..
중복 제거( 고유값 리스트 생성) 할 필요가 없었다..ㅎ
3.수박수박수박수박수?
문제 설명
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
나의 풀이
def solution(n):
answer = ''
for i in range(n):
if i%2==1:
answer += '박'
else:
answer += '수'
return answer
다른사람 풀이 + 개선점
"수박" * (n//2) + "수" * (n%2)
위와 같이 2로나누어 떨어지는 몫만큼 '수박'을 출력하고 나머지가 있으면 '수' 를 출력하도록 하는 방법이 더 효율적인 것 같다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Python Lv.1 나누어 떨어지는 숫자 배열 외 4문제 (2) | 2024.09.11 |
---|---|
[프로그래머스] MySQL Level1 경기도에 위치하는 식품창고 목록 출력하기 ,물고기 문제 (Level1~3) (2) | 2024.09.05 |
[프로그래머스] Python Lv.1 가장 많이 받은 선물 (1) | 2024.01.08 |
[프로그래머스] MySQL Lv.3 헤비유저가 소유한 장소 / Lv.4 주문량이 많은 아이스크림들 조회하기 (1) | 2024.01.07 |
[프로그래머스] Python Lv.1 문자열 나누기 / Lv.2 JadenCase 문자열 만들기 (0) | 2024.01.06 |