Java18 [백준 Java] 수들의 합2 🔗 문제링크 🔗 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 🌟 생각 흐름 🌟 이런 비슷한 문제를 기업코테에서 한번 본적이 있다. 부분합을 이용한 문제여서 해당 아이디어만 알고 있다면 쉽게 해결 할 수 있다. index 1 2 3 4 5 갑 1 2 3 1️⃣ (현재값) 2 1 연속된 수의 합 1 3 2️⃣ (이전 값까지의 합) 6 1️⃣ + 2️⃣ = 3️⃣ 8 9 부분적인 합을 구하는방법 arr[1] - arr[0] =1 arr[2]-arr[1]=2 arr[3]-.. 알고리즘 2023. 5. 9. [백준 java] 소가 길을 건너간 이유 14466 🔗 문제링크 🔗 14466번: 소가 길을 건너간 이유 6 첫 줄에 N, K, R이 주어진다. 다음 R줄에는 한 줄에 하나씩 길이 주어진다. 길은 상하좌우로 인접한 두 목초지를 잇고, r c r′ c′의 형태 (행, 열, 행, 열)로 주어진다. 각 수는 1 이상 N 이하이다. www.acmicpc.net 🌟 생각 흐름 🌟 먼저 가지 못하는 길을 저장해야 한다고 생각했습니다. 만약 리스트 형태로 저장하게 된다면 탐색에 너무 많은 시간이 걸리고 map의 사이즈가 100*100이므로 배열의 형태로 저장하는 것이 이득이라 생각하였습니다. 문제는 길의 startx, starty, endx, endy 형태로 주어지기 때문에 어느방향으로 길이 있는지 저장해야 합니다. 따라서 direction 방향에 따라 확인해보면서 .. 알고리즘/백준 2023. 5. 5. [백준 1939] 중량제한, 크루스칼 풀이 🔗 문제링크 🔗 1939번: 중량제한 첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 www.acmicpc.net 🌟 생각 흐름 🌟 기존의 크루스칼 문제에서는 최단 경로를 계산하기 위해서 최단 경로를 기준으로 정렬을 하였다 하지만 해당 문제에서는 다리를 건널 때 가장 많이 적재할 수 있는 양을 물어보는 것이므로 가장 높은 값을 기준으로 정렬한다(내림차순) 만약 시작 지점과 끝지점이 한사이클안에 있다고 판단되는 순간 현재 적재량을 싫고 나를 수 있다는 소리이므로 멈추고 리턴한다. -- 이진탐색을 이용한.. 알고리즘/백준 2023. 5. 4. [백준 Java] 1253 좋다 🔗 문제링크 🔗 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 🌟 1번 풀이 ❯❯ 해시를 이용한 풀이 🌟 그냥 해시만 이용해도 풀리긴 한다 (꽤나 비효율적인 방법으로) 해당 방법에서 체크할 포인트는 0인경우에 대한 반례 체크이다. 0 0 0과 같은 경우 '0' 3개가 모두 만들어질 수 있다. (더해도 값을 유지한다) 🍳 코드(시간이 더 오래 걸리는 코드) 🍳 package 백준.hash; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre.. 알고리즘 2023. 4. 29. [백준 Java]1105_팔_greedy(실버1) 🔗 문제링크 🔗 1953번: 팀배분 첫줄에는 청팀의 사람의 수를 출력하고, 그리고 둘째 줄에는 청팀에 속한 사람들을 오름차순으로 나열한다. 그리고 셋째 줄과 넷째 줄은 위와 같은 방법으로 백팀에 속한 인원의 수, 백팀에 속 www.acmicpc.net 🌟 생각 흐름 🌟 이 문제 완탐으로 해도 풀린다(0인 경우 바로 리턴하도록 하는 경우, 시간은 아주 별로로 나오지만) 처음에는 완탐으로 풀고 그리디 힌트를 얻어 그리디 방법을 생각해 봤다. 뭔가 숫자로 조합하는 느낌 이어서 푸는데 꽤나 신경쓸게 많은 구현 느낌이었다 1280 1281 -> 1개 , 숫자가 같은 경우 넘어가지만 숫자를 체크하지 않는다. 이후에 값이 다른 경우에만 브레이크 한다. 8756 12345 -> 길이가 다른 경우 비교하지 않아도 된다... 알고리즘 2023. 4. 28. JVM의 동작 방식과 메모리 구조 1. JVM의 동작 순서 1. 자바를 실행 시키면 자바 컴파일러에 의해 자바(. java) 파일이 클래스 파일(. class)로 컴파일된다. 2. 이후에 클래스 로더에 .class 파일(바이트 코드)을 로드한다. - 이 과정에서 클래스 파일은 메모리에 저장되고 파일 정보가 JVM내부에 유지된다. 3. class loder를 통해 JVM Runtime Data Area(메모리 영역)을 구성한다. (메소드 영역, 힙영역, 스택영역) -> 아래에 나오지만 간단하게 설명하면 - 1. 메소드 영역 : 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드, 변수) - 2. 힙 영역 :객체, 배열이 생성되는 영역 (new 생성자로 생성되는) - 3. 스택 영역 : 각 스레드 마나 하나씩 존재, 메소드 호출 시.. JAVA 2023. 4. 26. [백준 java] 1941 소문난 칠공주, 조합, bfs 🔗 문제링크 🔗 1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5×5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작 www.acmicpc.net 🌟 생각 흐름 🌟 25자리의 자리 중 7개의 자리를 선택하고 해당 자리들끼리 연결되어 있는지, 이다솜 편이 4명 이상인지 확인한다. 🍳 코드 🍳 package 백준.구현; import java.awt.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.. 알고리즘 2023. 4. 18. [백준 Java] 17472 다리만들기2 구현, 골드 1 🔗 문제링크 🔗 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net 🌟 생각 흐름 🌟 모든 섬을 분리해 낸다. 몇 개의 섬이 있는지 파악하고 섬을 각각 다른 색으로 색칠한다. 추가로 연결된 섬을 모두 탐색하면서 4방위로 바다가 있는 경우 해당 노드를 추가한다. 4방위로 바다가 있던 노드들만 확인한다. 4방위중 바다가 있는 방면으로 계속 진행했을 때 다른 섬이 있다면 가능한 것이다. 가능한 값이 2 이상이고, 최소 값인 경우 업데이트한다. int [][] minBridges에 각 섬에서 다른 섬.. 알고리즘 2023. 4. 5. Stream 스트림 배경 이전까지는 많은 양의 데이터 처리를 위해 배열이나 컬렉션을 이용해서 처리하며 반복문을 사용해서 접근해야 했다. 해당 방법은 코드가 길어지고 가독성이 떨어진다. 이 문제점을 해결하기 위해 스트림 API를 도입했다. 즉, 스트림은 자바 컬렉션과 배열 등의 데이터를 다룰때 유용한 기능으로 기존 데이터를 변경하지 않고 다양한 연산을 하여 결과를 새로운 스트림으로 반환한다. 장점 스트림은 데이터 소스를 추상화 하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 둔 것이다. 이를 활용하여 코드의 재사용성을 높이고 간결하고 이해하기 쉽게한다. 또한, 병렬 처리를 쉽게 할 수 있다. 특징 데이터 소스를 변경하지 않고 한번 생성되면 소모하면서 내부에서 반복하기 때문에 다시 재사용이 불가능하다. 다양한 연산으로.. JAVA 2023. 3. 19. [백준 Java] 16397 탈출 BFS 골드 4 🔗 문제링크 🔗 16397번: 탈출 첫 번째 줄에 N (0 ≤ N ≤ 99,999), T (1 ≤ T ≤ 99,999), G (0 ≤ G ≤ 99,999)가 공백 하나를 사이에 두고 주어진다. 각각 N은 LED로 표현된 수, T는 버튼을 누를 수 있는 최대 횟수, G는 탈출을 위해 똑같이 www.acmicpc.net 🌟 생각 흐름 🌟 단순 bfs방법으로 풀이했다 기존의 숨바꼭질 하고 비슷하다 2022.09.28 - [알고리즘] - [백준]12851_숨바꼭질 2 [백준]12851_숨바꼭질 2 [문제 링크] boj 12851 숨바꼭질 2 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 1.. 알고리즘 2023. 3. 19. 람다식(Lambda Expression) 람다식 메서드를 하나의 식으로 표현한 것 익명 함수의 한 종류이다. 람다식을 통해서 메서드를 변수처럼 다루는 것이 가능해졌다. 작성법 //기존 반환 타입 메서드이름(매개변수 선언){ 문장들 } //람다식 (매개변수 선언) -> { 문장들 } //람다식의 선언된 매개변수의 타입이 추론 가능한 경우 생략 가능하다(대부분 생략 가능하다) //매개변수의 타입을 선언해야 하면 (int a) -> a*a //와 같이 괄호 안에 타입 선언을 해야하지만 //타입을 선언하지 않아도 되는 경우라면 a -> a*a// 와 같이 생략 가능하다. 람다식의 장점 불필요한 코드를제거해서 코드가 간결해지고 가독성이 올라가는 장점이 있다. 또한 메서드를 전달가능하게 하면서 생산성이 높아진다. 람다식의 단점 디버깅이 어렵고, 비슷한 기.. JAVA 2023. 3. 8. Enum 클래스 열거형 : 서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유리하다. 1️⃣ 특징 열거형의 상수간의 비교에는 "=="이 사용가능하다 (빠른 성능을 제공한다) 와 같은 비교연산자는 사용이 불가능 하지만 compareTo()는 이용이 가능하다 열거형 상수 하나하나각 각 클래스의 객체이다 2️⃣ 사용법 정의 : enum 열거체이름 { 상수이름, 상수이름,... } 사용법 : 열거체 이름. 상수이름 3️⃣ enum 메서드 ordinal() : 열거체에서 정의된 순서를 반환한다.(0부터 시작한다) valuOf(상수) : 상수 반환 values() : 열거체의 모든 상수를 저장한 배열을 반환 import java.util.Arrays; public enum Prize { first.. JAVA 2023. 2. 28. 이전 1 2 다음