알고리즘/programmers 279

[Programmers] 경주로 건설

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 방향을 꺾는 것을 확인한다는 점에서 리틀 프렌즈 사천성 문제와 비슷한 문제였습니다. https://jaimemin.tistory.com/2147 [Programmers] 리틀 프렌즈 사천성 문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/1836 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매..

[Programmers] 보석 쇼핑

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/67258 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 투 포인터 알고리즘을 이용해 푸는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 보석의 종류 개수와 주어진 진열대 크기를 구해줍니다. 2. 정답이 아닌 케이스는 주어지지 않으므로 answer를 최대 범위인 1 ~ 진열대 크기로 초기화하고 투 포인터 알고리즘을 적용할 것이므로 start, end 변수를 선언한 뒤 각각을 0으로 초기화해줍니다. 3. set과 map을 선언하여 현재..

[Programmers] GPS

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/1837 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr DP 알고리즘을 통해 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다. 1. cache[k][v]는 거쳐간 k번째 거점이 v일 경우 누적 수정된 횟수를 저장하는 캐시 배열입니다. 2. cache를 모두 INF로 초기화하고 주어진 문제에서 승차와 하차 위치가 오류가 없다고 했으므로 승차 위치를 firstGps, 하차 위치를 lastGps로 지정하고 cache[0][startGp..

[Programmers] 리틀 프렌즈 사천성

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/1836 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr BFS 알고리즘을 이용하여 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다. 1. State 구조체는 좌표, 방향을 꺾은 횟수, 그리고 이전 방향을 저장하는 구조체입니다. 2. 전처리를 진행하는데 문제에서 가능한 경우 중 알파벳 순으로 가장 먼저인 케이스를 반환하라고 했으므로 주어진 배열 내 알파벳들을 set 자료구조에 저장해주고 각 알파벳의 위치를 v 벡터에 저장해줍니다. ..

[Programmers] 표 편집

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제의 특성상 삽입, 삭제가 O(1)에 이루어져야 하므로 링크드 리스트 자료구조를 통해 푸는 문제였습니다. c++에서는 stl로 list를 제공하기는 하나 많이 써본 경험이 없으므로 이중 연결 리스트를 직접 구조체를 구현하여 풀었습니다. 이중 연결리스트에 관한 자세한 코드는 아래의 링크를 참고해주세요. https://jaimemin.tistory.com/169 C++ Fundam..

[Programmers] 금과 은 운반하기

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/86053 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이분 탐색 알고리즘을 통해 풀면 되는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 이분 탐색의 핵심은 탐색의 범위를 지정하는 것이며 저는 시간을 기준으로 범위를 지정했습니다. 1.1 이 문제의 핵심은 최대 시간을 구하는 것인데 극단적인 케이스로 w = 1, t = 1, g = 1e9, 그리고 s = 1e9라고 가정했을 때 최대 시간은 1e5 + (1e5 * 2) * (2 * ..

[Programmers] 합승 택시 요금

문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/72413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 저는 다익스트라 알고리즘을 통해 푼 문제인데 정석 풀이를 보면 플로이드-와샬 알고리즘으로 푼 문제였습니다. 일단 제가 푼 코드를 기반으로 설명을 진행하고 추후에 플로이드-와샬 코드도 올리도록 하겠습니다. 알고리즘은 아래와 같습니다. 1. 시작점 s를 기준으로 다익스트라 알고리즘을 진행하고 그 결과를 sDistance에 저장합니다. 2. [1, n] 지점을 순회하며 각 지점을 기준..

[Programmers] 최적의 행렬 곱셈

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/12942 코딩테스트 연습 - 최적의 행렬 곱셈 크기가 a by b인 행렬과 크기가 b by c 인 행렬이 있을 때, 두 행렬을 곱하기 위해서는 총 a x b x c 번 곱셈해야합니다. 예를 들어서 크기가 5 by 3인 행렬과 크기가 3 by 2인 행렬을 곱할때는 총 5 x 3 x 2 = programmers.co.kr DP를 이용하면 풀 수 있는 문제였습니다. 알고리즘은 아래와 같습니다. 1. cache[i][j]: [i, j] 구간 내 행렬 최소 곱셈 연산 수를 저 2. 구간을 쪼개가며 현재 cache[i][j]와 비교하며 더 작은 연산 값을 저장 3. 2번을 진행한 후 cache[0][mat..

[Programmers] 사라지는 발판

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/92345 코딩테스트 연습 - 사라지는 발판 [[1, 1, 1], [1, 1, 1], [1, 1, 1]] [1, 0] [1, 2] 5 [[1, 1, 1], [1, 0, 1], [1, 1, 1]] [1, 0] [1, 2] 4 programmers.co.kr 비트 마스킹을 연습하기 좋은 문제였습니다. 알고리즘은 아래와 같습니다. 1. 주어진 board 정보를 기반으로 boardBit을 생성합니다. -> ex) [[1, 1, 1], [1, 0, 1], [0, 1, 1]]이 주어졌을 경우 boardBit는 111101011을 십진수로 변환한 값 2. 재귀함수 func는 매개변수 {y, x}에 위치한 사람..

[Programmers] 불량 사용자

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/64064 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 알고리즘은 아래와 같습니다. 1. 불량 사용자 아이디에 해당하는 유저 아이디의 인덱스들을 벡터 배열 v에 넣어줍니다. 2. func 재귀 함수를 통해 나올 수 있는 유저 아이디의 인덱스 조합들을 정렬한 상태로 set에 넣어줍니다. 3. 2번에서 구한 set의 크기를 반환해주면 끝 개발환경: Programmers IDE 지적, 조언, 질문 환영합..