프로그래머스 문제이중 우선순위 큐에 대한 구현을 하는 문제였습니다.JS에서는 편리하게도 sort() 함수가 제공되어 어렵지 않게 해결할 수 있었습니다.다음의 방식은 push와 sort로 인해 기존의 배열을 통해서 구현한 우선순위 큐와도 같다.하지만 class를 이용하여
프로그래머스 문제처음에는 모든 경우의 수를 모두 만들어 보면서 완전탐색으로 해결하려 했습니다.하지만 해당 방식은 시간복잡도가 너무 높아 실패 했습니다. 따라서 다음과 같은 생각을 따라가기로 했습니다.가장 곱이 높은 경우는 얼마인가?일반적으로 두 수의 합이 고정되어 있는
프로그래머스 문제처음 생각한 방법은 야근지수를 최소화 하기 위해서, 야근 1시간 수행 할때마다 전체 시간에서 한시간씩 줄여가면서 매번 정렬을 다시 수행해 주었습니다.하지만 이경우 시간초과가 발생했으며, 여기서 시간을 더 줄일 수 있는 방법이 필요함을 알게 되었습니다.그
문제 링크 프로그래머스 문제 풀이 문제를 보고 직관적으로 크게 어렵지 않게 아이디어를 떠올릴수 있는 문제였습니다. 다음과 같이 여러 노드들의 연관관계중, 덩어리 별로 그 개수를 파악하는 문제입니다. dfs방식을 통해 현재 노드와 연결된 모든 노드를 완전탐색을 통
프로그래머스 문제이중포인터를 이용하여 B가 가장 많이 이길 수 있어야 한다.우선 두개의 배열을 모두 정렬해준다.그 이후 while문에서 이중 포인터로 이동한다.여기서 발생하는 경우는 크게 두가지이다.1\. A가 더 크다 -> 이때, B의 index는 고정하고 A가 더
프로그래머스 문제현재 시점에서 가장 최적의 경우를 계산해야하느 문제이다. 해당 문제는 현 시점에서 3가지 경우가 존재한다.1\. 현재 카메라 위치가 curIn과 curOut 사이에 있는경우 -> 이때는 변경이 없다.2\. curOut이 현재 cameraPosition보
프로그래머스 문제문제를 보자마자 든 풀이 방식은 그리디를 이용한 방식이다.첫번째 station을 입력받은 이후, 그 직후 이전까지의 상황에 대해서만 올바른 결정을 했다면, 그 이후부터는 그 결정에 대해서는 더이상 신경쓰지 않아도 되기 때문이다.따라서 두가지 중요한 점을
프로그래머스 문제여러가지 genres의 종류가 들어올 수 있으며, 이 때, O(1) 이라는 적은 시간복잡도로 찾기 위해서는 hash를 사용하면 손쉽게 해결이 가능하다. hash map을 구성할때, 들어가야할 정보들은 다음과 같다.다음과 같이 들어가게 되며, 정렬을 두번
프로그래머스 문제다소 복잡한 예외처리와 DFS를 통해서 효율적으로 문제를 해결해야 하는 문제 입니다. 보자마자는 아니지만 예상할 수 있는 가장 시간초과가 발생할 것이라 예상되는 테스트 케이스는 다음과 같습니다. 이때 , 발생하는 문제는 첫 bannedID의 모든 경우의
프로그래머스 문제보자마자 복잡한 문자열에 대해서 빠른 찾아야 하는 알고리즘을 적용시키기 위해서는 hash 를 사용해야 한다는 생각이 들었다. 하지만 다음과 같은 풀이를 작성하였을때, 효율성 판단 테스트 케이스에서 모두 탈락하였는데,getObjectSize를 사용할때,
프로그래머스 문제제한조건의 범위가 너무 크고, 효율성테스트를 동시에 겸하고 있기 때문에완전탐색이 아닐것이라는 생각을 먼저 하게 되었다. 그렇다면 가장 합리적인 알고리즘은 dp 알고리즘이었다. 크게 두가지 경우의 수로 나누게 된다. 첫번째 스티커를 제거한다.두번째 스티커
프로그래머스 문제입력값으로 주어지는 stone의 크기가 굉장히 크므로 완전탐색은 불가능하다.따라서 완전탐색이 아닌 다른 알고리즘을 찾아야만 한다. 제대로 해결하지 못해서 서칭해본결과 이분탐색방법을 통해서 해결해야 하는것을 알수 있었다.
프로그래머스 문제노드를 순회하며, Tree 구조의 가장 마지막 위치인 leaf 의 개수를 찾는 문제이다. DFS가 아닌 BFS로 푸는것이 합당해 보이는 문제이다. 하지만 다음과 같이 코드를 작성했을때ㅡ,다음과 같은 문제가 발생하게 되었는데, 아마도 bfs 내부의 for
프로그래머스 문제처음 문제를 보자마자 든 생각은 dfs를 통해서 모든 노드가 가능한 edge를 연결한 후, 그중 비용이 가자 적었던 경우를 골라내는것이 옳다는 생각이 들었다. 하지만 이 경우 100^100 이라는 막대한 테스트 케이스가 발생하므로 무제가 있다고 판단했다
프로그래머스 문제처음에는 dfs로 풀었으며, 가장 먼저 발견한것을 종료 조건으로 걸었을때,발생한 문제는, 알파벳 순서로 도착하기 위해서인데,해당 문제를 해결하기 위해서 for문의 배열의 순서를 tickets.를 sort 함으로서 해결하였다.
프로그래머스 문제Queue라기 보다는 배열을 효과적으로 사용해야만 풀 수 있는 문제 이다. 주의해야할 점들을 먼저 모두 작성해보았다.0초에 시작인 여러가지 시간이 동시에 들어오는 경우, 가장 시간이 짧은 값이 들어와야 한다.그렇다면 현재 진행중인 작업의 종료시간 전에
프로그래머스 문제전통적인 그래프 문제라고 볼 수 있을것 같다.중요한 점은 시작지점과 종료 지점이 정해져 있으며,그 사이에 중점만 변경시켜 가면서 가장 적은 값을 찾아내면 되기 때문에,graph 간선을 모두 만들어주고, start, end를 기준으로 모든 경로를 찾아준다
프로그래머스 문제이분탐색을 통해서 문제를 해결했다.처음에는 이분탐색이 아닌 완전탐색을 이용해서 문제를 해결하려고 했으나, 너무나 큰 크기로 인해서 실패했다.하지만 여러 테스트 케이스를 넣으면서 규칙성을 발견하게 되었다.그건 적당한 수를 찾아서 times를 나눈값들이 n
프로그래머스 문제카카오에서 좋아하는 복잡한 문자열에 대한 처리이다.다행스럽게도 JS에서는 문자열처리가 쉬운편이다.따라서 시간에 관한 문자열들의 경우 내가 관리하기 편한 시간으로 먼저 정렬후 진행한다.그후 자주 쓸것같은 함수들을 미리 구현한 후 풀이를 진행하면 어렵지 않
프로그래머스 문제문제가 다소 난해하여 푸는데 꽤나 많은시간이 걸렸다. 특히 회전시키는 부분이 어려웟는데, 다시 생각해보니 열쇠의 회전 부분은 3번만 진행하면 된다. 굳이 모든 위치에서 회전을 확인할 필요가 없으므로 회전 시킨 이후 큰 배열을 선언후 확인하면 풀 수 있다
프로그래머스 문제DFS를 통해서 해결한 문제 입니다.트리를 만들어서 한번의 시행마다 curNode가 받아야 할 돈을 더하여 줍니다.
프로그래머스 문제그래프 문제 입니다. 처음 results간의 관계를 명시한 arr를 생성합니다.그 후 mid 를 고정한 후, 모든 node에 관한 관계도를 만들어야 합니다.
프로그래머스 문제다소 어려운 문제였습니다. 다음에 유의하여 문제를 풀어야만 합니다.1\. 꼭 살아남는 풍선은 어떤것인가?2\. 살아남는 풍선들을 기준으로 나눌수 있는 3 영역에서는 어떤 규칙을 고려하여 풍선이 살아남는가?3\. 흩어지는 방향으로 정렬이 되어 있는것이 오
프로그래머스 문제가장 긴 부분수열의 합을 만들어 낼 수 있다면 쉽게 풀 수 있는 문제!
프로그래머스 문제알고리즘에서 굉장히 유명한 문제인 배낭 문제 와 유사한 문제 입니다.dp를 통해서 어떤 시점에서 가질 수 있는 거스름에 대한 정보를 저장합니다.
프로그래머스 문제문제를 이해하기는 크게 어렵지 않다.두가지 큰 조건을 만족시키면 되는데, 그 두가지는1\. 이진트리를 만들것2\. 이진트리에 따른 순회를 만족시킬것constructor \- index, x, y, left, rightinsert \- leftInse
프로그래머스 문제당연하지만 문제를 포자마자 보이는 단순한 풀이로는 시간초과가 발생하게 된다.역시나 맞이하게된 시간초과...그다음 사용하게 된 방법은 누적합 입니다.적절한 좌표값들을 기준으로, 계산이 될 degree들을 배열에 만들어 둔 뒤 행과 열을 반복하며 최종적으로
프로그래머스 문제(https://school.programmers.co.kr/learn/courses/30/lessons/81303for문을 반복사용하여 구현을 하려 했지만, 결국 시간초과로 인해서 실패하게된 문제 입니다.연결리스트를 이용한 풀이 를 참고하여
프로그래머스 문제(https://school.programmers.co.kr/learn/courses/30/lessons/81303첫 시도는 bfs를 이용해 destination 으로부터 얼마나 떨어져 있는가를 확인해 보았다. 하지만 coredumped가 발생
프로그래머스 문제(https://school.programmers.co.kr/learn/courses/30/lessons/81303첫 시도는 단순 구현이었습니다.첫번째 케이스는 크게 어렵지 않게 풀 수 있었으며 삭제 로직을 구현함에 있어서 어려움이 있었습니다.
프로그래머스 문제(https://school.programmers.co.kr/learn/courses/30/lessons/81303이전에 풀었던 문제지만 다시 푸니 못풀었던 문제였습니다.중요한 키 포인트는 정렬을 다음과 같이 만들어 내는것입니다.같은 앞자리 수
프로그래머스 문제크게 생각한 알고리즘은 2개이다.dp를 이용해 한 시점에 얼마만큼 방송을 하고 있는지 담는다. 그 후 누적합을 통해서 반복하는 경우를 감소시킨다.
프로그래머스 문제dfs로 푸는건 확실해 보였다. 하지만 그 다음 노드로 들어갈때, 어떻게 관리하냐가 중요했다.지금까지 풀었던 경험으로는 node에 방문후 다시 재방문은 항상 막아두었기 때문에 특히나 어려웠다. 이번 문제 풀이에서 가장 중요했던 부분은 possibleNo
프로그래머스 문제완전탐색으로 풀려고 했으나, 그럼에도 불구하고 시간초과가 발생하여 다른분의 풀이를 참고하게 되었다.쉽게 이해가 가능하도록 설명해 주셔서 어렵지 않게 응용할 수 있었다.중요한 포인트는 두가지인데linerWeak라는 배열에다가 2배의 길이로 weak를 만들
프로그래머스 문제(https://school.programmers.co.kr/learn/courses/30/lessons/81303첫시도는 dfs로 풀었다.d -> l -> r -> u 순서로 정렬k보다 클때 종료dist에 따른 종료 시점 확인하지만 이와 같은
프로그래머스 문제첫번째 풀이는 완전탐색을 통해서 구현했습니다.길이가 2인 집합을 만들면서 교집합의 개수를 구하려고 했습니다.두번째 시행에는 다음과 같은 코드를 사용하였다.
프로그래머스 문제첫 시도는 사실 완전탐색으로 구현으로 풀려고 했다.당연히 아니었다... 어쩐지 너무 쉽다 했다. 굉장히 부끄러운 코드다. 이번엔 정말 이진트리를 만들어 본다. \-> 근데 이진트리를 만들기 보다는, 재귀함수로 구현할 수 있다는 힌트를 받아서 풀게 되었습
프로그래머스 문제BFS를 이용해서 풀어서 문제를 해결할 수 있었다. 하지만 풀이가 매끄럽지 못해 다른 분들의 풀이를 보면서 풀이를 보완하게 되었다. 중요한 점은 , 어떻게 방문한 점을 다시 방문하지 않도록 만드는가였다. 그래서 하나의 위치에 대해서 새로와 가로로 방문할
프로그래머스 문제최소의 경로를 찾아아 했기에 BFS를 이용해서 풀어야 겠다는 생각이 들었다. 아래와 같은 생각의 과정을 거쳤다.각 노드에 가중치가 부여된 트리가 있다,연산과정을 통해 0을 만드는 것이 목표다두 점을 연결하여 1을 증가시키고 한쪽은 1감소시킵니다.최소한의