투 포인터(9)
-
[Programmers] 연속된 부분 수열의 합
https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 기본적인 투 포인터 문제이다. 먼저 완전 탐색으로 해결하니 많은 테스트 케이스에서 시간 초과가 발생했고 투 포인터로 해결하였다. 원리는 간단하다. 왼쪽과 오른쪽 포인터 변수를 하나씩 둔다. sum에 누적합 결과를 저장한다. 만약 sum이 k보다 작으면 오른쪽 포인터를 오른쪽으로 이동시키면서 누적합 계산을 한다. 그러다 k와 같아지면 범위 비교를 한다. 그렇게 해서 더 간격이 좁은 구간..
2023.09.07 -
[Baekjoon] 1484번: 다이어트
https://www.acmicpc.net/problem/1484 1484번: 다이어트 성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다. www.acmicpc.net 문제 설명 입력된 G값은 현재 몸무게의 제곱에서 기억하고 있던 몸무게의 제곱을 뺀 값이다. 현재 몸무게로 가능한 모든 수를 출력해야 한다. 풀이 방법 투 포인터를 활용해 간단하고 효율적으로 해결할 수 있다. 모든 수를 출력하는 것 외에 다른 제한이 따로 없어서 당황할 수 있는데 규칙을 찾으면 반복의 종료 조건을 찾을 수 있다. 예제 입력으로 흐름을 따라가보자. 먼저 기억하고 있던 몸무게를 left, 현재 몸무게..
2023.04.11 -
[Baekjoon] 15961번: 회전 초밥
https://www.acmicpc.net/problem/15961 15961번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 3,000,000, 2 ≤ d ≤ 3,000, 2 www.acmicpc.net 문제 설명 문제가 길기 때문에 천천히 꼼꼼히 읽어보면서 문제와 조건을 이해해야 한다. 예제 입력 1을 통해 알아보자. 초밥이 위처럼 주어진다고 한다. 이 중에 어떤 한 접시부터 연속으로 k개의 접시를 먹으면 할인을 해주는 이벤트를 한다고 한다. 그리고 이 이벤트에 참여하면 서비스 초밥을 하나 더 준다고 한다. 이 초밥이 트레이에 없으면 하나 만들어서 준..
2023.04.07 -
[Baekjoon] 1644번: 소수의 연속합
https://www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제 설명 소수 구하기와 투 포인터가 결합된 문제였다. N이 주어지면 해당 N까지의 소수를 모두 구한 뒤 투 포인터를 활용해 합이 되는 연속된 합의 개수를 카운트하면 된다. 풀이 방법 소수를 구하는 방법으로는 에라토스테네스의 체를 활용한다. 이때 소수는 ArrayList에 담는다. 주의할 점은 대부분의 소수 탐색의 경우 N의 제곱근까지 수행하지만 이 문제의 경우 N까지의 소수들에 대한 연속합을 구하기 위해 ArrayList에 소수를 담아야 하므로 N까지 모든 수들을 탐색한다. for 문을 한 번 더 사용해서 첫 번째..
2023.04.05 -
[Baekjoon] 3273번: 두 수의 합
https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 문제 설명 n개의 서로 다른 양의 정수로 이루어진 수열이 있다. 정수는 모두 1보다 크거나 같고 1_000_000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때 합이 x가 되는 두 수로 이루어진 쌍의 수를 구하는 프로그램을 작성해라. 풀이 방법 - 정렬, 투 포인터 기본적인 투 포인터 문제이다. 이 문제는 정렬과 투 포인터를 활용하면 ..
2023.04.03 -
[Baekjoon] 2467번: 용액
https://www.acmicpc.net/problem/2467 2467번: 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 - www.acmicpc.net 문제 설명 사이트 설명은 길지만 핵심은 오름차순으로 입력되는 수 중 두 수의 합의 절댓값이 0과 가장 가까운 두 수를 찾는 것이다. 풀이 방법 - 투 포인터 어떻게 보면 완전탐색이지만 투 포인터를 활용하면 더 효율적으로 해결할 수 있다. 예제 입력 1로 시나리오를 생각해보자. 먼저 입력 자체가 오름차순이기 때문에 맨 왼쪽은 가장 작은 수이고 맨 오른쪽은 가장 큰 수이다. 따라서 맨 왼쪽이 양..
2023.03.29