티스토리 뷰
문제
https://www.acmicpc.net/problem/16472
고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고양이의 언어로, 고양이의 언어를 사람의 언어로 바꾸어 주는 희대의 발명품이 될 것이다.
현재 고양이말 번역기의 베타버전이 나왔다. 그러나 이 베타버전은 완전 엉망진창이다. 베타버전의 번역기는 문자열을 주면 그 중에서 최대 N개의 종류의 알파벳을 가진 연속된 문자열밖에 인식하지 못한다. 굉장히 별로지만 그나마 이게 최선이라고 사람들은 생각했다. 그리고 문자열이 주어졌을 때 이 번역기가 인식할 수 있는 최대 문자열의 길이는 얼마인지가 궁금해졌다.
고양이와 소통할 수 있도록 우리도 함께 노력해보자.

유형 : 해시 + 투 포인터
접근 방식
- 입력값이 최대 100,000이기 때문에 O(N)의 시간 복잡도로 문제를 해결해야 한다.
- 연속된 문자열을 지속적으로 관리해야 하기 때문에 투 포인터를 사용하면 가능하다.
- Hash에 <현재 문자, 갯수>를 저장하여 r을 한칸 씩 오른쪽으로 이동하여 추가한다.
- 만약 Hash의 size 즉 현재 가지고 있는 문자의 개수가 n보다 크다면 조건을 만족할 때까지 l을 한칸 씩 오른쪽으로 이동하며 삭제한다.
전체 코드
import java.util.*;
import java.io.*;
public class Main {
static int n;
static char[] arr;
static HashMap<Character,Integer> map = new HashMap();
static int result = 0;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
arr = br.readLine().toCharArray();
int l = 0;
int r = 0;
while(l <= r && r < arr.length) {
char next = arr[r];
if(!map.containsKey(next)) {
map.put(next,1);
}else {
map.put(next,map.get(next) + 1);
}
if(map.size() <= n) {
result = Math.max(result, r - l + 1);
}else {
while(map.size() > n) {
int nextNum = map.get(arr[l]) - 1;
if(nextNum == 0) {
map.remove(arr[l]);
}else {
map.put(arr[l],nextNum);
}
l++;
}
}
r++;
}
System.out.println(result);
br.close();
}
}'알고리즘 > 백준' 카테고리의 다른 글
| 백준 2306 (유전자) - java (0) | 2024.07.07 |
|---|---|
| 백준 16681 (등산) - java (0) | 2024.06.28 |
| 백준 30024 (옥수수밭) - java (0) | 2024.06.20 |
| 백준 4148 (31게임) - java (1) | 2024.06.17 |
| 백준 5710 (전기 요금) - java (1) | 2024.06.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준 #4963 #섬의 개수
- 백준 #5721 #사탕 줍기 대회 #java #자바
- 백준
- 백준 #3980 #선발 명단
- 백준 #12014 #주식 #자바 #java
- 행복합시다.
- 백준 #2580 #스도쿠
- 백준 #1584 #게임 #java #자바
- Java
- 17218
- 백준 #2636 #치즈
- 백준 #16973 #직사각형 탈출
- 백준 #1987 #알파벳 #자바 #java
- 백준 #치즈 #2638
- 백준 #18405 #경쟁적 전염
- 백준 #다리 만들기 #2146
- 17394
- 백준 #28140 #빨강~ 빨강~ 파랑! 파랑! 달콤한 솜사탕! #java #자바
- 백준 #17940 #주식 #자바 #java
- 백준 #14863 #서울에서 경산까지 #java #자바
- 백준 #1759 #암호 만들기
- 백준 #15686 #치킨 배달
- 백준 #
- 백준 #인구 이동 #16234
- 백준 #25603 #짱해커 이동식 #java #자바
- 백준 #1325 #효율적인 해킹
- 올해보다
- 백준 #13549 #숨바꼭질3
- 자바
- 자바 #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 |
글 보관함