본문 바로가기

분류 전체보기37

[알고리즘] 달리기 경주 (해시) 1. 조건 배열 `players` 의 최대 길이 50,000 배열 `callings` 의 최대 길이 1,000,000 2. 과정 `callings`을 최대 1,000,000 순회하면서 `players`에서 해당 문자열의 index찾고 업데이트 해야한다. POINT 선형 탐색을 할 경우 최대 1,000,000 * 50,000 (= 500억)의 리소스가 소모된다. (시간 초과되는것이 당연.) 해시 테이블을 최대 50,000의 리소스를 이용해서 먼저 만들어 준다면 `callings`의 길이만큼 `players`를 순회할 필요 없이 N(1)로 해당 Index를 바로 찾아낼 수있다. 3. 풀이 function solution(players, callings) { // ojb로 player: idx로 복사 cons.. 2023. 10. 25.
[알고리즘] 바탕화면 정리 0. 잡소리 코딩테스트... 꾸준히 하자 오랜만에 했더니 뇌가 굳어버린것 같다. ㅠㅠㅠ 1. 조건 문자열 최대 길이 50 배열 최대 길이 50 문자열은 .과 #로만 이루어져있다. 바탕화면의 드래그 최단 거리를 구하라 2. 과정 2차원 배열로 바꾸기 위해 split()을 활용했다. 2차원 배열을 순회를 하며 "#"이 포함된 좌표 x, y값을 각 배열에 집어 넣었다. 순회가 끝난 뒤 각 배열의 최대 최솟값 (이때 최대값에는 +1을 해준다)을 [lux, luy, rdx, rdy]순으로 return 한다. 3. 풀이 function solution(wallpaper) { const wallpaperArray = []; wallpaper.map((item) => wallpaperArray.push(item.spl.. 2023. 4. 15.
[알고리즘] 덧칠하기 1. 조건 n 미터 만큼 페인트가 칠해진 벽 포스터 등을 게시, 철거 과정에서 페인트가 벗겨짐 덧칠 작업 구역을 나누어 일부만 페인트 새로 칠하기로 1m씩 n개의 구역 왼쪽부터 1번 -> n번 1 ≤ m ≤ n ≤ 100,000 1 ≤ section의 length ≤ n 2. 과정 단순 순회일것이라고 생각하고 풀었다. 단순 순회는 맞았지만 처음 풀이시에 왜이렇게 복잡하게 풀었는지 모르겠다. 3. 풀이 function solution(n, m, section) { let answer = 0; while (section.length > 0) { const target = section.shift(); for (let idx = 1; idx n).. 2023. 3. 29.
[알고리즘] 대충 만든 자판 1. 조건 keymap, target의 길이와 그 원소들의 길이 1 ~ 100 경우1: 자판 전체에 같은 문자 여러 번 할당 경우2: 키 하나에 같은 문자 여러 번 할당 경우3: 아예 할당 되지 않은 경우 특정 문자열 작성할 떄 최소 몇 번 눌러야 가능한지 구하기 2. 풀이 과정 좀 오래동안 문제를 쳐다봐쓴ㄴ데 어떤 알고리즘을 활용해서 풀이해야할지 도무지 떠오르지 않았다. 그래서 그냥 무지성 코딩을 갈겼다 사실 내가 생각한대로면 최악의 경우를 생각해보면... 100*100*100*100이니까.. 100,000,000이 나온다 ㅋㅋㅋㅋㅋ!!!!! 시간 초과 날것을 예상하고 시간초과가 나면 조금씩 개선해보자는 생각으로... 3. 풀이 function solution(keymap, targets) { cons.. 2023. 3. 29.
[알고리즘] 카드 뭉치 1. 조건 카드 2뭉치 주어짐 원하는 뭉치에서 순서대로 1장씩 한 번 사용한카드는 사용 불가 카드를 사용하지 않고 다음 카드 사용 불가 기존에 주어진 카드 뭉치의 단어 순서 바꾸기 불가 각 카드 cards1, cards2의 길이: 1 2023. 3. 27.
[알고리즘] 둘만의 암호 1. 조건 5 ≤ s의 길이 ≤ 50 1 ≤ skip의 길이 ≤ 10 s와 skip은 알파벳 소문자로만 이루어져 있습니다. skip에 포함되는 알파벳은 s에 포함되지 않습니다. 1 ≤ index ≤ 20 s와 skip의 길이가 그렇게 길진 않다. 사실 풀 수만 있다면 어느 방법을 써도 통과할 것 같았다. 2. 풀이 과정 abc...z의 문자열을 split(" ")을 통해 default 알파벳 배열을 만든다. 반복문을 통해 skip에 있는 문자와 일치하는 알파벳을 0으로 만든다. filter함수를 통해 0을 제외한 새로운 배열을 만든다. s를 차례대로 순회하면서 새로운 배열에 있는 문자를 주어진 index 이동하여 문자열 answer에 더한다. 3. 풀이 function solution(s, skip, .. 2023. 3. 26.