알고리즘/programmers 270

[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 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers] 로또의 최고 순위와 최저 순위

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 간단한 구현 문제였습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

[Programmers 코딩테스트 고득점 Kit] 징검다리

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/43236 코딩테스트 연습 - 징검다리 출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가 programmers.co.kr 이분 탐색을 활용하는 문제였습니다. 알고리즘은 아래와 같습니다. 1. rocks 벡터를 오름차순 정렬해줍니다. 2. 각 지점 사이의 거리 최솟값은 1, 최댓값은 distance로 설정해준 뒤 이분 탐색을 진행해줍니다. 2.1 mid 값보다 구간이 짧은 돌은 삭제해주고 삭제된 돌들이 n 이하인지 확인해줍니다. 2.2 n 이하라면 최소..

[Programmers 코딩테스트 고득점 Kit] 입국심사

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 매개변수로 주어진 자료형은 int지만 long long으로 변환해야 AC를 받을 수 있는 문제였습니다. 알고리즘은 아래와 같습니다. 1. times를 심사시간 기준 오름차순 정렬을 해줍니다. 2. 최소는 0, 최대는 [가장 오래 심사를 하는 사람 기준 * n]으로 잡고 이분 탐색을 진행해줍니다. 2.1 모든 사람이 심사를 받는데 성공하면 최댓값을..

[Programmers 코딩테스트 고득점 Kit] 단속카메라

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 차량의 대수가 최대 10,000대이므로 O(N^2)으로는 풀 수 없는 문제였습니다. 알고리즘은 아래와 같습니다. 1. routes 벡터를 차량이 고속도로에 진입한 지점을 기준으로 오름차순 정렬을 합니다. 2. 첫 번째 차량의 고속도로 탈출 지점에 카메라를 설치합니다. 3. 두 번째 차량부터 고속도로 진입한 지점과 기존 카메라 설치 지점을 비교합니다. 3.1 진입한 지점이 기존 카메라 설치 지점보다 앞서면 굳이 카메라를 추가로 설치하지 않아도 됩니다...