분류 전체보기 56

[백준17615] 볼 모으기 - 자바(JAVA)

1. 문제 https://www.acmicpc.net/problem/17615 17615번: 볼 모으기 첫 번째 줄에는 볼의 총 개수 N이 주어진다. (1 ≤ N ≤ 500,000) 다음 줄에는 볼의 색깔을 나타내는 문자 R(빨간색 볼) 또는 B(파란색 볼)가 공백 없이 주어진다. 문자열에는 R 또는 B 중 한 종류만 주 www.acmicpc.net 2. 풀이 볼이 모여있는 뭉탱이(?)의 갯수가 홀수일 때/짝수일 때 경우의 수를 나눠서 문제를 풀었습니다. 볼 뭉탱이 갯수가 `홀수`일 때 R / BBB / R / B / RRR 이면 뭉탱이가 홀수개 입니다. `하나(R)`은 왼쪽 끝, 오른쪽 끝에 감싸고 있고 `하나는(B)`는 사이에 껴 있습니다. R은 왼쪽 끝(1개), 오른쪽 끝(3개) 중에서 많은 쪽으로..

알고리즘 2023.08.03

[백준2615] 오목 - 자바(JAVA)

1. 문제 https://www.acmicpc.net/problem/2615 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 2. 풀이 문제에서 주의할 내용은 다음과 같습니다. 여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다. 가장 왼쪽에 있는 바둑알의 가로줄 번호와, 세로줄 번호를 순서대로 출력 저는 가장 왼쪽에 있는 바둑알을 출력해야하기 때문에 map[row][col] 에서 열->행 순서로 탐색을 했습니다. EX) map[0][0] map[1][0] map[2][0] map[3][0]... ma..

알고리즘 2023.08.02

모던 자바 인 액션 - CH03. 람다 표현식

들어가기에 앞서 ... 이 장에서는 람다 표현식을 어떻게 만드는지, 어떻게 사용하는지, 어떻게 코드를 간결하게 만들 수 있는지 설명한다. 또한 자바 8 API에 추가된 중요한 인터페이스와 형식 추론 등의 기능도 확인한다. 마지막으로 람다 표현식과 함께 위력을 발휘하는 새로운 기능인 메서드 참조를 설명한다. 3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름이 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 람다의 특징 익명 : 보통의 메서드와 달리 이름이 없다. 구현해야 할 코드에 대한 걱정거리가 줄어든다. 함수 : 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다...

JAVA 2023.07.30

모던 자바 인 액션 - CH02. 동작 파라미터화 코드 전달하기

들어가기에 앞서.. 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드 블록을 의미한다.이 코드 블록은 나중에 프로그램에서 호출한다. 즉, 코드 블록의 실행은 나중으로 미뤄진다. 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있다. 결과적으로 코드 블록에 따라 메서드의 동작이 파라미터화 된다. 따라서, 변화하는 요구 사항에 유연하게 대응할 수 있다. 그런데, 동작 파라미터화를 추가하려면 쓸데없는 코드가 늘어난다. 자바 8은 이 문제를 람다 표현식으로 해결한다. 2.1 변화하는 요구사항에 대응하기 하나의 예제를 선정한 다음에 예제 코드를 점차 개션하면서 유연한 코드를 만드는 모범사례로 설명할 것이다. 기존의 농장 재고목록 애플리케이션에 리스트에서 녹색 사과만 필터링하는 기능을 추가한다..

JAVA 2023.07.29

[백준11286] 절댓값 힙 - 자바(JAVA)

1. 문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 2. 풀이 "절댓값으로 배열하되, 절댓값이 같다면 음수부터 배열"하는 것이 문제이다. 따라서 Comparator 인터페이스의 compare 메소드를 오버라이딩 하는 것이 문제의 핵심이다. Priority Queue Priority Queue는 힙 구조를 이용해서 만드는데 큰 값이 맨 앞으로 가는 최대힙, 작은 값이 맨 앞으로 가는 최소힙이 있다고 생각하면 된다. J..

알고리즘 2023.07.29

모던 자바 인 액션 - CH01. 자바 8, 9, 10,11 : 무슨 일이 일어나고 있는가?

1.1 역사의 흐름은 무엇인가? 가장 큰 변화는 자바 8에서 일어남 멀티코어 CPU 대중화가 영향을 미침 -> 자바8은 간결한 코드, 멀티코어 프로세서의 쉬운 활용을 바탕으로 탄생 스트림 API - 병렬 연산을 지원 메서드 코드를 전달하는 기법 - 새롭고 간결한 방식으로 동작 파라미터화를 구현 가능 인터페이스의 디폴트 메서드 자바 8은 함수형 프로그래밍에서 위력을 발휘한다. 1.2 왜 아직도 자바는 변화하는가? 특정 분야에서 장점은 가진 언어는 다른 경쟁 언어를 도태시킨다. 1.2.1 프로그래밍 언어 생태계에서 자바의 위치 이전에 자바는 객체지향 모델 덕분에 대중적인 프로그래밍 언어로 성장할 수 있었다. 하지만 이후에, 빅데이터를 효과적으로 처리할 필요성이 커졌다. 이전의 자바로는 충분히 대응할 수 없었..

JAVA 2023.07.25

[백준2302] 극장 좌석 - 자바(JAVA)

1. 문제 https://www.acmicpc.net/problem/2302 2302번: 극장 좌석 주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1) www.acmicpc.net 2. 풀이 제가 짠 코드의 알고리즘은 `isVIP`라는 boolean 배열을 두어서 VIP좌석 표시하였습니다. `isVIP`를 탐색하다가 VIP좌석이 아닐때 count를 세고 VIP좌석을 발견했을 때 `dp[count]`를 결과값에 곱해주는 것입니다. 그래서 구현 편리성을 위해서 배열의 마지막 좌석 뒤(N+1)에 임의로 true로 하였습니다. `dp[n]`은 (VIP아닌)연속된 좌석이 n개 있을 때..

알고리즘 2023.07.21

[백준3085] 사탕 게임 - 자바(JAVA)

1. 문제 https://www.acmicpc.net/problem/3085 3085번: 사탕 게임 예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다. www.acmicpc.net 2. 풀이 브루트포스 알고리즘을 사용해서 문제를 풀었다. 먼저 사탕을 교환하는 모든 경우의 수를 구현하였다. 여기서 중요한 점은 만약 (i, j)와 (i+1, j) 사탕을 교환했다면 즉, 위아래 사탕을 교환했다면 `i행, i+1행, j열`을 검사해서 얻을 수 있는 최대 사탕 갯수를 구해주었다. (i, j)와 (i, j+1) 사탕을 교환했다면 즉, 좌우 사탕을 교환했다면 `j열, j+1열, i행`을 검사해서 얻을 수 있는 최대 사탕 갯수를 구해주었다. 행과 열에서 최대 사탕 갯수를 구해주는 함수는 각각 c..

알고리즘 2023.07.20

[백준20055] 컨베이어 벨트 위의 로봇 - 자바(JAVA)

1. 문제 https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 2. 풀이 이 문제를 풀 때 첫 번째로 문제를 이해하는데 어려움이 있었고 두 번째로 컨베이어 벨트와 로봇 위치를 어떻게 저장할 것인가 였다. 나는 문제를 이렇게 풀었다. `컨베이어 벨트 각각의 칸`을 Space라는 클래스를 만들어서 객체로 만들었다. `컨베이어 벨트`를 Space 클래스를 자료형?으로 가진 ArrayList로 만들었다. 1~4 동작을 각각 4개의 메..

알고리즘 2023.07.19

[백준2178] 미로탐색 - 자바(JAVA)

1. 문제 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 2. 풀이 DFS 알고리즘을 사용해서 문제를 풀었다. 2차원 배열 min에 해당 칸에 몇 번만에 도착할 수 있는지 `최소값`을 저장하도록 했다. 다음 (next_r, next_c)에 몇 칸만에 왔는지(depth+1)를 min[next_r][next_c]과 비교해서 최솟값이 아닐 시에 탐색을 중단하도록 해서 탐색시간을 줄였다. 처음에 depth+1과 min[next_r][next_c]가 같을 때에도 탐색하도록 했다가 시..

알고리즘 2023.07.18