Java 73

[JAVA]BOJ 2161, 카드1

큐 관련한 문제를 푸는데 큐에 대해 아직 잘 모르는 것 같아서 간단한 문제를 먼저 풀어봤다. 자바에서 큐를 구현할때 LinkedList, PriorityQueue, ArrayDeque 등을 사용할 수 있다. 큐의 주요 메소드add()큐의 뒤에 요소를 추가한다.큐가 가득 찼을 때 예외를 발생시킨다. 성공하면 'true'를 반환한다.poll()큐의 제일 앞에 있는 요소를 제거하고 반환한다.큐가 비어있으면 'null'을 반환한다.remove() 와 비슷하지만, remove()는 큐가 비어있을때 예외를 발생시킨다.따라서 큐가 비어있지 않다고 확신할때 remove를 사용한다.peek()큐의 앞에 있는 요소를 반환한다. 제거하지는 않는다.큐가 비어있으면 예외를 발생시킨다.import java.io.BufferedR..

코딩가딩가 2024.08.18

[JAVA]BOJ 15961, 회전 초밥

16472, 고냥이 문제와 비슷하다. 거의 똑같다! 1. 배열에 입력한 초밥 저장한다.2. k개의 초밥이 있는 윈도우를 만들고 left와 right를 증가시켜 윈도우를 움직인다.3. 윈도우 안에 초밥을 map형식으로 저장하고 map의 크기와 max를 비교해 max를 찾는다.주의할 점은 쿠폰초밥(c)를 처음에 추가해준다. 무조건 k개의 초밥을 먹고 쿠폰초밥(c)를 먹기때문에 처음부터 쿠폰초밥(c)를 map에 추가했다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Map;import java.util.StringToke..

코딩가딩가 2024.08.18

[JAVA]BOJ 2503, 숫자 야구

1. 123, 124, 125, .... 129, 132, 134, ... 986, 987 까지의 array list를 만든다.2. 질문들을 입력 받아서 2차원 배열로 저장한다.3. 1.에서 만든 list의 각 숫자를 질문 숫자와 비교해 strike와 ball이 몇 개 있는지 확인한다.4. strike와 ball이 다르면 list에서 지운다.5. 3. 4.를 반복하고 남은 list의 숫자 개수(사이즈)를 출력한다. 쉽게 풀어서 얘기하면, 질문이 123 1 1 일때, arrayList에 있는 123과 비교한다. 1, 2, 3 모두 숫자와 위치가 같은 스트라이크이므로 strike=3, 이고 strike=1, ball=1인 조건과 맞지 않으니 arrayList에서 지운다. 또 다른 arrayList에 있는 3..

코딩가딩가 2024.08.11

[JAVA]BOJ 1475, 방 번호

1. [0] ~ [9] 까지의 배열을 만들고 입력에 맞춰 값을 증가시킨다. 단, 6이 들어온 경우에는 [6] 이 아니라 [9] 를 증가시킨다.2. [0] ~ [8] 까지 중 최댓값을 찾는다. (제일 많이 필요한 숫자카드)3. ([9] / 2 + [9] % 2) 와 2.에서 구한 최댓값 중 더 큰 값을 출력한다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class BOJ1475 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(n..

코딩가딩가 2024.08.09

[JAVA]BOJ 1406, 에디터

LinkedList를 iterator로 이동하면서 명령을 수행하는 문제이다. 앞으로도 이동해야 하므로 listIterator 를 사용했다.설명은 주석으로 달아놨다.import java.io.*;import java.util.LinkedList;import java.util.ListIterator;public class BOJ1406 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWri..

코딩가딩가 2024.08.09

[JAVA]BOJ 1158, 요제푸스 문제

드디어 List를 사용한 문제이다. 문제를 푸는 여러 방법이 있겠지만, 나는 ArrayList를 사용했다. k번째 값을 빼준다. 다음은 k번째부터 +k번째 값을 또 뺀다.. 손으로 풀면 규칙이 보인다. 지속적으로 k - 1을 더해주고, 더한 값이 전체 배열 사이즈보다 큰 경우 '% 사이즈' 를 한 후 +k번째 값을 뺀다.. 그렇게 계속 빼다가 배열에 남은 값이 없으면 끝이다.아래는 전체 코드이다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.StringTokenizer;public class BOJ1158 { ..

코딩가딩가 2024.08.08

[JAVA]BOJ 16472, 고냥이

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

코딩가딩가 2024.08.07

[JAVA]BOJ 17609, 회문

처음에 시간초과가 날게 뻔하지만 O(n^2)로 풀고, 시간초과 받고.. 다시 풀었다. '유사회문'을 확인하는게 좀 어렵다. 유사회문을 확인하는 방법은 1. 순서대로 Palindrome을 확인하다가 달라지는 순간이 왔을때2-1. 왼쪽을 하나 증가시키고 Palindrome인지 확인한다.2-2. 오른쪽을 하나 감소시키고 Palindrome인지 확인한다.3. 2-1, 2-2인 경우 Palindrome이 아니면 유사회문도 아니므로 2를 출력한다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class BOJ17609 { public static int isPalindrome(cha..

코딩가딩가 2024.08.06