티스토리 뷰
https://www.acmicpc.net/problem/16472
16472번: 고냥이
고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int n;
static int maxLength = 0;
static int[] check = new int[26]; // 알파벳 몇번 나왔는지 기록
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
char[] arr = br.readLine().toCharArray();
int start = 0;
int end = 0;
int count = 1; // 지금까지 나온 알파벳 종류 수
check[arr[0]-'a'] = 1;
while(true) {
end++;
// 종료 조건: 끝까지 봤음
if(end == arr.length) {
break;
}
int right = arr[end] - 'a';
check[right]++;
if(check[right] == 1) {
count++;
}
// 알파벳 종류가 n보다 큰 상태
while(count > n) {
// start를 앞으로 한칸 옮길 것
int left = arr[start] - 'a';
check[left]--;
// 이제 check[left] 알파벳은 문자열에 없음
if(check[left] == 0) {
count--;
}
start++;
}
maxLength = Math.max(maxLength, end-start+1);
}
System.out.println(maxLength);
}
}
1차원 배열에서 두 개의 포인터를 두고 조작하여 원하는 값을 알아내는 투 포인터 알고리즘을 활용하는 문제입니다.
이 문제에서 투 포인터를 사용하지 않고 모든 부분 배열을 완전 탐색한다면 O(n^2)이 되고 시간초과가 될 것입니다.
투 포인터 개념 정리는
투 포인터 (Two Pointers)
투 포인터 (Two Pointers) 투 포인터 알고리즘은 1차원 배열에서 두 개의 포인터를 조작하여 원하는 결과를 얻어내는 알고리즘입니다. 🎈 예제 길이가 n 인 1차원 배열이 있을 때, 그 부분 배열의 원
aainy.tistory.com
포스팅에 있습니다 ^_^
'알고리즘 > 알고리즘 연습' 카테고리의 다른 글
[프로그래머스] 마법의 엘리베이터 (0) | 2023.04.04 |
---|---|
[BOJ_1991] 트리 순회 (0) | 2023.04.02 |
[BOJ_2295] 세 수의 합 (0) | 2022.07.01 |
[BOJ_1021] 회전하는 큐 Java (덱) (0) | 2022.06.02 |
[BOJ_9694] 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 Java (다익스트라, 경로 추적) (1) | 2022.05.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 탐욕법
- 투포인터 #알고리즘
- 스레드
- 유니온파인드
- 프로그래머스
- BuilderPattern
- 시퀀스가존재하지않습니다
- 백준
- deque
- 전위순회
- 정적팩터리메서드
- 여행가자
- 백준1976
- BAEKJOON
- effectivejava
- 이펙티브자바
- 분리집합
- 시퀀스
- 후위순회
- 빌더패턴
- 중위순회
- greedy
- 자바
- ORA-02289
- Sequence
- 트리순회
- 생성자
- Java
- 이진트리
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함