알고리즘 78

[프로그래머스] 내적 javascript

https://programmers.co.kr/learn/courses/30/lessons/70128 코딩테스트 연습 - 내적 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 programmers.co.kr [문제풀이] a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이) 같은 인덱스끼리 곱하고 sum을 구하여라 [코드] function solution(a, b) { let answer =0; for (le..

[프로그래머스] 포켓몬 javascript

https://programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr [문제 해석] 1. 포켓몬을 n/2 개를 가져갈 수 있다. 2. 가져갈 수 있는 조합 중에 가장 다양한 종류의 포켓몬을 가져가고 싶다. [코드] const solution = nums => { let answer = [...new Set(nums)], limit = nums.length / 2; return answer.length > limit ? limit..

[프로그래머스] 기능개발 javascript

🎇 풀이방법 1. 먼저 배포하는데 걸리는 시간을 배열로 만든다. 100에서 93을 빼고 1로 나눈 값 100에서 30을 빼고 30으로 나눈 값 ( 올림처리) [7, 3, 9] 2. 만든 배열에서 항목 비교 -> 뒤가 앞보다 작으면 그 다음을 비교해야하고 앞이 작으면 answer배열에 넣어야한다. 뒤가 앞보다 작으면 1씩 증가시키고 앞이 비로소 작아졌을때 answer배열에 넣는다. 🎇 코드 function solution(progresses, speeds) { let answer = [0]; let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index])); let maxDay = days[0]; for(le..

[프로그래머스] 완주하지 못한 선수 javascript

🎇 풀이방법 이중 for문을 돌리면 시간초과가 나온다. 그러므로 배열 두개를 sort를 한다. 이중에서 완주하지 못한 선수는 딱 한명이므로 순서대로 배열을 비교하면서 같은 인덱스에 같은 사람이 나오지 않으면 그사람이 완주하지 못한 사람이다. ✨ 코드 function solution(participant, completion) { let answer = ''; participant.sort(); //참가자 배열 정렬 completion.sort(); //완주자 배열 정렬 for(var i=0;i

[프로그래머스] 문자열 압축 javascript

https://programmers.co.kr/learn/courses/30/lessons/60057 🎇 풀이방법 이중 for문을 돌려야한다. "aabbaccc" 이라고 치자. 먼저 문자를 1개 단위로 자른다고 생각해보자. a와 그 다음 a를 비교한다 -> 같다. 그러면 앞에 2를 적는다. a와 b를 비교한다 -> 다르다. 그러면 2다음에 a를 적는다. b와 b를 비교한다 -> 같다. 2a다음에 2를 적는다. b와 a를 비교한다 -> 다르다. 2a2b를 적는다. a와 c를 비교한다 -> 다르다. 2a2ba를 적는다. .... 이렇게 만든 문자 1개 그다음 문자를 2개 단위로 자른다고 가정한다. aa와 bb를 비교한다. -> 다르다 aa를 적는다. bb와 ac를 비교한다 -> 다르다 aabb를 적는다 ....

[백준] 11279 최대힙 파이썬 풀이 (힙)

힙이란? 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진트리 최대힙과 최소힙 최소힙은 최소값이 가장 상위에 있고 부모 노드가 자식 노드보다 값이 작아야한다. 최대 힙은 최대값이 가장 상위에 있고 자식 노드가 부모 노드보다 값이 작아야한다. 문제 값을 넣고 0을 입력하면 배열에서 가장 큰 값을 출력해라 문제풀이 heapq에서는 최소 힙을 제공하기때문에 값을 -를 붙인 key값으로 heap에 넣는다. 그러면 가장 큰 값이 가장 상위에 올라가게된다. 그리고 출력할때는 value값으로 출력한다. 코드 import sys import heapq as hq numbers = int(input()) heap = [] for i in range(numbers): num = int(sys.stdin.re..

[백준] 2606 바이러스 파이썬 풀이(DFS와 BFS)

문제 컴퓨터끼리 연결된 쌍이 주어진다. 1번 컴퓨터가 웜 바이러스에 걸렸을때 연결된 모든 컴퓨터가 웜 바이러스에 걸린다. 바이러스에 걸리는 컴퓨터의 수를 출력해라 문제풀이 DFS로 푼다. 연결되어있는 노드를 끝까지 탐색해야하기 때문. 2차원 배열에 연결되어있는 값을 저장한다. 1번 노드에 연결된 모든 값을 visited_dfs에 저장하고 1번의 뺀 개수를 출력한다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # 정점의 연결정보 입력받기 n= int(input()) #정점 m = int(input()) #연결수 graph = [[] for _ in range(n+1)] for _ in range(m): a, b = map(int, inp..

[백준] 11399 ATM 파이썬 풀이 (그리디)

문제링크 문제 사람마다 atm기에 있는 시간이 다르다. 모든 사람이 돈을 인출하는데 필요한 시간의 합이 가장 작도록 만들어라 그리고 그 합을 출력해라 문제 풀이 시간이 주어질때 앞에서부터 작은 시간이 걸리는 순서대로 줄을 서면 합이 가장 작아진다. 입력 1을 봤을때 1 2 3 3 4 순서로 서야 최소의 값이 나온다. time에 시간을 리스트로 저장하고 오름차순으로 sort한다 time[i]번째 사람이 걸리는 시간은 그 전까지의 시간을 다 더한 것에 자신의 시간을 더한 시간이다. 코드 import sys num = int(sys.stdin.readline()) time = list(map(int,sys.stdin.readline().split())) time.sort() # print(time) sum =..