두개 뽑아서 더하기
sort하나면 금방 해결되는 문제였는데 생각나지않아서 고생했다....시간복잡도까지 고려하니 생각보다 어렵게 다가왔던 문제https://medium.com/@wooder2050/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%99%84%
!== 사용해서 타입까지 비교했을 때는 효율성에서 실패가 떴다
문자열을 sort()메서드로 정렬할 때 기본적으로 대문자는 소문자보다 작은 값으로 간주된다. 대소문자 가리지 않고 문자열을 알파벳 순으로 정렬할 때에는 localeCompare 메서드를 활용할 것.
isNaN(s) 또는 Object.is(+s,NaN)으로 접근해보았으나 11번케이스가 통과되지 못했다.이유는 s값이 '1e22' 같은 값일 경우 지수형태이기 때문에 숫자로 취급되기 때문이다.정규식으로 간단하게 풀 수 있는 문제였는데 정규식을 몰랐다.정규식을 공부해야겠다
1부터 n까지의 자연수 중에 소수를 찾는 방법1부터 n의 제곱근까지의 자연수의 자신을 제외한 배수들을 제거하면 소수만 남는다.
https://velog.io/@michael00987/javascript%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%9C%EC%A0%80-%EC%95%94%ED%98%B8
두번째 방법이 코드가 짧다는 장점이 있지만 내가 푼 풀이에 비하여 속도가 10배 이상 느린 테스트들이 몇개 발견되었다.replace의 두번째인자가 함수가 될 경우 매개변수로 매치된 문자열과 인덱스, 문자열 전체 등이 올 수 있다.여러문자가 매치될 경우 매치된 각각의 문
numbers 요소 각각의 숫자가 곧 x,y의 좌표가 될 수 있도록 position을 설정한다.1,4,7은 왼손으로 입력하고 left좌표 설정3,6,9는 오른손으로 입력하고 right 좌표 설정2,5,8,0일 경우의 좌표와 이전 왼손, 오른손 좌표를 비교하여 이동거리
재귀를 이용한 방식이 속도도 훨씬 빠르고 간결하다.최대 공약수유클리드 호제법으로 푼것인데 (a>b)일 때 a가 b로 나누어지면 b가 최대공약수그렇지 않다면 나누어 떨어질 때 까지 b / a%b를 반복한다. 나누어 떨어지면 a%b가 최대 공약수가 된다.최소 공배수a\*b
위에서 forEach보다 for문을 사용하는 것이 시간을 5배가량 단축 시킬 수 있다.
모든 경우의 수를 고려하여 수를 대입하여 푸는 방법..심플하고 깔끔하게 풀려고 몇시간을 고민해봐도 답이 안나와서 화가난다.
뇌를 프로그래밍적으로 사고하는 것이 아직 적응되지 않는다.레벨 1까지는 그저 이과적인 영역의 문제들이었다면레벨 2부터는 사고하는 방식자체를 갈아치우는 과정인것 같다.
나머지와 몫을 활용하여 규칙성을 파악하고 반복문을 통해 해결하는 문제
2번째 방법에서 정규식에 변수를 넣을 수 있는 방법을 몰랐는데 인스턴스로 생성할 경우 변수를 삽입하여 생성이 가능하다는 것을 알게 되었다.
가능한 압축 경우의 수를 모두 고려하여 압축된 길이를 계산한 뒤 가장 짧은 길이를 반환하여 푼다.s길이의 절반이 최대 압축가능한 단위이므로 s.length / 2만큼 반복문을 돌린다.while 반복문으로 압축된 문자열을 str에 담고.str의 길이를 answer에 pu
https://velog.io/@proshy/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4javascript-%EC%82%BC%EA%B0%81-%EB%8B%AC%ED%8C%BD%EC%9D%B4
https://velog.io/@kimtaeeeny/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B4%84%ED%98%B8-%EB%B3%80%ED%99%98-javascript-2020%EC%B9%B
인덱스와 길이와의 관계를 계산하는 것이 너무 머리아프다 공부를해야겠다.
모든 가능한 경우의 수를 찾는 재귀함수가 이해가 안돼서 괴로웠던 문제..이해를 하고 나니 이 재귀를 만들어낸 사람이 엄청 대단하게 느껴졌다.경우의 수를 다 찾고 겹치는 수를 없애기 위해 set에 저장하고,다시 배열로 만들어 각 요소에 대해 소수를 체크해주면 해결된다.
sort의 원리를 몰라서 이해가 어려웠는데 간단하다.sort함수 인자에 console찍어서 파악해보는건 전혀 의미없고,결국 left,right 두 값을 비교해서 양수가 나오면 자리를 바꾸고 음수나 동일한 값이면 자리를 그대로 놔둔다는 것.
A값 개수와 위치를 고려하여 조이스틱을 최소이동할 수 있는 방법을 알아야 풀 수 있는 문제https://after-newmoon.tistory.com/60
모든 의상을 입어야한다면 종류별 의상개수를 모두 곱해주면 모든 경우의 수가 나온다.하지만 의상을 아예 안입는 경우부터~하나..둘..~종류별로 모두 한가지씩 입는 경우의 수까지 고려하기위해서는 종류별 의상개수마다 +1을 해준다음에 곱해주면 경우의 수가 나온다.즉 모자 :
처음에 문제를 잘못읽고 최대 2명을 태울 수 있다는 것을 생각치 못했다.2명만 태울 수 있을경우 오히려 문제가 쉬워진다. 사람들의 무게를 내림차순으로 정렬한 후에 무게가 가장 무거운 사람과 가장 가벼운사람을 태울 수 있으면 두사람을 제하고, 태울 수 없다면 무거운 사람
우선 노란색 격자는 1행 1열 이상을 차지하기 때문에 총 격자는 3열 3행 이상이어야한다.그리고 구하려는 width와 height는 총격자 수의 약수들의 곱으로 이루어져야 한다.width가 height보다 더 크다고 했으므로 width를 찾기위해 반복문을 역순으로 돌린
깊이 우선 탐색(DFS) 알고리즘으로 풀어야 하는 문제.https://medium.com/@jjnooys/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%83%80%EA%B2%9F-%EB%84%98%EB
2차원 배열 board의 1행 1열 이상부터 반복문을 실행하여현재 행열의 값이 1이라면 왼쪽, 왼쪽상단,위쪽의 값중 가장 작은값 + 1을 현재 행열의 값으로 넣는다.그렇게 전체배열을 조사하여 나온 가장 큰 값이 정사각형의 한변의 길이가 된다.
내가 사용한 방식:{}를 모두 찾아 없앤 뒤 ,를 기준으로 split한다. 배열에 저장된 요소들 중 가장 많이 포함되어 있는 숫자순으로 결과값을 저장하면 된다.다른 사람의 풀이를 통해 json형식의 문자열을 js객체형식으로 parse하면 형태를 그대로 보존한 array
무조건 처음 행부터 최대값을 구해서 더할 경우 올바른 답이 나오지 않는다. 같은 열에 최대값이 몰려 있는 경우만 생각해봐도 문제가 복잡해지기 시작한다.위 풀이 방법은 행 마다 모든 열에서 가능한 최대값을 갱신하면서 마지막 행까지 더해준 다음 그 중 최대값을 반환하는 방
매우 간단하지만 공식을 모르면 복잡해지는 문제.한 배열은 가장 작은값부터, 나머지 한 배열은 가장 큰값부터 서로 곱해주면 가장 작은 누적 값을 얻을 수 있다.
피보나치수를 먼저 구한 뒤에 1234567을 나누게 되면 굉장히 큰 숫자가 나오게 되어 테스트를 통과할 수 없다.(a+b) % c = ((a%c) + (b%c)) %c 의 성질을 이용하여 피보나치수가 나올 때마다 나머지를 반환하면 BigInt를 피해가면서 값을 도출해낼
split 메소드에 정규식을 활용할 수 있으며 정규식에 괄호를 사용할 경우 괄호내의 문자도 split된 배열에 포함된다.자바스크립트 코드를 문자열 방식으로 사용하고 싶을 경우 eval을 사용할 수 있는데 보안에 위협이 있으므로 사용하지 않는 것이 좋다. ex) eval
처음에 반복문을 사용하여 replace로 겹치는 부분을 제거하면서 풀었더니 시간초과로 실패가 떴다.replace 또는 splice로 제거할때마다 index를 처음부터 초기화해서 다시 돌려야하기 때문에 비효율적이다.한번의 반복문으로 겹치지 않는 문자는 push 겹치는 문
먼저 조합함수를 구현하여 n개의 숫자 중 m개의 숫자를 뽑는 경우를 2차원 배열로 만들어 반환한다.ex) \[1,2,3,1,2,4,2,3,4] 배열의 요소를 각 경우의 수를 더한 값으로 치환한다.ex) 6,7,9;각 요소가 소수인지 아닌지 반복문으로 찾아낸다.https
다중집합에 대해 교집합 합집합을 구하는 방법let union = \[]; let intersection = \[];
먼저 배열을 2차원 배열로 만든다.반복문으로 제거해야할 블록의 인덱스를 찾는다.이때 나중에 0으로 바뀐 블록들도 찾아내기 때문에 행렬이 0이 아니어야 한다는 조건을 추가. (boardi)제거해야할 블록을 모두 0으로 바꾼다.여기까지는 쉽다.마지막 반복문은 이해하고나면
LRU(Least Recently Used) 캐시 교체 알고리즘캐시에 최대로 저장할 수 있는 Size가 정해져 있고, 캐시에는 최근에 사용한 순서대로 자료가 쌓이게 된다.캐시사이즈가 꽉 채워진 경우 가장 오랫동안 쓰이지 않은 자료를 shift()하고 새로운 자료를 pu
공백을 기준으로 split 메소드로 분리한다.반복문으로 사용자 아이디(elem1) 닉네임 (elem2)를 맵에 저장한다. 맵의 키는 중복될 경우 최근 저장한 값으로 변경되기 때문에 userID에 대한 최신 닉네임이 value로 저장된다.단 Leave의 경우 닉네임\[e
비트연산자, 부분집합, 중복검사, set 등의 복잡한 지식이 많이 들어간 풀이이다.먼저 column이 n인 부분집합의 개수는 2^n인데 여기서 공집합을 제외하면 2^n -1개가 나온다.그래서 총 2^n -1만큼 반복문을 돌려 부분집합의 경우의 수를 찾아내겠다는 의미로
조합 순열 부분집합
핵심재생된 시간동안의 멜로디를 구해 문자열 m이 포함되어 있는지 체크할 수 있다.이때 https://after-newmoon.tistory.com/63
NUMBER를 기준으로 split하고 나서 sort메소드가 핵심.HEAD를 소문자로 만들어 준 뒤 string 오름차순을 해주고만약 HEAD가 대소문자 구분없이 동일한 문자라면.NUMBER순으로 정렬해준다. 이때 01 001 0001 같이 앞에 0을 없애주기 위해 +를
1초를 나눠주는 구간을 잡는 것이 핵심.각 처리시간의 시작시간과 완료 시간을 기점으로 1초간 체크하여 그사이에 처리되고있는 자료들의 개수를 구한다.먼저 시작시간과 완료시간을 구하기 위해 밀리초 단위로 환산한다.초 단위로 환산할 경우 0.999초를 더해주는 과정에서 정확
N 사용횟수 최솟값이 8을 초과하면 -1을 반환하므로 길이가 8인 배열을 만들어 요소를 set으로 저장한다.N사용횟수가 1부터 8까지의 모든 경우의 수를 set에 저장하여 일치하는 수가 나올 경우 그 값을 반환하고 없다면 -1을 반환.
각 컴퓨터의 check 상태를 모두 0으로 둔다.체크한 컴퓨터가 아닐 시 네트워크 개수를 하나 추가 하고그 컴퓨터의 체크상태를 1로 만든다.(dfs함수 실행)컴퓨터 와 연결된 다른 컴퓨터를 찾기 위해 반복문을 돌리고연결된 컴퓨터를 찾으면 그 컴퓨터의 check 상태를
한번의 반복문으로 해결 할 수 있는 코드.처음에는 dfs나 splice로 해결해보려고 했으나 효율성에서 막히고 말았다. 먼저 차량이 고속도로에서 빠져나가는 지점을 기준으로 오름차순 정렬한다.단속카메라의 위치를 가장먼저 빠져나가는 차량의 지점에 설치하고 루프를 돌면서 카
비용이 적게 드는 순으로 costs배열을 정렬한다.처음 요소를 잘라내어 연결된 두 섬을 set에 저장.모든 다리가 연결되었다면 set의 size는 n이 되기 때문에 반복문을 set의 size가 n이 되기 전까지 돌린다.while 반복문.먼저 costs를 하나씩 조사하면
접근방법 변환 해야할 단어들을 toConvert 배열에 넣는다. 가장 처음에는 begin 단어가 들어가게 된다.toConvert 배열의 단어들을 모두 검사하여 다음 단어로 올 수 있는 모든 단어를 converted 배열에 넣는다. converted 배열의 요소들을 to
어떠한 작업이 시작부터 끝나는 순간까지 요청으로 들어온 모든 작업들 중 처리시간이 가장 짧은 작업을 다음 작업으로 처리해야 평균을 가장 줄일 수 있다.
핵심은 두수가 같은지를 비교하기 위해서 오른쪽 문자열을 .split('').reverse().join('')하여 비교하는 과정은 형변환에 계산되는 비용이 많이 든다는 것이다 따라서 왼쪽 오른쪽 문자열을 하나하나 비교해 보며 일치하지 않는경우 바로 continue해버리는
동적계획법을 활용하여 풀 수 있는 문제 규칙을 찾아 이전의 결과를 캐싱하여 경우의 수를 추가 하는 방식으로 문제를 해결할 수 있다.배열의 각 인덱스를 거스름돈으로 가정한다.각 인덱스의 값을 거스름돈으로 가능한 경우의 수로 가정한다.0원의 경우 가능한 경우의 수를 1로
ban당한 id가 될 수 있는 user_id들을 담은 2차원 배열을 만듭니다.위 예시를 볼 때가능한 조합을 찾는 재귀문으로 난이도가 있습니다.유저 id를 숫자로 바꿔 생각해 보면예를들어 \[1,2, 1,2, 3,4] 일 때 각 배열에서 한 숫자씩 빼낼 때 가능한 조합은
Math.max로 최대값을 찾아 줄여나가는 방법은 효율성이 떨어진다. 내림차순으로 정렬한 뒤 탐색하여 제거해 나가는 방법으로 테스트 통과.
이분탐색으로 접근해서 푸는 것이 효율적이다.min : 다리를 건널 수 있는 최소 명max : 다리를 건널 수 있는 최대 명mid : 다리를 건넜다고 가정할 명 수다리를 100명 건넜다고 가정하였을 때 실제 100명이 건널 수 있었는지 확인하려면 기존 stone 각 요소
combination 재귀 함수를 통해 조합을 구현할 줄 아는 것이 핵심.각각의 orders 요소에 구성되어있는 단품메뉴들 중 course 요소 개수만큼만 뽑아 조합을 구현합니다.ex) 단품메뉴: "ABCFG", 개수: 2개 -> combination(단품메뉴, 개수
Floyd–Warshall 알고리즘을 사용한 해결방법입니다.먼저 2차원 배열을 생성합니다. 2차원 배열의 i는 i에서 j까지 가는 경우의 비용을 의미합니다.i와 j가 일치하는 경우는 자기 자신의 위치에서 자신의 위치로 가는 경우, 즉 제자리입니다. 따라서 요금은 0원입