본문 바로가기

Algorithm/Programmers80

[프로그래머스] k번째수 / 자바스크립트 / JavaScript 🎫code ) function solution(array, commands) { var answer = []; for (let i=0; i {return(a-b)}); answer.push(list[commands[i][2]-1]); } return answer; } 📌 description ) 문제출처 : programmers.co.kr/learn/courses/30/lessons/42748?language=javascript 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [.. 2021. 1. 1.
[프로그래머스] 베스트앨범 / 파이썬 / Python / 해시 💫solutions ) 💬 defaultdict, heapq 모듈 사용 👩‍💻 code ) from collections import defaultdict import heapq def solution(genres, plays): gen = defaultdict(list) cnt = defaultdict(int) for i in range(len(genres)): heapq.heappush(gen[genres[i]], (-plays[i], i)) cnt[genres[i]] += plays[i] cnt_lst = [] for k, v in cnt.items(): cnt_lst.append((v, k)) cnt_lst.sort(key=lambda x: -x[0]) answer = [] count = 0 fo.. 2020. 11. 2.
[프로그래머스] 예상 대진표 / 파이썬 / Python / round() 💡solutions ) 💬 파이썬의 반올림 round( ) 함수를 사용해서 그 다음 라운드 진출 시 부여받는 숫자 번호를 구해내는 로직. 💬 이때 주의해야 할 점은 반올림한 자리의 앞자리 숫자가 짝수이냐 홀수이냐에 따라 반올림한 값이 달라진다는 점이다. 따라서 앞자리 숫자가 짝수인 경우는 반올림한 값에 +1씩 더해준다. 💬 아래 파이썬의 반올림 규칙을 참고하자. 🔶 파이썬의 round()함수는 사사오입 원칙을 따른다. 반올림 자리의 수가 5일 때 앞자리가 짝수 -> 내림 -> e.g.) round(4.5) = 4 앞자리가 홀수 -> 올림 -> e.g.) round(3.5) = 4 🎫code ) def solution(n, a, b): answer = 0 while a != b: answer += 1 r_.. 2020. 10. 7.
[프로그래머스] 짝지어 제거하기 / 파이썬 / Python 💡solutions ) 💬 처음 작성했던 코드에서 슬라이싱으로 문자열을 업데이트 했는데 시간초과 나서 통과하지 못했다. 💬 다음으로 구현한 코드는 stack을 만들어서 문자를 하나씩 append()로 넣어주고 짝을 만난 경우에는 pop()으로 제거해주었다. 💬 마지막 문자열의 길이를 재고 0이면 1리턴, 0이 아니면 0을 리턴한다. 🎫code ) 🔶 효율성 테스트에서 시간 초과로 통과하지 못한 코드 # 시간 초과 코드 def solution(s): if len(s) % 2 == 1: return 0 idx = 0 while True: if len(s) == 0: return 1 if idx > len(s) - 2: return 0 if s[idx] == s[idx + 1]: if idx == 0: s =.. 2020. 10. 6.
[프로그래머스] 땅따먹기 / 파이썬 / Python / 동적 프로그래밍(DP) 💡solutions ) 💬 동적프로그래밍 문제이다. 💬 1행(i+1이니)부터 시작해서 각 행열 요소마다, 그 이전 행에서 자신과 열이 같지 않은 열들 중 최댓값을 더해준다. 💬 마지막 행의 최댓값이 결과값이 된다. 🎫code ) def solution(land): for i in range(len(land)-1): land[i+1][0] = max(land[i][1:4]) + land[i+1][0] land[i+1][1] = max(land[i][0], max(land[i][2:4])) + land[i+1][1] land[i+1][2] = max(max(land[i][0:2]), land[i][3]) + land[i+1][2] land[i+1][3] = max(land[i][0:3]) + land[i+1.. 2020. 10. 5.
[프로그래머스] 가장 큰 정사각형 찾기 / 파이썬 / Python / 동적 프로그래밍(DP) 💡solutions ) 💬 동적 프로그래밍(DP)를 활용해서 문제를 풀것. 브루트 포스 알고리즘으로 풀면 효율성 테스트를 통과하지 못함 💬 동적 계획법(Dynamic Programming)이란? 동적 프로그래밍은 “전체 문제를 작은 문제로 단순화한 다음 점화식으로 만들어 재귀적인 구조를 활용해서 전체 문제를 해결하는 방식” 이다. 불필요한 계산을 줄이고, 효율적으로 최적해를 찾을 수 있다. 💬 분할 정복과 동일한 점은 전체 문제를 작은 단위로 문제로 푼다는 것지만, 차이점은 중복의 유무이다. 분할 정복은 작은 문제끼리 중복이 없고, 동적 프로그래밍은 중복이 있다. 🎫code ) def solution(board): r = len(board) c = len(board[0]) for i in range(1,.. 2020. 10. 4.