programmers 308

[Programmers] 동굴 탐험

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/67260 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr BFS를 응용한 알고리즘 문제였습니다. 알고리즘은 아래와 같습니다.1. 트리를 구성한 뒤 각 방에 대해 `방문하기 전에 반드시 방문해야 하는 방`을 저장하는 배열 pre를 정의합니다. 2. BFS를 통해 0번 방에서 시작해서 방문합니다.만약 시작점인 0번 방 이전에 방문해야 하는 방이 있다면 탐험 자체가 불가능하므로 바로 종료인접한 방 (next)에 대해, 만약 pre[next] (next 이전에 방문해야 하는 방)가 아직 방..

[Programmers] RPG 게임 알고리즘

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/76504 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr BFS와 DP를 활용하여 푸는 알고리즘 문제였습니다.현재 있는 도시에 움직이지 않을 경우 z 원씩 쌓을 수 있으므로 z * n원을 얻은 뒤 도로 이동을 통해 잔여 금액인 (query - z * n) 원을 얻는 것이 핵심인 문제였습니다. 알고리즘은 다음과 같습니다.1. BFS를 통해 [0원, limit원]까지 각각을 만드는 최소 턴 수를 전부 구합니다.limit원 이하의 돈을 정확히 만드는 최소 턴 수만 미리 전부 구해둘 경우 ..

[Programmers] 블록 게임

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/42894 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr `3 * 2, 2 * 3 형태로 구성된 블록을 찾을 수 있으면 지운다`를 반복하는 알고리즘 문제였습니다. 알고리즘은 다음과 같습니다.1. 각 열마다 `가장 위쪽 블록의 행 번호`를 추적하여 topRowInCol 배열에 업데이트합니다.1.1 topRowInCol 배열은 실제 검사해야 할 행 범위를 빠르게 결정할 수 있도록 지원합니다. 2. 3 * 2 나 2 * 3 영역에서 다음 조건이 해당하면 블록을 제거해 줍니다.빈칸이 정확히..

[Programmers] 1,2,3 떨어트리기

문제 링크는 다음과 같습니다: https://school.programmers.co.kr/learn/courses/30/lessons/150364?language=cpp 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 트리 내 경로가 각 회차마다 유일하므로 `떨어지는 i 번째 숫자가 최종적으로 도달하는 리프 노드가 사실상 정해져 있다`는 아이디어로 구현하면 되는 알고리즘 문제였습니다. 알고리즘은 다음과 같습니다.1. 각 횟차마다 숫자가 어느 리프 노드에 도착하는지 시뮬레이션으로 모두 미리 구합니다.1.1 모든 리프 노드를 1로만 채우는 케이스가 최악의 경우이므로 시뮬레이션은 target 배열의 합만큼 돌..

[Programmers] 행렬과 연산

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/118670 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 2 * 50,000과 같은 케이스가 있기 때문에 이차원 배열을 선언하고 문제에서 주어진 대로 정직하게 구현하면 TLE가 발생하는 문제였습니다.덱을 이용해야한다는 것은 알았는데 Rotate 연산을 어떻게 최적화시켜야 할까 고민하다가 바킹독님 해설을 보고 풀 수 있었습니다. 이 문제의 핵심은 1열과 마지막 열을 별도 Deque으로 분리하고 나머지는 각 행을 기준으로 Deque을 선언해 주는 것입니다.위와 같이 처리해주면 Shif..

[Programmers] 올바른 괄호의 갯수

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/12929 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 올바른 괄호 문자열의 개수를 구하기 위해 카탈랑 수(Catalan Number)를 구해주면 되는 문제였습니다.점화식은 다음과 같습니다.   개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

[Programmers] 충돌위험 찾기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/340211 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 경로 길이가 최대 100이므로 O(N^2)으로도 수월하게 풀 수 있는 구현 문제였습니다.  개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

[Programmers] 수식 복원하기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/340210 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 가능한 진법은 2 ~ 9진법이기 때문에 단순 구현으로 풀 수 있었던 문제였습니다.  개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

[Programmers] 퍼즐 게임 챌린지

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/340212 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 이분 탐색을 통해 풀 수 있는 문제였습니다.  개발환경: Programmers IDE   지적, 조언, 질문 환영합니다! 질문 남겨주세요~

[Programmers] 무지의 먹방 라이브

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/42891 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 우선순위 큐를 사용해 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다.1. 전체 음식을 다 먹는 시간이 k보다 작거나 같다면 더 먹을 음식이 없으므로 -1을 반환합니다.2. 음식의 남은 시간을 기준으로 오름차순 정렬하기 위해 최소 힙을 선언하고 {음식 섭취 시간, 음식 인덱스} 형식으로 저장합니다.3. k초 안에 모두 섭취할 수 있는 음식을 2번에서 선언한 우선순위 큐에서 제거..