알고리즘/programmers 265

[Programmers] 카운트 다운

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/131129# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr target이 최대 10만 점이고 다트는 한 턴당 최대 60점을 얻을 수 있기 때문에 단순 구현으로 접근하면 TLE가 발생합니다. 따라서 DP로 풀어야하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. cache 벡터를 0 인덱스이므로 크기는 target + 1만큼 그리고 모든 인덱스를 {0, 0}으로 초기화해줍니다. 2. 모든 경우의 수를 확인하기 위해 모든 케이스에 대해..

[Programmers] 부대복귀

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/132266 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr BFS로 간단하게 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 주어진 roads 벡터를 토대로 양방향 그래프를 만들어 줍니다. 2. sources 벡터를 순회하면서 destination으로부터 source로 갔을 때 최소 경로를 BFS 알고리즘을 통해 구해줍니다. 2.1 이때 도달할 수 없을 경우 answer에 -1을 추가하고 도달할 수 있을 경우 answer에..

[Programmers] 2차원 동전 뒤집기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/131703 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 비트마스킹으로 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 첨부하는 그림에서 볼 수 있다시피 beginning을 target으로 바꾸기 위해 뒤집을 열과 행을 정하는 것이 중요하지 뒤집는 순서는 중요하지 않습니다. 2. 열과 행의 길이가 각각 최대 10이기 때문에 모든 경우의 수를 구해도 O(2^20 * 20)입니다. 따라서 모든 경우의 수를 테스트한 뒤 답을 ..

[Programmers] COS Pro 1급 C 모의고사

1. 스택으로 큐 구현: https://school.programmers.co.kr/learn/courses/11115/lessons/70752 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 지그재그 부분 수열: https://school.programmers.co.kr/learn/courses/11115/lessons/70753 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 3. Up and dow..

[Programmers] 두 원 사이의 정수 쌍

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/181187 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 수학적인 사고능력이 필요한 문제였습니다. 알고리즘은 아래와 같습니다. 1. 원은 상하좌우 대칭이므로 (1 사분면 내 조건에 맞는 좌표들의 개수) * 4를 하면 정답이 나옵니다. 2. 따라서 [1, r2] 구간의 좌표들을 구하는데 이때 r1, r2, 그리고 x의 값이 연산 중 int 범위를 초과하며 오버플로우가 발생할 수 있으므로 x * 1LL * x와 같이 처리하여 int 범위..

[Programmers] 과제 진행하기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 스택을 이용한 시뮬레이션 구현 문제였습니다. 알고리즘은 아래와 같습니다. 1. 시작 시간을 쉽게 비교하기 위해 시작 시간을 분 단위로 전처리하고 map 자료구조를 통해 해당 시작 시간에 매칭되는 과제를 매핑합니다. 1.1 이때 가장 빠른 시작 시간도 구해줍니다. 2. 가장 먼저 진행해야 할 과제부터 순차적으로 진행하는데 문제에서 주어진 조건대로 해당 과제를 마무리하기 전 새로운..

[Programmers] 연속된 부분 수열의 합

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 투 포인터 알고리즘으로 푼 문제였습니다. 알고리즘은 아래와 같습니다. 1. start와 end는 부분 수열의 시작과 끝을 가리키는 인덱스 값을 저장하는 변수이며 [0, 0] 범위부터 시작합니다. 2. 현재 부분 수열의 합이 k보다 작을 경우 범위를 더 넓혀야 하므로 end를 1 증가시킵니다. 2.1. 현재 부분 수열의 합이 k와 같다면 문제 조건에 따라 두 가지 케이스로 구분해..

[Programmers] 요격 시스템

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/181188 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위 그림을 보자마자 회의실 예약 문제가 떠올랐는데 비슷하게 풀면 되는 문제였습니다. 알고리즘은 아래와 같습니다. 1. targets를 개구간의 e 기준으로 오름차순 정렬을 진행합니다. 2. 처음 폭격 미사일에 요격 미사일을 발사하고 요격시킨 미사일의 개구간 e를 prevEnd에 저장합니다. 2.1 이후 폭격 미사일들을 순회하면서 prevEnd가 해당 미사일의 개구간 내에 있으면..

[Programmers] 광물 캐기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 그리디 하게 접근한 문제입니다. 알고리즘은 아래와 같습니다. 1. 5개씩 구간을 끊고 다이아몬드, 철, 그리고 돌의 개수를 기록한 ore 구조체에 기록합니다. 2. 각 구간을 최소한의 피로도로 캐야 하므로 상위 광물이 많은 순서대로 성능이 좋은 곡괭이를 쓸 수 있도록 정렬을 했습니다. 2.1 즉, 다이아몬드가 많은 구간 > 다이아몬드 개수가 같다면 철이 많은 구간 > 다이아몬드..

[Programmers] 리코쳇 로봇

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 우선순위 큐를 이용한 BFS 문제였습니다. 알고리즘은 아래와 같습니다. 1. 이동한 횟수가 적을수록 우선순위가 큰 우선순위 큐에 로봇의 시작점 좌표와 이동한 횟수인 0을 넣어줍니다. 2. 우선순위 큐가 빌 때까지 혹은 목표점에 도달할 때까지 상하좌우 방향으로 부딪힐 때까지 이동시키며 시뮬레이션을 돌립니다. 2.1 목표점에 도달했다면 이동한 횟수를 반환합니다. 3. 2번 과정에서..