분류 전체보기 70

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

[BOJ] 16953 A->B (Java)

https://www.acmicpc.net/problem/16953 A에서 B를 만드는 방법은 여러개이고, 현재 값에서 다음 값으로 갈때 어떤 연산을 해야 더 빠른지 알 수 없다.하지만 역순으로 생각하면 다르다! B에서 1이 있으면 무조건 1을 더하는 연산을 쓸 수 밖에 없으니 이 연산을 우선순위로 두고 나아가면 된다.즉, B -> A로 가면서 1이 있으면 1을 제외하고, 1이 없으면 2를 나누고, 두 연산 다 되지 않거나 B의 연산값이 A보다 작아지면 -1을 출력한다. package BOJ.Greedy;import java.util.Scanner;public class BOJ_16953_AtoB { public static void main(String[] args) { Scanner..

코테/백준 2024.11.04

[BOJ] 19941 햄버거 분배 (Java)

https://www.acmicpc.net/problem/19941 처음으로 그리디 문제 읽으면서 떠오른 생각왼쪽에 있는 버거부터 먹어야 사람이 먹을 수 있는 버거의 수가 최대가 된다.사람을 만났을 때 왼쪽부터 k만큼 탐색해서 버거가 있으면 먹고, 없으면 오른쪽 버거를 먹으면 된다.한번 먹은 버거는 또 먹을 수 없으니 check 배열로 먹은 버거는 체크해준다.  package BOJ.Greedy;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class BOJ_19941_햄버거분배 { static int n, k; ..

코테/백준 2024.11.04

[BOJ] 1449 수리공 항승 (Java)

https://www.acmicpc.net/problem/1449  그리디는 항상 해결방법을 떠올리는 게 참 어려운 것 같다,,이 문제는 주어진 물이 새는 곳의 위치를 정렬 해 두고, 주어진 테이프 길이 안에 위치하는 지 확인하면 되는 문제이다.즉, 첫번째 위치에서 -0 .5를 시작지점(left)로 두고 + 테이프의 길이(l) 안에 다음 물이 새는 위치가 더 오른쪽에 위치한다면테이프의 개수를 1 카운트하고, 시작지점을 다음 물이 새는 위치 - 0.5 지점으로 변경해주면 된다.  package BOJ.Greedy;import java.util.Arrays;import java.util.Scanner;public class BOJ_1449_수리공항승 { public static void main(Str..

코테/백준 2024.11.04

[BOJ] 2217 로프 (Java)

https://www.acmicpc.net/problem/2217 각 각의 로프의 최대 중량이 주어지고, n개의 로프를 병렬로 이용하면 물체 무게를 n빵해서 들어올릴 수 있다.주어진 예제로 생각해 보자면, 15 로프를 이용하면 최대 15까지 들 수 있지만 10 로프를 함께 이용하면 최소 중량인 10의 2배(로프가 2개니까)까지 들 수 있다.그럼 10과 15 로프를 병렬로 이용하는 게 최선이다.만약, 주어진 로프가 5와 20 이라면 20 로프 하나로 20을 들 수 있고, 5 로프를 함께 이용하면 5*2=10밖에 들지 못한다.따라서 20로프를 하나만 이용하는 게 최선이다.이를 통해, 우선 병렬보다는 최대 중량의 로프 1개를 이용할 때를 확인해보는 게 우선순위라는 것을 알 수 있고, 그 뒤로는 n빵일 때를 차..

코테/백준 2024.11.04

[BOJ] 1789 수들의 합 (Java)

https://www.acmicpc.net/problem/1789 https://www.acmicpc.net/problem/2457 문제 부분집합으로 풀다가 시간초과 나서 보니 그리디,,,어려워 그리디,, 이번주는 그리디 뿌셔야겠다싶어서 시작으로 고른 문제N의 최댓값을 고르기 위해서는 1부터 1+2+3+4+5+... 더해가다가 S를 딱 넘은 시점에 숫자 하나만 빼주면 된다.즉, S가 11 이라고 했을 때, 1+2+3+4+5 일 때 4를 빼주면 됨!package BOJ;import java.util.Scanner;public class BOJ_1789 { public static void main(String[] args) { Scanner sc = new Scanner(System.in..

코테/백준 2024.11.04