일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 기술면접공부
- 기술공부
- DDD
- 카프카
- Axon framework
- 자바공부
- 스프링
- JPA공부
- 스프링 공부
- K8S
- 스프링부트공부
- 알고리즘공부
- 코테공부
- 프로그래머스
- querydsl
- JPA예제
- 플러터 개발
- 스프링부트
- Kafka
- 플러터 공부
- JPA스터디
- nestjs공부
- 자료구조공부
- 코테준비
- 스프링공부
- JPA
- JPA 공부
- Flutter
- nestjs
- nestjs스터디
- Today
- Total
목록Algorithm/[Two pointer] (8)
DevBoi
https://www.acmicpc.net/problem/15565 15565번: 귀여운 라이언 꿀귀 라이언 인형과, 마찬가지로 꿀귀인 어피치 인형이 N개 일렬로 놓여 있다. 라이언 인형은 1, 어피치 인형은 2로 표현하자. 라이언 인형이 K개 이상 있는 가장 작은 연속된 인형들의 집합의 www.acmicpc.net 귀여운 라이언 풀이 생각 보다 투포인터라는 개념만 있으면 쉽게 풀수있다. 우선 투포인터와 완전 유사하다. while 조건은 총 두개, left
투포인터 고냥이 문제 https://www.acmicpc.net/problem/16472 16472번: 고냥이 고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고 www.acmicpc.net 투포인터와 Map으로 해당 문제를 풀수있다. 처음에 버벅였던게 크다.... 이문제는 진짜 혼자 오래동안 풀었다...열심히좀 해야겠다...(자기반성) 우선 소스에서 크게 볼부분이 있다. 투포인터는 탐색의 경우, 아주 유용하다 (부분합 구할때랑 동일) 투포인터는 문제를 풀때 항상 유념해야되는 부분이있다. 즉, index를 1크게 생각을 해야한다. 예를 들어보자 처음에 00으로 시작했다. ..
https://www.acmicpc.net/problem/16472 16472번: 고냥이 고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고 www.acmicpc.net
https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 이것도 간단한 부분합이다. 포인트라고 하면 두가지 정도가 있다. left,right로, 단순 카운트가아니라, 정답에 부합할때 (주어진 합보다 이상인 경우) 일때, math.min으로 구하는것 그리고 답이 없는 경우, 그냥 0을 출력하게끔 하는것 이렇게 생각하고 풀면 된다. 다만 투포인터를 사용할때는 연속한, 어ㅉㅓ고 쩌쩌고 만 나올ㄸㅐ라는것을 꼭 명심하자
https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 간단한 투포인터 문제이다. 정렬은 할필요없고, start, end 가 00부터 시작해서, sum과 타겟을 비교하면서 이동시키면된다. 다만 마지막 인덱스에 대해서는 조금 고민을해볼필요가 있다. 왜냐면 end가 index range를 벗어나게 되면 오류가 발생하기때문이지만 end가 마지막 지점에 있고 start를 줄여나가면서 탐색을 해야될 수도 있기 때문에, ..
https://www.acmicpc.net/problem/2230 2230번: 수 고르기 N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어 www.acmicpc.net 해당 수고르기 문제에서는, 정렬을 사용하면된다. 문제 풀이는 크게 이렇다. left는 0 right는 맨마지막에 포인터를 둔다. 두수의 차이를 절대값으로 해서 비교를하고 taget보다 큰경우에 answer를 math.min으로 값을 업데이트해준다. 그리고 만약에 sum이 target보다 크다면, 정렬이 되어있으니 left를 하나 옮기는데, 여기서 right와 값이 같은 Inde..
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 전체 목록중에서 해당 하는 값의 쌍을 구하는 문제이다. 연속된 숫자에 대한 제약조건이 아니기 때문에, 우선 정렬을 한다. 정렬을 하고 left는 0 right는 끝에 두어서, sum과 비교, 작으면 left를 추가, 반대면 right를 추가하면서 값을 계산한다. 간단한 문제이다.
https://www.acmicpc.net/problem/2559 2559번: 수열 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 www.acmicpc.net 백준 투포인터문제이다. 이중 for문을 돌면 10만개를 최대 10만번까지 돌 경우가 있기 때문에, 시간초과이다. 투포인터로 풀어야한다. 처음에, 초기값을 설정한다 (범위가 주어지기 때문에) 해당 기준으로 answer에 값을 넣고, right를 더하고, left를 빼주면서 sum과 answer를 비교해서 answer를 관리해준다. 굳이 범위 내의 전체를 더할필요없이, 기존에서 추가, 제..