알고리즘/programmers 294

[Programmers] 예산

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/12982 코딩테스트 연습 - 예산 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 programmers.co.kr 최대한 많은 부서를 지원해야 하므로 예산 기준 오름차순으로 정렬한 뒤 순서대로 지원하는 것이 최대로 많은 부서를 지원할 수 있는 방법입니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers] 소수 만들기

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/12977 코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 programmers.co.kr 에라토스테네스의 체를 이용하면 쉽게 풀 수 있는 문제였습니다. N=50이므로 O(N^3)이여도 제한시간 내 통과됩니다! 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers] 사칙연산

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/1843 코딩테스트 연습 - 사칙연산 ["5", "-", "3", "+", "1", "+", "2", "-", "4"] 3 programmers.co.kr 분할 정복과 DP 알고리즘을 조합한 문제였습니다. 알고리즘은 아래와 같습니다. 1. A 구간과 B 구간 사이의 연산자가 +라면 A 구간 내 연산 결과 중 최댓값과 B 구간 내 연산 결과 중 최댓값을 더해야 최댓값을 구할 수 있습니다. 1.1 A 구간과 B 구간 사이의 연산자가 -라면 A 구간 내 연산 결과 중 최대값과 B 구간 내 연산 결과 중 최솟값을 더해야 최댓값을 구할 수 있습니다. 2. 따라서, dp를 이용해 구간 내 연산 결과 최대, ..

[Programmers] 게임 맵 최단거리

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 전형적인 BFS 문제였습니다. 알고리즘은 아래와 같습니다. 1. {0, 0}에서 시작을 하므로 큐에 {0, 0, 0}을 넣어줍니다. [좌표 Y, 좌표 X, 움직인 횟수] 2. BFS를 진행해줍니다 3. 2번 과정에서 {n - 1, m - 1}에 도착하면 움직인 횟수 + 1을 반환해주고, 도달..

[Programmers] 폰켓몬

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/1845 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr N/2와 주어진 폰켓몬 종류 중 작은 값을 반환하면 되는 문제였습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers] 단어 퍼즐

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/12983 코딩테스트 연습 - 단어 퍼즐 단어 퍼즐은 주어진 단어 조각들을 이용해서 주어진 문장을 완성하는 퍼즐입니다. 이때, 주어진 각 단어 조각들은 각각 무한개씩 있다고 가정합니다. 예를 들어 주어진 단어 조각이 [“ba”, “na programmers.co.kr DP를 이용하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 점화식을 cache[t의 인덱스] = min(cache[t의 인덱스], cache[t의 인덱스 - 원소 길이] + 1)로 설정해줍니다. 1.1 여기서 cache[t의 인덱스]란 t의 인덱스까지의 부분 문자열을 뽑았을 때 단어 조각들의 최소 숫자입니다. 2. 이중 반복문을..

[Programmers] 예상 대진표

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/12985 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N programmers.co.kr 대진표가 층마다 2배씩 줄어드는 것을 생각해보면 풀기 쉬운 문제였습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers] 짝지어 제거하기

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 스택을 이용하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 스택에 문자열의 첫 번째 알파벳을 push 해줍니다. 2. 두 번째 알파벳부터 마지막 알파벳까지 스택의 top()과 비교해서 같을 경우 짝을 이루므로 pop()을 해주고 짝이 아니라면 push를 해줍니다. 3. 2번 과정을 거치고 나서 스택이 비어있다면 짝지어 제거하기..

[Programmers] 모두 0으로 만들기

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/76503 코딩테스트 연습 - 모두 0으로 만들기 각 점에 가중치가 부여된 트리가 주어집니다. 당신은 다음 연산을 통하여, 이 트리의 모든 점들의 가중치를 0으로 만들고자 합니다. 임의의 연결된 두 점을 골라서 한쪽은 1 증가시키고, 다른 한 programmers.co.kr 주어진 자료형은 int지만 더하는 과정에서 오버플로우가 발생할 수 있으므로 long long으로 변환해야 하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. 가중치의 합산이 0이 아니라면 가중치를 모두 0으로 만드는 것이 불가능합니다. 1.1 따라서 0이 아닐 경우 -1을 반환해줍니다. 2. 트리는 모든 노드가 연결되어있으므..

[Programmers 위클리 챌린지 8주차] 최소직사각형

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/86491 코딩테스트 연습 - 8주차 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr 그리디 하게 두 변 중 긴 변을 가로로 짧은 변을 세로가 되게끔 회전을 시킨 후 (가로길이의 최대 값) * (세로 길이의 최대 값)을 곱해주면 최소 직사각형 면적을 구할 수 있습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~