본문 바로가기

분류 전체보기

(201)
[BOJ 1933] 스카이라인(Java, Treemap, 설명, 간단한 코드) https://www.acmicpc.net/problem/1933 1933번: 스카이라인 첫째 줄에 건물의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 N개의 건물에 대한 정보가 주어진다. 건물에 대한 정보는 세 정수 L, H, R로 나타나는데, 각각 건물의 왼쪽 x좌표, 높이, 오� www.acmicpc.net 스카이라인을 형성할 때, 위의 건물들의 각 시작점과 끝점을 살펴보면 가장 높은 건물의 높이를 따라가게 되어있다. 즉. 빨간색으로 표시한 점들을 모두 조사해서 걸쳐진 빌딩 중 가장 높은 높이를 표기해주면 된다. 걸쳐진 빌딩 중 가장 높은 높이를 찾는 방법은, 높이를 내림 차순으로 정렬하는 자료구조를 사용해야 한다. 또한 끝난 빌딩의 높이에 대해서는 연산하지 않기 위해서,..
[BOJ 1863] 스카이라인 쉬운거(Java, Stack) https://www.acmicpc.net/problem/1863 1863번: 스카이라인 쉬운거 첫째 줄에 n이 주어진다. (1≤n≤50,000) 다음 n개의 줄에는 왼쪽부터 스카이라인을 보아 갈 때 스카이라인의 고도가 바뀌는 지점의 좌표 x와 y가 주어진다. (1≤x≤1,000,000. 0≤y≤500,000) 첫 번째 지점 www.acmicpc.net 1. 주어진 입력에서 y와 높이가 같은 건물은 최소 1개 존재해야 한다. 2. 최소 1개는 존재해야 하는 건물이 최대한 넓은 범위를 커버해야, 최소의 갯수를 찾을 수 있다. 3. 고도가 변하는 지점들을 모두 체크하면서, Stack 자료구조를 이용한다. * 고도가 같다면 그대로 가면되고, 고도가 낮다면 건물의 개수가 추가되어야 한다. 해설코드(Java). ..
[BOJ 10799] 쇠막대기(Java, Replace, 직관적인 풀이) https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저� www.acmicpc.net 1. 우선, 문자별로 처리를 하기 위해서 "()"을 모두 replace한다. * 함수를 쓸 때, str.replaceAll("()", "r")을 하면 안되고, '('와 ')'은 모두 escape 문자이므로 앞에 '\\'을 붙여줘야 한다. 2. 레이저 포인트를 쐈을 때, 레이저 이전의 막대의 개수를 파악하고 모두 더한 후에 마지막 막대의 개수만 더해준다. * 막대의 개수를 파악하기 위해서, cur과 end라..
[BOJ 3671] 산업 스파이의 편지(Java, 소수 구하기, DFS) https://www.acmicpc.net/problem/3671 3671번: 산업 스파이의 편지 문제 안녕하세요. 저는 산업 스파이입니다. 저의 정체를 절대 다른 사람에게 말하지 말아주세요. 저의 가장 최근 일은 유명한 수학 연구소의 최신 연구 결과를 훔쳐오는 것이었습니다. 저는 매�� www.acmicpc.net 1. 주어진 문자열을 순열로 나열해서 소수인지 판단하기 2. 소수가 맞다면, 중복 제거를 위한 Set 자료구조에 넣기 3. Set의 Size 출력하기 * 소수인지 판단하는 가장 효율적인 알고리즘 판단하는 수의 루트값을 이용해서 for문을 작성하면 된다. 루트값까지만 사용하면, 소수인지 아닌지 판별할 수 있다. 왜냐하면, 루트값 이후의 값들은 모두 루트값 이전 약수들을 이용해서 만들 수 있기 ..
[BOJ 2981] 검문(Java, 유클리드 호제법, Set) https://www.acmicpc.net/problem/2981 2981번: 검문 문제 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 � www.acmicpc.net 이 문제 풀이의 핵심은 유클리드 호제법이다. 유클리드 호제법은 어떤 수 a와 b가 있을 때(a > b), a와 b의 최대공약수는 b와 a % b와 동일하다. 증명은, 다음 유튜브를 참고하길, https://www.youtube.com/watch?v=J5Yl2kHPAY4 1. 인접한 수들을 정렬한다. * 정렬의 이유는, gcd에 들어가는 매개변수가 음수가 되지 않기 위해서이다. 음수가 되지 않도록 조건을 단다면..
[BOJ 7569] 토마토(JAVA, BFS, QUEUE) https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 1. 익은 토마토 위치 구하고 큐에 넣기 2. 큐에 들은 아이템을 기반으로 BFS 탐색을 통해서, 더 이상 익은 토마토가 추가되지 않으면 종료. * 큐에 들은 아이템을 이용, 토마토 배열을 탐색하면 시간초과 발생. 해설코드(C++). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3..
[BOJ 11652] 카드(자바 적응기, 자료구조, Hashmap sort by key and value) https://www.acmicpc.net/problem/11652 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net 1. ==은 equals와 다르다. - 자바에서는 ==은 reference를 의미하기 때문에, value 비교가 아니다. 따라서, equals를 사용해야 한다. 2. Hashmap 자료구조 키와 값으로 정렬하기 - 새로운 Comparator를 만들고, compare 함수를 오버라이딩한다. 해설코드(Java) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19..
자바 공백포함 문자열 읽고 단어 단위로 자르기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { // your code goes here Scanner sc = new Scanner(System.in); String s; s = sc.nextLine(); StringTokenizer str = new StringTokenize..