2024/10/01 3

2493 - 탑 (Java)

문제https://www.acmicpc.net/problem/2493 풀이스택을 활용한 문제이다. 스택을 활용해서 내 기준 왼쪽편에 나보다 큰 건물을 빠르게 찾을 수 있다. 스택에는 [건물번호, 건물높이] 형태로 저장하며, case 1. 스택이 빈 경우에는 -> 앞에 나보다 큰 건물이 없다는 뜻, 0번으로 세팅하고 스택에 현재 건물을 넣어준다. case 2. 스택 값이 건물높이가 나보다 작다면           -> 스택 값이 나보다 클 때까지 빼준다. (스택에 있는 높이가 크다면 내가 찾던 가장 가까운 건물을 의미한다.)           -> 큰 값이 나오면 해당 건물 번호로 세팅해주고, 스택에 현재 건물을 넣어준다. 정리하면 스택에서 현재 건물보다 큰 값이 나올때까지 빼주다가, 큰 값이 나오면 해당..

백준 2024.10.01

1253 - 좋다 (Java)

문제https://www.acmicpc.net/problem/1253 풀이투 포인터를 활용해서 풀어야하는 문제이다. 값을 오름차순 정렬한다음, 가장 앞과 가장 뒤에 포인터를 위치시킨다. 포인터에 위치한 두 값을 더한 값이, 내가 선택한 값보다 크다면 -> 뒤의 포인터를 줄인다.내가 선택한 값보다 작다면 -> 앞의 포인터를 늘린다. 포인터를 이동할 때 선택한 숫자는 선택이 안되야하므로 이 부분은 예외처리 해주면 된다. 코드import java.util.*;import java.io.*;import java.util.stream.Collectors;public class Main { public Integer solution() throws Exception { BufferedReader ..

백준 2024.10.01

20955 - 민서의 응급 수술 (Java)

문제https://www.acmicpc.net/problem/20955 풀이유니온 파인드를 활용해서 쉽게 풀 수 있는 문제이다. 뉴런은 노드, 시냅스는 엣지로 표현한다. 우선 입력으로 들어오는 값들을 연결하되, 사이클이 발생하면 연결을 끊는 과정을 거쳐야하기 때문에 연산횟수에 1을 더해준다. 그렇게 입력값이 다 끝났다면, 그룹을 확인해서 몇번의 연결 연산을 더 해야하는지 계산해주면 된다. 예로 그룹이 3개로 나뉘어져있다면 2번의 연결 연산이 더 필요한것이다. 단 주의해야할점이 union find 를 사용하다보면 내가 속한 부모의 그룹을 가리키고 있기 때문에 그룹의 개수를 구할려면 find 연산으로 계산을 하던가, 아니면 최적화 작업을 거쳐서 그룹번호를 가질 수 있도록 설정해두어야 한다.     코드imp..

백준 2024.10.01