분류 전체보기 95

99클럽 코테 스터디 15일차 TIL 그리디(카드문자열)

https://www.acmicpc.net/problem/13417 카드를 순서대로 하나씩 가져오면서 사전 순으로 가장 빠르게 정렬하는 것. 이때 가장 왼쪽 또는 가장 오른쪽에만 둘 수 있다.핵심 아이디어는 문자를 하나씩 보면서 맨 앞 문자보다 순서가 빠르면 (아스키코드 값이 작으면) 맨 왼쪽에 두고,맨 앞 문자보다 순서가 느리면 (아스키코드 값이 크면) 맨 왼쪽에 두어야 겠다고 생각했다.그리고 자료구조는 Deque 또는 ArrayList 중에 고민하다가 후자를 택해 구현했다.(Deque를 사용한다면 peekFirst와 addFirst / add 를 사용하면 된다) package STUDY.Week03;import java.io.BufferedReader;import java.io.IOException;..

코테/백준 2024.11.12

99클럽 코테 스터디 14일차 TIL 그리디(거스름돈)

https://www.acmicpc.net/problem/14916동전의 개수를 최소로 사용하려면 5원을 최대한 사용해야한다.그리고 2원으로 나눠져야 하므로 5원을 가지고 짝수로 만들어야 함을 알 수 있다.따라서. n이 홀수일 때와 짝수일 때를 나누어 홀수면 5를 최대의 홀수번으로 나누고, 짝수면 5를 최대의 짝수번으로 나누고자 했다. *** 5미만이 들어오면 짝수일 때는 2로 나누어지지만, 홀수일 때는 낼 수 있는 방법이 없으니 -1을 출력해야한다.package STUDY.Week02;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Day14_BOJ_14916_거스름돈..

코테/백준 2024.11.11

99클럽 코테 스터디 13일차 TIL 그리디(고양이는 많을수록 좋다)

https://www.acmicpc.net/problem/27961 이런문제는 결과값을 가지고 입력값을 만들어가는 경우를 생각해야 한다.그리고 그 과정에서 최소 연산을 할 수 있도록 해야하는데, 이 문제의 경우는 생성과 복제 중 복제이다.결과값에서 최대한 복제를 할 수 있는 한 하고 생성을 해서 입력값으로 만들어 가는 연산의 수를 구하면 된다.즉, 6일 때 -> 3(최대 2배로 복제) -> 2(최대 2배 이하로 복제할 경우) -> 1(최대 2배로 복제) -> 0(생성) => 4가 된다.이를 코드로 구현하면 아래와 같다.** 입력값이 0일 경우엔 무조건 0임을 고려해주어야 한다 package STUDY.Week02;import java.io.BufferedReader;import java.io.IOExce..

코테/백준 2024.11.10

99클럽 코테 스터디 12일차 TIL BFS(토마토)

https://www.acmicpc.net/problem/7569 익은토마토로부터 6방향에 있는 안익은 토마토가 익고, 하루가 걸린다. 동시에 6방으로 퍼져야하기에 BFS로 풀었다.안익은 토마토가 다 익는지만 확인하면 되기에 안익은 토마토 개수를 unripe 에 저장해두고 익을때마다 unripe-- 를 해주었다.3차원 배열이고, 6개의 방향 설정만 주의해주면 된다.q에는 익은토마토와 익혀진(?)토마토만 넣으면서 퍼트려준다.** 익혀진 모든 토마토의 주변을 탐색하고 cnt++을 해주어야 하는 것을 주의한다 package STUDY.Week02;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;im..

코테/백준 2024.11.08

[BOJ] 1080 행렬 (Java)

https://www.acmicpc.net/problem/1080A 배열을 차례대로 탐색하다가 B 배열과 다른 부분에서 3x3 만큼을 뒤집는다.종료후, B 배열과 동일한지 확인한다. (0, 0)부터 (n-1, m-1)범위의 값을 모두 비교하고 뒤집었는데, 제출하니 틀렸다.무조건 3x3 배열만큼을 뒤집어야 하기에 아래와 같이 설정해야 한다.또한, 배열 크기가 3미만이지만 A 배열과 B 배열이 애초에 동일한 경우에는 0으로 결과값이 나와야 한다.for(int i=0; i 1. A 배열과 B 배열과 동일하면 0 출력2. 입력 받은 배열의 크기가 3미만이면 -1 출력3. (0, 0) 부터 (n-3, m-3) 까지 탐색하며 B 배열과 다른 값을 찾으면 A배열의 해당 위치부터 3X3 만큼 뒤집는다. 4. A배열과 ..

코테/백준 2024.11.07

99클럽 코테 스터디 11일차 TIL DFS(Yes or yes)

https://www.acmicpc.net/problem/25195 주어진 필수 조건은 단방향, 1번에서 출발이다.DFS로 가다가 방문했던 노드나 팬클럽이 있는 노드가 있으면 지나지 않고 진행한다.팬클럽 노드를 제외하고 방문했으면 어떻게든 만나지 않고 가는 것이니 yes, 아니면 Yes를 출력한다-> 그리고 이를 '팬클럽노드 수 s + 방문한 노드 수 = 총 노드 수' 라고 조건 걸었다하지만 이렇게 하니 예제를 넣었을 때 출력 값이 틀리게 나왔다.주어진 본문 예제가 아닌 예제 2번을 만족하지 않았다. 예제 2번을 해석해보니 '여행이 끝났다' 라는 말이 해당 노드에서 이동할 수 있는 노드가 없는 경우 라는 것을 깨달았다.양방향이 아닌 단방향 노드이니 당연히 모든 노드를 방문했을 때 여행이 끝나는 것이 아니..

코테/백준 2024.11.07

[BOJ] 1138 한 줄로 서기 (Java)

https://www.acmicpc.net/problem/1138 처음엔 순서대로 주어진 위치만큼 앞에 자리를 남겨두고 저장하고, 기존 수와 비교하며 뒤로 밀고 넣으면 되겠다하고 구현 했다.하지만 그렇게 하니 예제 4에서 결과값이 6 2 3 4 5 7 1 이 나왔다.작은 키부터 넣으면 앞에 큰 키의 개수를 제대로 고려하지 못하는 것이었다. 그래서 큰 키부터 넣어야 된다는 것을 깨달았다.1. 큰 키서부터 주어진 위치만큼 앞에 남겨두고 위치시킨다.2. 만약 해당 자리에 값이 이미 들어있다면 해당 값은 무조건 더 큰 값이 있을 것이므로 뒤로 쭉 밀고, 지금 값을 자리에 위치시킨다.3. 그렇게 위치시킨 값을 출력하면 끝! package BOJ.Greedy;import java.io.BufferedReader;i..

코테/백준 2024.11.07

99클럽 코테 스터디 10일차 TIL BFS(특정 거리의 도시 찾기)

https://www.acmicpc.net/problem/18352 오늘 문제는 단순 BFS지만 고려해야 하는 조건이 많은 문제였다,,1. 양방향이 아닌 단방향 그래프2. 방문 가능한 도시를 오름차순으로 출력 -> pq에 넣어서 출력했다.3. 방문 가능한 도시가 0이면 -1 출력 -> 도시 방문 여부를 flag로 검사했다. 요 3개 조건만 잘 적용하면 되는 문제였는데, 난 여기에 방문 조건을 잘못 걸어서 출력초과와 틀렸습니다를 계속 받았다,,** 고려하지 못했던 부분1. 거리가 K를 넘어가면 q에 넣을 필요가 없다.2. q에 안넣어도 방문 처리는 해줘야 한다!!!package STUDY.Week02;import java.io.BufferedReader;import java.io.IOException;im..

코테/백준 2024.11.06

[프로그래머스] 301649 대장균의 크기에 따라 분류하기 2 (MySQL)

https://school.programmers.co.kr/learn/courses/30/lessons/301649 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제를 읽고 처음 들었던 생각은 가장 긴 길이를 기준으로 4등분하면 되겠다고 생각하고 짰다.하지만,, 출력결과를 보고 깨달았다. 길이는 기준이 되지 못하겠구나..!! => 2 2 2 2 12 12 12 12 가 있다면, 2들은 무조건 LOW로 출력된다,,그래서 아래의 결과가 나왔다.SELECT ID, (CASE WHEN SIZE_OF_COLONY >= MAX_SIZE*0.75 THEN 'CRITICAL' ..

99클럽 코테 스터디 9일차 TIL BFS(나이트의 이동)

https://www.acmicpc.net/problem/7562 최소 몇 번만에 이동할 수 있는지 = BFS이동가능한 방향은 8가지 (-2, 1) (-1, 2) (1, 2) (2, 1) (2, -1) (1, -2) (-1, -2) (-2, -1) 이다.큐에 들어있는 모든 칸들이 한꺼번에 1번씩 이동하다가 목적지에 도착하는 이동 거리를 계산해야 하므로 qSize 만큼 돌리면서 cnt++ 해주고,목적지에 도착했을 때의 cnt 값이 답이된다.  package STUDY.Week02;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import jav..

코테/백준 2024.11.05