[백준][Java] 1967번 트리의 지름
·
백준/DFS&BFS
문제 링크https://www.acmicpc.net/problem/1967 문제 풀이한 정점에서 가장 먼 정점을 찾으면 찾은 정점이 무조건 지름의 끝점 중 하나이고그 끝점을 기준으로 가장 먼 점까지의 거리를 찾으면 반드시 지름이다.트리를 탐색하는 알고리즘은 DFS/BFS 상관없습니다. 다만 재귀는 트리가 깊으면 문제가 될 수 있기에 주의 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main { static List> graph = new ArrayList(); static boolean[] visited; static int max = 0; static ..
[백준][Java] 19942번 다이어트
·
백준/구현
문제https://www.acmicpc.net/problem/19942 풀이그리디하게 풀 수 있는 방법이 떠오르지않았습니다. 그래서 백트래킹으로 순회하면서 찾기로했습니다.우선 영양소의 최소 조건을 설정한 뒤 백트래킹으로 순회하면서 매번 최소 영양소 수치를 충족하는지 확인했습니다.코드가 길어질 것 같아서 클래스로 따로 설정해서 풀어주었습니다. 코드import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main { static String comboStr = ""; static int[] minimumNutrient = new int[4]; static int minCost ..
[백준][Java] 23350번 K 물류창고
·
백준/구현
문제 링크https://www.acmicpc.net/problem/23350 문제 풀이구현문제입니다.우선순위는 1에 가까울수록 낮은 우선 순위이며, M에 가까울수록 높은 우선순위를 갖습니다.주의해야하는 부분은 우선순위가 높다해서 먼저 적재하는 것이 아니라, '낮은 우선순위'를 가질수록 먼저 적재합니다.(깔아뭉개져도 상관없으니, 먼저 적재하는 것 같음)낮은 우선순위에 따라 적재해야하며, 먼저 적재해야할 컨테이너가 레일에 있다면 그 외의 컨테이너는 레일의 처음으로 옮깁니다. 이때 비용은 무게만큼 지불해야합니다.그리고 같은 우선순위를 가진 컨테이너 사이에서는 무게를 위에서부터 내림차순으로 쌓아야합니다.(무거운 것부터 아래로)이때 먼저 적재된 컨테이너가 '현재 적재해야할 새로운 컨테이너'보다 무게가 적다면 있다..
[백준][Java] 12834번 주간 미팅
·
백준/최단거리
문제 풀이문제를 읽다보면 전형적으로 다익스트라 방식으로 구현해야한다는 것을 알 수 있습니다. 코드import java.io.*;import java.util.*;import java.util.stream.Collectors;public class Main { static int[][] graph; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // KIST 기사단 N명의 집이 있는 노드 번호 // KIST, 씨알푸드의 노드 번호 // 한 사람의 거리 di =..
[백준][Java] 13904번 과제
·
백준/그리디
문제 풀이백트래킹으로 풀어야하는가? 아니면 그리디로 풀 수 있는가? 2개의 고민부터 시작했다.항상 시작은 완전탐색으로 생각해본다. 과제를 백트래킹으로 골라서 풀 수 있지않을까? 라는 생각이 들었지만 뚜렷하게 몇 개를 선택해야하는지를 알 수 없어서 그리디 풀이로 가야한다는 것으 느꼈다.(문제 제출 의도를 파악하려고 하는 편입니다. 운이 좋아서 떄려 맞춘걸수도.) 그리디로 풀게된다면 어떤 것이 주안점일까? 빠른 날짜와 큰 점수 중에서 고민이 되었다. 하지만 문제에서는 가장 큰 점수를 얻는 경우를 찾는 것이기 때문에 점수가 큰 과제들부터 먼저 해치우는걸로 생각을 바꾸었다. 그래서 가장 큰 점수의 문제부터 가능하다면 먼저 제출하는 쪽으로 코드를 작성했고, 아래의 코드가 만들어졌다. 코드import java.io..
[Java] Volatile: 메모리 가시성과 멀티스레딩
·
Dev Lang/Java
Java의 Volatile 키워드: 메모리 가시성과 멀티스레딩백엔드 개발자로서 멀티스레드 환경을 다루다 보면, 데이터의 일관성과 가시성 문제가 자주 발생합니다.특히 Java 개발자라면 Volatile 키워드가 왜 중요한지, 그리고 이를 어떻게 활용할지 이해하는 것이 핵심입니다. 이 글에서는 Volatile의 기본 개념부터 Java Memory Model(JMM)까지 단계적으로 설명하겠습니다. 실제 코드 예시를 통해 개념을 구체화하고, 나중에 다시 읽을 때 도움이 되도록 깊이 있게 다루겠습니다. 메모리 가시성(Memory Visibility)멀티스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지에 대한 문제를 메모리 가시성(Memory Visibility)이라고 합니다. 이름 그대로 ..
[백준][Python] 20006번 랭킹전 대기열
·
백준/구현
https://www.acmicpc.net/problem/20006 문제 코드def solution(): p, m = map(int, input().split()) # 방의 레벨 제한 키: 순서, [레벨, 인원 수] room_info = dict() # 방에 누가 있는지 키: 순서, 누가있는지 room_players = dict() idx = 0 # 방은 생성순, 플레이어는 사전순 for _ in range(p): level, name = input().split() level = int(level) is_join = False for key in room_info.keys(): limit_l..
[백준][Python] 1863번 스카이라인 쉬운거
·
백준/스택 & 큐
문제 풀이주어지는 n이 최대 50,000 이고 x 좌표의 범위는 1,000,000,0 이고 y좌표의 범위는 500,000이기에 이차원 리스트로 풀어볼 생각은 버리게 되었습니다.일차원 리스트로 좌표의 높이를 나타내야겠다라는 생각이 들었습니다. 현재 주어진 좌표를 기준으로 이전 좌표들 중에서 더 높은 좌표들을 빌딩으로 치환합니다. 스택으로 문제를 풀어도 되고 저는 중복된 수를 처리하기 위해서 딕셔너리로 처리했습니다. 코드from collections import defaultdictdef solution(): n = int(input()) heights_set = defaultdict(int) answer = 0 for _ in range(n): x, y = map(int,..
개발자 성현
개발새발 블로그