자바 129

[Java] 백준 17404번 : RGB거리 2

1. 문제 https://www.acmicpc.net/problem/17404 17404번: RGB거리 2 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 2. 풀이 과정 1 => N번째 집을 차례대로 색을 칠한다. 각자 자신의 앞의 집의 색깔만 피하면 된다. 단, 마지막 집은 첫 번째 집의 색깔도 고려해야하기 때문에 처음부터 첫 번째 집의 색에 따라 나눠 계산했다. 첫 번째 집 색에 따라 R[], G[], B[]를 만들어서 값을 업데이트해갔다. 이는 Dynamic Programming을 사용한 풀이 방법이라 ..

[Java] 백준 1300: K번째 수

1. 문제 https://www.acmicpc.net/problem/1300 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 2. 풀이과정 1. mid보다 작거나 같은 값 개수 세기 n이 5이고 검사하는 값을 mid = 6이라고 할 때, 6보다 작거나 같은 값의 개수를 세는 법은 아래와 같다. 1*1, 1*2, 1*3, 1*4, 1*5 2*1, 2*2, 2*3, 2*4 ,2*5 3*1, 3*2, 3*3, 3*4, 3*5 4*1, 4*2, 4*3, 4*4, 4*5 5*1, 5*2,..

[Java] 백준 2206번 : 벽 부수고 이동하기

1. 문제 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 2. 풀이과정 최단거리 구하기는 보통 bfs, 도착지점까지 경로를 구한다면 dfs를 주로 사용하는 것 같다. 이 문제는 최단거리를 구하는 문제로 bfs를 사용하여 풀었다. 최단거리만큼만 모든 경로를 탐색하기 때문에 최악의 경우(모든 경로 끝까지 전체탐색)을 막을 수 있다. 처음에는 boolean visited[N][M][2]로 3차원배열을 사용해서 visited..

[Java] 백준 17135번 : 캐슬 디펜스

1. 문제 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 2. 풀이과정 1. 궁수 3명의 위치에 대해 조합 구하기 2. 각 조합마다 simulation() 실행 [Simulation] 1.시간이 N(배열의 세로)만큼 지나서 더 봤자 적들이 없는 경우 or 그 전에 적들을 다 물리친 경우 반복 종료 1-1. 각 궁수마다 bfs로 가장 가까운 적을 찾음 but 찾고 있는 거리가 D보다 커지면 다음 궁수로 넘어감. 1-2. 가장 가까운 적을 찾으면, -cas..

[Java] 백준 15686 : 치킨 배달

1. 문제 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 2. 풀이 과정 1) 입력을 받으면서 집과 치킨집의 위치를 각각 저장 2) 저장된 치킨 집 중 M개를 뽑는 조합 구현 3) 조합마다 결과를 비교해서 최소값 찾기 tip) 집과 치킨집과의 거리는 매조합마다 쓰이므로 미리 저장해놓고 가져다 쓴다. import java.io.BufferedReader; import java.io.InputStreamReader; impo..

[JAVA] 람다 lambda

1. 람다(lambda)란? - "Functional Interface"라고 부름. - 추상메소드 1개만 존재하는 인터페이스 이해를 위해 인터페이스를 보기 전에 클래스로 먼저 접근하였다. 인터페이스의 구현(implements)과 클래스 상속(extends)을 같은 원리로 이해할 수 있기 때문이다. *lambda의 활용법만 보려면 앞의 단계 건너뛰고 3-2를 확인 2. 할당할 때, 클래스 상속받기 1. 객체를 선언해서 사용 public class LambdaTest { //생성자 public LambdaTest() { //재정의한 객체 생성 후, 사용 t.func(); } //새로운 클래스 class Test{ void func() { System.out.println("Testfunc"); } } //T..

CS/기타 2022.02.06

[JAVA] 문자열 처리

1. 문자열 복사 1. System.arraycopy - parameter = (뭐를, 어디서부터, 어디로, 어디서부터, 몇 개) int[] arr = {1, 2, 3, 4, 5, 6}; int[] brr = {10, 20, 30, 40, 50, 60}; System.arraycopy(brr, 0, arr, 0, 3); 2. Arrays.copyOf - parameter = (뭐를, 몇 개) - 내부적으로 System.arraycopy를 호출 - 복사해서 새로운 객체를 만들어 그대로 할당 = brr을 갈아 엎는다. int[] arr = {1, 2, 3, 4, 5, 6}; int[] brr = {10, 20, 30, 40, 50}; brr = Arrays.copyOf(arr, arr.length); //b..

CS/기타 2022.02.05

[Java, Python] 백준 1011번 : Fly me to the Alpha Centauri

1. 문제 https://www.acmicpc.net/problem/1011 1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행 www.acmicpc.net > 증가량은 한 번에 1만큼 증가 및 감소가 가능하다. 유지도 가능 > 1로 시작해서 1로 끝나야 한다. 2. 풀이 과정 *Key : 최소한의 작동 횟수 = 한 번에 갈 수 있는 거리를 최대로 해야 한다. 1) 유지하는 경우를 제외하고 생각했을 때 1, 2, ... ,n-1 , n , n-1, ... , 2, 1 의 형태가 최소한의 횟수로 도..