map 3

[JAVA]BOJ 16472, 고냥이

진짜 너무너무 어렵다.. 머리의 한계를 느낌.. 덩어리(?)채로 알파벳과 개수를 key로 저장하고 더했다 빼는데 .. 잘 안되고.. 배열을 썼는데도 이상하고.. 암튼  처음(0)부터 오른쪽포인터를 하나씩 늘려, 한 글자씩 길이와 알파벳 개수를 센다(map에 저장). 알파벳 개수가 N개를 넘어갔을때(N+1), 앞(0)에서부터 한 글자씩 뺀다(왼쪽포인터 증가). 빼면서 길이 -1을 하다가 해당 알파벳 개수가 0개가 되면 map에서 지운다. map에서 지우니 알파벳 개수는 N이 될거고 다시 오른쪽을 늘려나간다.. 오른쪽이 범위를 넘었을때 끝난다. 그리고 오른쪽을 늘릴때마다 최대 길이를 계산한다. 글로는 어려워서 그림으로 설명을 대체한다.. 핵심은.. 두 포인터가 각각 앞에서부터 한 글자씩 본다는 점이다.나는 ..

코딩가딩가 2024.08.07

[JAVA]BOJ 10816, 숫자 카드

간단하다. 전체 코드만 올리고 설명은 생략 1. map으로 입력받고 set에도 동시에 저장 2. 확인할 값 입력받고 해당 값 set에 있는지 확인3. 있으면 map의 value, 없으면 0출력import java.io.*;import java.util.*;public class BOJ10816 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); ..

코딩가딩가 2024.07.31

[JAVA]BOJ 7785, 회사에 있는 사람

이 문제에서 중요한 부분은 사람이름은 고유값이고 로그는 변한다는 것이다. 그럼 Map을 사용해야한다는 것을 알 수 있다! Map중에 TreeMap을 쓰면 더 쉽게 풀 수 있다. 사람 이름은 key가 되고 로그는 value가 된다. 그리고 value가 enter인 경우에만 출력하면 된다. 사전 역순으로 출력하라 했으므로 reverse를 이용하면 된다.. 아 그리고 질문게시판에서 봤는데 문제에서 말하는 사전 순은 아스키코드 순이라고 한다. 사람이름을 대소문자로 구분한다 했으니.., 문제 설명이 좀 불친절하다. 예를들면 a와 A가 있다면 사전순으로 A(아스키코드 65) a(97)가 된다. 우리는 역순이니까 a(97) A(65)순으로 출력하면 된다! 어쩌피 reverseOrder를 사용하면 자동으로 해준다.. ..

코딩가딩가 2024.07.25