-
[프로그래머스] 알고리즘 난이도 중/중상 12문제 (Python) -5Algorithm 2022. 2. 20. 23:17
1) 예산
https://programmers.co.kr/learn/courses/30/lessons/12982
def solution(d, budget): answer = 0 for i in sorted(d): budget -= i # budget에서 d의 작은수부터 빼줌 if budget < 0: break # 0보다 작으면 break answer += 1 return answer
2) 최대공약수와 최소공배수
https://programmers.co.kr/learn/courses/30/lessons/12940
- for문 사용
def solution(n, m): answer = [] for i in range(min(n,m), 0, -1): # n,m 중 작은 수 부터 0까지 1까지 -1하면서 반복 if n % i == 0 and m % i == 0: answer.append(i) break for i in range(max(n,m), (n*m)+1): # n,m 중 큰 수 부터 n*m한 숫자까지 반복 if i % n == 0 and i % m == 0: answer.append(i) break return answer
- math 함수 이용
3) K번째수
https://programmers.co.kr/learn/courses/30/lessons/42748
def solution(array, commands): answer = [] for i in range(len(commands)): start = commands[i][0]-1 # i (인덱스가 아니라 순서니까 -1 해줌) end = commands[i][1] # j idx = commands[i][2]-1 # k (인덱스가 아니라 순서니까 -1 해줌) temp = array[start:end] temp.sort() answer.append(temp[idx]) return answer
4) 나머지가 1이 되는 수 찾기
https://programmers.co.kr/learn/courses/30/lessons/87389
def solution(n): for i in range(1, n+1): # n이 10일 경우 1부터 10까지 if(n % i == 1): return i
5) 소수 찾기
https://programmers.co.kr/learn/courses/30/lessons/12921
- 1차 시도: 런타임 에러 발생 코드
def solution(n): answer = 0 for n in range(2, n+1): for i in range(2, n): if n % i == 0: break else: answer += 1 return answer
- 2차 시도
6) 실패율
https://programmers.co.kr/learn/courses/30/lessons/42889
- 1차 시도
7) 체육복
https://programmers.co.kr/learn/courses/30/lessons/42862
def solution(n, lost, reserve): los = set(lost) - set(reserve) res = set(reserve) - set(lost) for i in res: # ex) i = 3 if i-1 in los: los.remove(i-1) # ex) i-1 = 2 elif i+1 in los: los.remove(i+1) return n-len(los)
8) 포켓몬
https://programmers.co.kr/learn/courses/30/lessons/1845
def solution(nums): a = len(nums) // 2 # 고를 수 있는 횟수 b = len(set(nums)) # 포켓몬 종류 return a if b > a else b
9) 비밀지도
https://programmers.co.kr/learn/courses/30/lessons/17681
- 1차 시도
10) 키패드 누르기
https://programmers.co.kr/learn/courses/30/lessons/67256
- 1차 시도 (실패)
2,5,8,0 키패드를 누를 때 L과 R이 반대로 나오는 문제
def solution(numbers, hand): answer = '' nowLeft = 0 nowRight = 0 for i in range(len(numbers)): if numbers[i] == 1 or numbers[i] == 4 or numbers[i] == 7: nowLeft = numbers[i] answer += "L" elif numbers[i] == 3 or numbers[i] == 6 or numbers[i] == 9: nowRight = numbers[i] answer += "R" else: if nowLeft - numbers[i] > nowRight - numbers[i]: answer += "R" elif nowLeft - numbers[i] < nowRight - numbers[i]: answer += "L" else: if hand == "right": answer += "R" else: answer += "L" return answer
- 2차 시도
11) 다트게임
https://programmers.co.kr/learn/courses/30/lessons/17682
- 1차 시도 (4,5,6,7번에서 런타임 에러 발생)
문자열로 구성된 dartResult를 리스트로 만들었는데, 정수 10의 경우 1과 0으로 나뉘어 이 부분을 예외처리하는 과정에서 런타임 에러가 발생한 것 같다.
- 2차 시도 (테스트 4,5,6,7이 런타임 에러였는데, 5,6,7은 해결)
질문하기에 나와 같은 테스트 케이스의 런타임 에러가 발생하는 경우가 있어서 Parameters "10D4S10D" / return 204 추가해서 코드 실행 후 제출 했다.
- 3차 시도
12) 크레인 인형뽑기 게임
https://programmers.co.kr/learn/courses/30/lessons/64061
def solution(board, moves): answer = 0 temp = [] for i in moves: for j in range(len(board[0])): # 정사각 격자니까 board[0]의 길이로 통일 if board[j][i-1] != 0: temp.append(board[j][i-1]) board[j][i-1] = 0 # temp에 담은 숫자는 0으로 바꿔줌 break if len(temp) >= 2 and temp[-2] == temp[-1]: # 길이가 2 이상일 경우 / temp의 마지막 2개가 같을 경우 answer += 2 temp.pop() temp.pop() return answer
'Algorithm' 카테고리의 다른 글
[백준] 1541번: 잃어버린 괄호(그리디 알고리즘) - Python (0) 2022.03.03 [백준 알고리즘] 10773번: 제로(스택) - Python (0) 2022.02.28 [프로그래머스] 알고리즘 난이도 중하 8문제 (Python) -3 (0) 2022.02.12 [프로그래머스] 알고리즘 기초 10문제 (Python) -2 (0) 2022.02.11 [프로그래머스] 알고리즘 기초 10문제 (Python) (0) 2022.02.11