분류 전체보기(52)
-
[프로그래머스] N으로 표현
동적계획법(Dynamic Programming)을 사용한 문제이다. 모든 값을 연산해봐야 한다는 것은 이해를 했다. 근데, 도대체 어떻게 구현해야 하는지 완전탐색과 다른것은 무엇인지... * 동적계획법을 공부하면서 완전탐색과는 완전히 다르다는 것을 알았다. 헷갈린다면, https://chyunlog.tistory.com/34 참고! 따라서 다른 분의 풀이를 해석해보기로 했다. 완전탐색처럼 도대체 컴퓨터 안에서 어떻게 돌아가는지 헷갈리지만... 주석을 꼼꼼히 달아놨으니 이해하는데 도움이 되길! function solution(N, number) { // 최솟값이 8보다 크면 -1을 return 합니다.라는 제한사항이 있기에 // 1~8까지의 경우의 수를 저장할 길이 8인 배열을 만든다. // 배열의 각 값..
2023.03.09 -
JavaScript 템플릿 리터럴(백틱``, 달러${})
템플릿 리터럴은 자바스크립트에서 문자열을 입력하는 방식이다. 아래와 같이 ""따옴를 사용하여 문자열을 표기했다면 const str = "따옴표로 정의한 문자열"; 템플릿 리터럴은 ``백틱(backtick)을 사용한다. const strBack = `백틱으로 정의한 문자열`; 백틱은 아래와 같은 특징이 있다. 1. 이스케이프 시퀀스(\n, \t 등) 없이 공백을 작성할 수 있다. // 따옴표ver console.log("오늘은 3월 9일\n최고기온은 22도이다."); // 오늘은 3월 9일 // 최고기온은 22도이다. // 백틱ver console.log(`오늘은 3월 9일 최고기온은 22도이다.`); // 오늘은 3월 9일 // 최고기온은 22도이다. 2. + 또는 , 연산자를 사용하지 않아도 문자열을 ..
2023.03.09 -
[프로그래머스] 피로도
완전탐색문제에 도전했다! 1.현재 피로도 2.탐험전: 각 던전의 최소 필요 피로도 3.탐험후: 각 던전의 소모 피로도 위 세 값이 주어지고, 이 때 유저가 탐험할 수 있는 최대 던전 수를 return 던전을 1->2->3 , 2->1->3 처럼 순서없이 돌 수 있다. 모든 던전탐방 경우의 수를 해보고, 가장 많은 던전을 돌 수 있는 경우의 수를 뽑으면 됨 ! function solution(k, dungeons) { let tired =[] // 방문한 던전 수 const n = dungeons.length // 던전의 총 개수 //각 던전 방문여부(방문: 1, 아직: 0) let ch = Array.from({ length: n }, () => 0); function dfs(now, game){ for..
2023.03.03 -
스택과 큐
자료구조 중 스택과 큐는 많이 들어보았지만, 항상 뭐가 뭔지 헷갈렸다. 이번 기회에 제대로 확실히 정리해보고자 한다! 일단 자료구조란 배열처럼 데이터를 저장하고 관리할 수 있는 것이다. 스택과 큐는 데이터를 어떻게 저장하고 관리하는지 알아보자 ! 스택은 후입선출 js에서 push()는 삽입, pop()은 삭제 함수이다. ex) 인터넷의 뒤로가기(그동안 쌓였던 것들의 뒷부분 부터 차례로 뒤로가기 됨) 큐는 선입선출 queue에 삽입하는 것은 enqueue라 하고, 삭제하는 것은 dequeue라고 한다. 마찬가지로 push()는 삽입, shift()는 가장 앞의 것 삭제 함수이다. ex) 은행창구 번호표(들어온 순서대로 나감) 시간복잡도에 대해 이야기 하자면 push()와 pop()은 O(1)의 시간복잡도를..
2023.03.02 -
[프로그래머스] 프린터
ㅊ맨 앞에 있는 파일이 가장 높은 중요도여야 출력할 수 있음 가장 높지 않다면, 맨 뒤로 이동 => 프린터 순서를 하나의 통로로 생각하면 편하다. 한 칸씩 앞으로 이동하고, 더 이상 이동할 곳이 없다면 가장 뒤로 이동! 배열 형태로 저장된 파일들을 앞에서 빼고, 뒤에 이어 붙이는 것은 이 두 함수를 사용하면 된다 앞에서 빼기: shift() 뒤에 이어붙이기: push(붙일 파일) 1. 원하는 값이 인쇄될 때까지 반복 2. 현재 가장 큰 중요도 max값 찾기 3. 가장 앞의 값 빼기 4. max와 가장 앞의 값이 같으면 4-1. 인쇄횟수 num +=1 4-2. 방금 인쇄된 것이 원했던 인쇄물이면 끝 5. max와 가장 앞의 값이 다르면 5-1. 맨 뒤에 다시 붙임 5-2. 맨 뒤로 이동한 것이 원했던 인쇄..
2023.03.02 -
[프로그래머스] 베스트앨범
ㅇㄹㅇㄹ 재생횟수가 많은 장르 순으로 노래 두 개씩 모아서 베스트 앨범을 만든다. 1. 장르 별 재생횟수 2. 장르 별 재생이 많이 된 노래 두 개 3. 재생횟수가 많은 장르부터 노래 두 개씩 앨범에 싣기 * 노래가 한 개라면 하나만 싣기 코드 주석으로 설명! function solution(genres, plays) { let answer=[] let json = [] //genres, plays배열을 {genre:~, play:~, idx:~} 형태로 변형 let hotMap = new Map() // 장르별로 재생횟수가 많은 순 idx 저장 let genreSum = [] // 장르 별 재생횟수 합 {genre:~, sum:~} let genreSet = new Set(genres) //장르의 종류..
2023.03.02 -
[프로그래머스] 폰켓몬
n개의 폰켓몬의 종류번호가 주어짐 [3,1,2,3] 처럼, 이 중 n/2개의 폰켓몬을 가져갈 수 있을 때 가장 많은 종류의 폰켓몬을 가져갈 때, 종류의 수 return 폰켓몬을 종류별로 나누었을 때, 만약, 종류의 수가 n/2보다 크다면 가져갈 수 있는 종류의 수는 n/2일 것이다. 만약, n/2가 종류의 수보다 크다면 가져갈 수 있는 종류의 수는 전체 종류 수 일 것이다. => n/2와 폰켓몬 종류의 수 중 더 작은 값을 return ! 해시를 사용해서 푼! function solution(nums) { let map = new Map() for(let i =0; imap.size?map.size:nums.length/2 } 생각해보니, 폰켓몬의 종류의 수만 구하면 되는 것!.... 더 간단히 set을..
2023.03.02 -
[프로그래머스] 완주하지 못한 선수
participant 배열에는 포함되지만, completion배열에는 포함되지 않은 선수 이름을 return 하는 문제 * participant가 completion보다 +1 길다 1. 두 배열을 sort 2. index 0부터 차례로 비교하여 값이 달라지는 index를 찾는다 3. participant[index]의 사람이 완주하지 못한 선수! function solution(participant, completion) { participant.sort() completion.sort() for(let i=0; i participant와 completion에 모두 있는 사람은 value가 0, participant에 만 있으면 value가 1이다. 3. map에서 value가 1인 key값을 retur..
2023.03.02 -
해시란? Map과 Object의 차이
해시해시 말은 많이 들어봤지만 정확히 무엇인지 모르겠어서 글로 정리해보고자 한다 !! 해시 테이블이란? key-value로 이루어져 값을 찾거나, 추가하거나, 제거하는데 빠름(배열보다) 순서가 없음(배열은 index로 순서가 있지만, hash는 아님) Js에는 Map, Object가 있음(객체에서는 key로 문자열만 사용 가능) Object의 키는 Strings이며, Map의 키는 모든 값을 가질 수 있음(객체, 함수도 가능) Object는 크기를 수동으로 추적해야하지만, Map은 크기를 쉽게 얻을 수 있다.(Map.size 속성) Map은 삽입된 순서대로 반복된다. 객체(Object)에는 prototype이 있어 Map에 기본 키들이 있다. (이것은 map = Object.create(null) 를 사..
2023.03.01 -
[프로그래머스] 괄호 회전하기
괄호가 맞게 열고 닫힌 문자열인지 확인하는 문제이다. "[({})]"이 입력값이라면, "({})][" 처럼 위치를 이동하며(원래위치로 돌아올 때 까지) 괄호가 제대로 열리고 닫힌 경우는 몇 번(횟수)인지 return 뒤 에서부터 비교한다고 하면 만약, 괄호가 "(" 다음 ")" 이라면 "({})" 순이라면 1. ")"와 "}"는 짝이 맞지 않음 > ")"을 체크해야 할 리스트에 저장 2. "}"와 "{" 짝 맞음 3. "(" 짝 없음, 하지만 체크할 리스트에 있는 ")"와 짝맞음 와 같은 방식으로 해결하였다. * dict에 "{", "(", "["가 key로 존재하지 않는 이유! 제대로 된 괄호라면 "}", ")", "]"가 먼저 나와서 check(체크해야 할 리스트)에 저장되어 있어야 함 functio..
2023.02.22