본문 바로가기

Java123

[프로그래머스] Lv.2 무인도 여행JAVA 풀이 문제 Lv.2 무인도 여행 : 지도 = 1 x 1 크기의 사각형으로 이루어진 직사각형 격자 형태 격자 구성 = X, 숫자 (1 ~ 9) - X = 바다 - 숫자 = 무인도 (상, 하, 좌, 우 붙어있는 애들은 하나의 무인도, 대각선은 다른땅) : 하나의 무인도 숫자 합 = 해당 무인도에서 최대로 머무를 수 있는 기한 (오름차순으로 출력) 무인도가 없는 경우 = -1 출력 : maps = 지도 (문자열 배열) [지도 배열 예시] [알고 가기] - 깊이 우선 탐색 - 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 - 스택 or 재귀함수 이용 - 제일 깊게 내려간 뒤 더이상 갈 수 없을 때 옆으로 이동해서 다시 깊게 내려가기를 반복 - 구현 : DFS (간단) > BFS - 검색 속도 : .. 2023. 9. 4.
[프로그래머스] Lv.2 광물 캐기 JAVA 풀이 문제 Lv.2 광물 캐기(DFS) -   곡괭이로 광물을 캘 때 피로도 소모 -   캐기 시작하면 한 곡괭이로 광물 5개까지 연속 캐기  -   광물은 주어진 순서대로 캐기 -   광산에 있는 광물 모두 캐거나 사용할 곡괭이가 없을 때까지 캔다  [ 피로도 ]  [ 입력 ]  -   곡괭이 개수 : picks = [다이아, 철, 돌] (정수 배열) -   광물 순서: minerals (문자열 배열)  [알고 가기]   -  깊이 우선 탐색-  그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘-  스택 or 재귀함수 이용 -  제일 깊게 내려간 뒤 더이상 갈 수 없을 때 옆으로   이동해서 다시 깊게 내려가기를 반복-  구현 : DFS (간단) > BFS -  검색 속도 : BFS  > DFS (느림) .. 2023. 9. 4.
[프로그래머스] Lv.2 요격시스템 JAVA 풀이 문제 Lv.2 요격시스템 : 여러 개구간 x좌표가 있다 이들을 모두 한번씩 관통해야 한다 최소한으로 쏠 수 있도록 최대한 겹쳐 미사일을 쏜다 ▶ targets = [ 1, 4 ], [ 3, 7 ], [ 4, 5 ], [ 4, 8 ], [ 5, 12 ], [ 10, 14 ], [ 11, 13 ] : targets 는 미사일 좌표 범위 좌표는 x좌표로만 이루어져 있고 [s,e] 로 표현 가능 이때, [s,e]는 개구간이다 (즉, 시작지점과 끝지점 미포함) [문제 방식] 1. 끝지점을 기준으로 잡아서 오름차순으로 정렬하고 시작 2. 현재 구간의 끝지점과 다음 타겟의 시작점이 겹치지 않는 순간 count 더 이상 겹칠게 없기 때문에 다음 좌표들의 미사일 쏘고 구간 계산 (이해중요! 일단은 미사일 먼저 쏴놓고 구.. 2023. 8. 28.
[백준] 1078번 소수 찾기 JAVA (자바) 풀이 문제 1978번 : 주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램 [입력] : 첫 줄에 수의 개수 N. 그 다음으로 N개의 수가 주어진다. [출력] : 소수의 개수를 출력 [코드] import java.util.*; import java.io.*; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br.readLine(); int result = 0; StringTokenizer st = new StringTokenizer(br.readLine()); while (.. 2023. 8. 25.
[프로그래머스] Lv.1 추억 점수 JAVA 풀이 문제 Lv.1 추억 점수 : 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수 매기기 : name은 그리워 하는 사람 이름 (문자열 배열) yearning은 그리움 점수 (정수 배열) photo는 사진에 찍힌 이름 (2차원 문자열 배열) (예시) name 그리운 사람 [ 수지, 짱구, 유리, 영희 ] yearning 점수 [ 5, 10, 1, 3 ] photo 사진에 찍힌 사람 # 1 [ 철수 - 짱구 - 맹구 - 훈이 ] # 2 [ 수지 - 짱구 - 유리 - 영희 ] # 3 [ 영희 - 짱구 - 맹구 - 훈이 ] 최종 결과 그리움 점수 [ 10, 19, 13 ] arr [ A ] [ B ] - A = 행 - B = 열 - 표현식 = { 열 개수만큼 . . .} { 열 개수.. 2023. 8. 21.
[백준] 1934번 최소공배수 JAVA (자바) 풀이 문제 1934번 [입력] : 첫째 줄에는 두 개의 자연수 [출력] : 첫째 줄에는 테스트 케이스의 개수 둘째 줄부터는 두 수의 최소 공배수 출력 [팁] : 최소공배수는 유클리드 호제법을 이용한다 - 최대공약수 = GCD - A와 B의 최대공약수를 (A,B)라고 할 때 최대공약수 (B,R)의 최대공약수와 같다 - A, B ∋ ℤ ( A ≥ B ) - R = A를 B로 나눈 나머지 - GCD(A,B) = GCD(B,R) - 최소공배수 = LCM - A와 B의 최소공배수는 GCD × (A/GCD) × (B/GCD) = (A×B) / GCD [코드] import java.io.*; import java.util.*; public class Main{ public static void main(String[] a.. 2023. 8. 19.
[백준] 2609번 최대공약수와 최소공배수 JAVA (자바) 풀이 문제 2609번 [입력] : 첫째 줄에는 두 개의 자연수 [출력] : 첫째 줄에는 두 수의 최대공약수 출력 둘째 줄에는 두 수의 최소 공배수 출력 [팁] : 최대공약수와 최소공배수는 유클리드 호제법을 이용한다 - 최대공약수 = GCD - A와 B의 최대공약수를 (A,B)라고 할 때 최대공약수 (B,R)의 최대공약수와 같다 - A, B ∋ ℤ ( A ≥ B ) - R = A를 B로 나눈 나머지 - GCD(A,B) = GCD(B,R) - 최소공배수 = LCM - A와 B의 최소공배수는 GCD × (A/GCD) × (B/GCD) = (A×B) / GCD [코드] import java.io.*; import java.util.*; public class Main{ public static void main(St.. 2023. 8. 18.
[백준] 10430번 나머지 JAVA (자바) 풀이 문제 10430번 [입력] : 첫째 줄에 A, B, C가 순서대로 주어진다 [출력] : 첫째 줄에 (A+B)%C 출력 둘째 줄에 ((A%C) + (B%C))%C 출력 셋째 줄에 (A×B)%C 출력 넷째 줄에 ((A%C) × (B%C))%C 출력 [코드] import java.io.*; import java.util.*; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int A = In.. 2023. 8. 18.
[백준] 11656번 접미사 배열 JAVA (자바) 풀이 문제 11656번 : 접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열 : baekjoon 접미사를 사전 순으로 정렬 → aekjoon baekjoon ekjoon joon kjoon n on oon [입력] : 첫째 줄에 문자열 S [출력] : S의 접미사를 사전순으로 한 줄에 하나씩 출력 [코드] import java.io.*; import java.util.*; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); Str.. 2023. 8. 17.
[백준] 10824번 네 수 JAVA (자바) 풀이 문제 10824번 : 네 자연수 A, B, C, D가 주어진다 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성 (ex) A = 10, B = 20, C = 10, D = 10 일 때 1020 + 1010 = 2030 [입력] : 첫째 줄에 네 자연수 A, B, C, D 입력 [출력] : A와 B를 붙인 수와 C와 D를 붙인 수의 합을 출력 [코드] import java.io.*; import java.util.*; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in.. 2023. 8. 17.