목록프로그래머스 알고리즘/2단계 (62)
N
https://school.programmers.co.kr/learn/courses/30/lessons/161989 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제를 단순하게 접근하면 된다. section에 있는 범위만 덧칠하면 되기 때문에 greedy하게 접근한다. 우선 start 변수를 선언하여 section의 마지막 원소를 가져온다. 한번 덧칠하는 단계이기 때문에 answer = 1이며, 이 start에서 m 만큼 이동한다. while문으로 section을 비울 때까지 반복 현재 위치를 section.pop()을 이용해 가져오며, 만약 curre..
https://school.programmers.co.kr/learn/courses/30/lessons/150369 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr greedy 알고리즘으로 접근. 택배 배달과 수거를 앞에서가 아닌 뒤에서부터 진행을 하면 된다. deveriesIndex와 pickupsIndex를 선언하여 n - 1로 저장하고, 이 두 변수를 이용해서 더 큰 값이 사실상 출발 위치가 된다. while문을 이용해 두 인덱스가 모든 배열을 순회한 -1 값이 될 때까지 반복한다. (뒤에서부터 순회했기 때문에 n - 1 ~ 0 으로 간다.) deli..
https://programmers.co.kr/learn/courses/30/lessons/86052 코딩테스트 연습 - 빛의 경로 사이클 각 칸마다 S, L, 또는 R가 써져 있는 격자가 있습니다. 당신은 이 격자에서 빛을 쏘고자 합니다. 이 격자의 각 칸에는 다음과 같은 특이한 성질이 있습니다. 빛이 "S"가 써진 칸에 도달한 경우, 직진 programmers.co.kr BFS 알고리즘. 처음 풀 때는 DFS를 사용했지만, 런타임 에러 즉, 콜스택이 초과되기 때문에 BFS를 사용해야 한다. 각 좌표마다 시작하는 방향에 따라 사이클의 여부가 달라지기 때문에, 3차원 배열을 이용해 visited를 처리했다. 우선 이중 for문으로 grid를 순회한다. 순회를 하면서 각 좌표마다 4방향으로 탐색을 진행한다..
https://programmers.co.kr/learn/courses/30/lessons/68936 코딩테스트 연습 - 쿼드압축 후 개수 세기 [[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15] programmers.co.kr 분할 정복 알고리즘 적용. check 함수를 이용해 분할을 할지 결정한다. check의 시작은 출발좌표인 0, 0과 arr의 길이를 넘겨주도록 한다. check 함수. 분할 ..
https://programmers.co.kr/learn/courses/30/lessons/49994 코딩테스트 연습 - 방문 길이 programmers.co.kr Map을 활용하여 문제 풀이. 현재 좌표를 나타내는 x, y를 선언하고 5를 저장한다. -5 ~ 5의 좌표를 가지는데 이를 보정하여 0 ~ 10의 좌표를 가지도록 한다. 그렇기 때문에 시작 좌표는 0, 0이 아닌 5, 5가 된다. rangeCheck 함수는 들어온 인자(좌표)가 범위를 벗어나는지 확인한다. 범위를 벗어나면 0 또는 10을 리턴하여 움직이지 않도록 한다. 범위를 벗어나지 않는다면 그대로 x값을 리턴. for문으로 dirs를 순회. go, back 변수를 이용하여 이전에 방문한 적이 있는지 확인하기로 한다. 또한, cx와 cy를 ..
https://programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr 다익스트라를 이용한 문제풀이. 우선 road에 담겨있는 정보(시작 마을, 도착 마을, 비용)를 담을 수 있는 graph를 선언. dist는 각 마을까지 갈 수 있는 최소 비용을 저장하는 배열이다. queue는 다익스트라를 진행할 때 사용하는 배열. for문으로 road에 담겨져 있는 정보를 graph에 담는다. start 번호로 시작하는..
https://programmers.co.kr/learn/courses/30/lessons/77485?language=cpp 코딩테스트 연습 - 행렬 테두리 회전하기 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] programmers.co.kr 쿼리로 주어진 좌표를 토대로 가운데 부분을 제외한 행렬의 테두리를 한칸씩 회전하면 된다. 테두리는 총 4개이므로 반복문 4개를 통해 한칸씩 땡겨준다. 또한, 각 반복문마다 최소값을 비교하면서 진행해야 한다. #include #include using namespace std; vector solution(int rows,..
https://programmers.co.kr/learn/courses/30/lessons/12909?language=javascript 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr function solution(s){ const stack = []; for(let i = 0; i < s.length; i++){ if(s[i] === "("){ stack.push(s[i]); } else{ if(stack[stack.length - 1] == "("){ sta..