반응형

프로그래머스 82

[프로그래머스] 카카오 - 양궁대회

문제2022 카카오 블라인드 채용 - 양궁대회https://school.programmers.co.kr/learn/courses/30/lessons/92342  풀이설명라이언이 가장 큰 점수 차이로 우승하기 위해 n발의 화살을 어떤 과녁 점수에 맞혀야 하는지를 10점부터 0점까지 순서대로 구하는 문제입니다. 백트래킹을 이용해 해결할 수 있습니다. 각 점수마다 라이언은 두 가지 선택이 가능합니다.해당 점수를 얻기 위해 화살을 사용합니다. 어피치보다 한 발 더 사용해야 합니다.해당 점수를 얻지 않습니다. 화살을 사용하지 않습니다. 주의해야 할 점은 다음과 같습니다.가장 큰 점수 차이로 우승할 수 있는 방법이 여러 가지일 경우, 가장 낮은 점수를 더 많이 맞힌 경우를 구합니다.가장 낮은 점수를 맞힌 개수가 같..

Coding Problem 2025.02.08

[프로그래머스] 혼자서 하는 틱택토

문제혼자서 하는 틱택토https://school.programmers.co.kr/learn/courses/30/lessons/160585   풀이설명게임판이 규칙을 지켜서 틱택토를 진행했을 때 나올 수 있는 상황인지를 구하는 문제입니다. 규칙은 다음과 같습니다.선공이 "O", 후공이 "X"를 번갈아가면서 빈칸에 표시합니다.한 줄이 같은 문양으로 채워지면 해당 플레이어의 승리로 게임을 종료합니다. 다음과 같은 상황은 무효처리됩니다.자신의 차례가 아닌데 플레이한 경우한 플레이어의 승리로 게임이 종료되었음에도 그 게임을 진행한 경우 위 사항들을 고려했을 때, 올바른 게임판의 조건은 다음과 같습니다.O의 개수는 X의 개수와 같거나 하나 더 많아야 합니다.선공과 후공 둘 중 하나만 승리할 수 있습니다.선공이 승리..

Coding Problem 2025.02.07

[프로그래머스] PCCP - 석유 시추

문제PCCP - 석유 시추https://school.programmers.co.kr/learn/courses/30/lessons/250136  풀이설명시추관 하나를 설치해 뽑을 수 있는 가장 많은 석유량을 구하는 문제입니다. 매 열마다 행을 하나씩 내려가며 그래프 탐색을 진행해야 합니다.dfs를 사용할 경우, 재귀 방식을 사용하면 스택 오버플로우가 발생 가능하므로, 비재귀 방식으로 풀어야 합니다. 모든 칸에서 그래프 탐색을 진행할 경우, 시간 초과가 발생합니다.시간을 줄이기 위해서, 한 번 방문한 석유 구역은 번호를 지정한 후, 총량과 방문 기록을 저장하고, 재탐색 대신 미리 저장한 총량을 반환하면 됩니다. 예시 코드function solution(land) { const EMPTY = 0; cons..

Coding Problem 2025.02.05

[프로그래머스] 데브매칭 - 행렬 테두리 회전하기

문제2021 데브매칭 - 행렬 테두리 회전하기https://school.programmers.co.kr/learn/courses/30/lessons/77485  풀이설명각 회전들을 배열에 적용한 뒤, 그 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 구하는 문제입니다. 회전마다 시작 인덱스의 원소 값을 따로 저장하고, 회전이 끝난 뒤 그 값을 다시 넣어주면 쉽게 회전을 처리할 수 있습니다. 예시 코드function solution(rows, columns, queries) { const matrix = Array.from({ length: rows }, (_, i) => Array.from({ length: columns }, (_, j) => i * columns + j + 1..

Coding Problem 2025.02.04

[프로그래머스] 카카오 - 길 찾기 게임

문제2019 카카오 블라인드 채용 - 길 찾기 게임https://school.programmers.co.kr/learn/courses/30/lessons/42892  풀이설명노드들로 구성된 이진트리를 전위 순회, 후위 순회환 결과를 구하는 문제입니다. y 값이 큰 순서대로, x 값이 작은 순서대로 정렬한 후, 이진트리를 구성한 다음, 순회를 하면 됩니다. 예시 코드function solution(nodeinfo) { const nodes = nodeinfo.map((info, index) => ({ x: info[0], y: info[1], index: index + 1, })); nodes.sort((a, b) => b.y - a.y || a.x - b.x); const preO..

Coding Problem 2025.02.03

[프로그래머스] 카카오 - 경주로 건설

문제2020 카카오 인턴십 - 경주로 건설https://school.programmers.co.kr/learn/courses/30/lessons/67259  풀이설명경주로를 건설하는데 필요한 최소 비용을 구하는 문제입니다. 다익스트라 알고리즘을 사용해 해결할 수 있습니다. 이 문제에서 다익스트라 알고리즘을 사용할 때 주의해야 할 부분은 다음과 같습니다.어떤 지점 C를 거쳐서 바로 오른쪽인 D로 가는 루트가 2개 있다고 하겠습니다. 1번 루트는 C의 위쪽인 A에서 C로 도착하기까지 2100원의 비용이 들고, 2번 루트는 C의 왼쪽인 B에서 C로 도착하기까지 2500원이 들었습니다. 1번 루트를 통해 D까지 간다면 코너를 하나 추가해야 하므로 총 2700원이 들지만, 2번 루트를 통한다면 코너를 추가할 필요..

Coding Problem 2025.02.02

[프로그래머스] 카카오 - 수식 최대화

문제2020 카카오 인턴십 - 수식 최대화https://school.programmers.co.kr/learn/courses/30/lessons/67257   풀이설명우승 시 받을 수 있는 가장 큰 상금 금액을 구하는 문제입니다. 가능한 모든 조합을 구해 계산하면 됩니다. 정규식을 이용하면 수식을 토큰으로 쉽게 분리할 수 있습니다. 주의할 점은 금액이 음수가 나올 경우 절댓값을 취해줘야 합니다. 예시 코드function solution(expression) { const operators = ["+", "-", "*"]; const operatorPermutations = getPermutations(operators); let maxResult = 0; for (const order of ope..

Coding Problem 2025.02.01

[프로그래머스] 카카오 - 이모티콘 할인행사

문제2023 카카오 블라인드 채용 - 이모티콘 할인행사https://school.programmers.co.kr/learn/courses/30/lessons/150368  풀이설명행사 목적을 최대한으로 달성했을 때의 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액을 구하는 문제입니다. 서비스 가입자 수를 최대한 늘리고, 가입자 수가 같다면 판매액을 최대로 늘려야 합니다.가능한 모든 조합을 구해 계산하면 됩니다. 예시 코드function solution(users, emoticons) { const discountRates = [10, 20, 30, 40]; const discounts = []; let maxSubscribers = 0; let maxSales = 0; dfs(0); retu..

Coding Problem 2025.01.31

[프로그래머스] 카카오 - 파괴되지 않은 건물

문제2022 카카오 블라인드 채용 - 파괴되지 않은 건물https://school.programmers.co.kr/learn/courses/30/lessons/92344  풀이설명모든 스킬이 끝난 뒤 파괴되지 않은 건물의 개수를 구하는 문제입니다. 누적합을 이용해 해결할 수 있습니다. 예시 코드function solution(board, skill) { const n = board.length; const m = board[0].length; const damage = Array.from({ length: n + 1 }, () => Array(m + 1).fill(0)); let result = 0; skill.forEach(([type, r1, c1, r2, c2, degree]) => { ..

Coding Problem 2025.01.30

[프로그래머스] 도둑질

문제도둑질https://school.programmers.co.kr/learn/courses/30/lessons/42897   풀이설명도둑이 훔칠 수 있는 돈의 최댓값을 구하는 문제입니다. dp를 사용해 해결할 수 있습니다. 집이 원형으로 이어지기 때문에 첫 번째 집을 털면 마지막 집을 털 수 없습니다.따라서 dp 배열 2개를 사용해 하나는 첫 번째 집을 털 때를, 다른 하나는 첫 번째 집을 털지 않을 때를 계산합니다. dp[i]는 i번째 집까지 거쳤을 때 훔칠 수 있는 돈의 최댓값입니다. 점화식은 다음과 같습니다.dp[i] = Math.max(dp[i - 2] + money[i], dp[i - 1]) 예시 코드function solution(money) { const n = money.length; ..

Coding Problem/DP 2025.01.29