[Java] 백준 1449번 (수리공 항승)
·
BOJ, Programmers
https://www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 알고리즘 분류 그리디 정렬 풀이 그리디 알고리즘을 사용해 풀었다. 핵심 로직은 이러하다. 먼저 StringTokenizer로 물이 세는 곳을 저장한뒤, 새는 곳이 차례대로 있어야 최소한의 테이프를 쓰게 되니 정렬까지 진행했다. st = new StringTokenizer(br.readLine()); for (int i = 0; i < temp.length; i++) { temp[i..
[Java] 백준 1577 (도로의 개수)
·
BOJ, Programmers
https://www.acmicpc.net/problem/1577 1577번: 도로의 개수 첫째 줄에 도로의 가로 크기 N과 세로 크기 M이 주어진다. N과 M은 100보다 작거나 같은 자연수이고, 둘째 줄에는 공사중인 도로의 개수 K가 주어진다. K는 0보다 크거나 같고, 50보다 작거나 같은 자 www.acmicpc.net 알고리즘 분류 다이나믹 프로그래밍(dp) 풀이 처음에 dfs로 문제를 풀어야 되나 싶었지만 범위를 보고 dp문제임을 깨달았다. 먼저 초기화 작업이다. 가짓수를 저장하는 2차원 배열 dp이다. int형으로는 표현하기 어렵기때문에 long형으로 선언했다. 그리고 세로로 공사중인 곳을 저장하기 위한 horizontal, 가로로 공사중인 곳을 저장하귀 위한 vertical 배열을 선언해줬..
[Java] 자바에서의 배열 복사 방법( arraycopy(), copyOfRange(), copyOf() )
·
Java
자바에서 배열 복사 방법을 설명하겠습니다. ​ 1. for문을 사용한 배열 복사 방법 가장 기초적인 방법으로 for문으로 돌면서 값을 하나씩 넣어주는 방법이다. ​ 실행 결과는 당연히 1, 2, 3, 4, 5가 나온다. ​ ​ 2. System.arraycopy() 를 이용한 방법 arraycopy의 매개변수를 설명을하자면 num1 배열의 index 0 번부터 num2 배열의 index 0번부터 num1.length ( == 5) 만큼 배열의 복사한다는 뜻이다. ​ 당연히 실행결과는 1,2,3,4,5 가 나온다. ​ 3. Arrays.copyOfRange()를 이용한 방법 Arrays클래스의 copyOfRange함수를 이용한 배열 복사 방법이다. copyOfRange( 복사할 배열, 처음 인덱스, 마지막..
[Java] 백준 1926 (그림) 자바 문제 풀이
·
BOJ, Programmers
https://www.acmicpc.net/problem/1926 1926번: 그림어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로www.acmicpc.net알고리즘 분류너비우선 탐색깊이우선 탐색그래프 탐색 풀이그래프 탐색 문제이다. 저는 너비 우선 탐색(bfs)를 이용해 풀었다.먼저 초기화 작업이다.  x 축 좌표로 이동할 int형 배열 dx,y 축 좌표로 이동할 int형 배열 dy,그림이 그려져 있는지 안그려져 있는지 (0과 1인지) 을 구분하는 2차원 배열 map,방문했는지 안했는지 구분하는 boolean형 2차원 배열 visited,그리고 너비 우선 탐색..
[Java] 프로그래머스 (이중우선 순위 큐 )
·
BOJ, Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/42628 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 분류 힙(heap) 풀이 요소를 넣을때마다 정렬하는게 아니고 넣을 때 자기 자리를 찾아 넣는PriorityQueue 를 이용해서 풀었다. 하지만 Queue특성인 FIFO때문에 제일 큰 숫자가 뒤에 있으므로 poll을 함수를 사용해 삭제할 순 없었다. 그래서 temp 라는 큰 숫자가 앞에오는(내림차순인) PriorityQueue를 하나 더 선언했다. ​ 로직은 간단하다. 숫자가 들어오면 두..
[Java] String.split 함수
·
Java
알고리즘 문제를 풀다 split에 대해 새로운 사실을 알게되어 글을 쓰게 됐다. ​ Java에서 split 함수를 알아보겠다. 문자열을 자르고(분할하고) 배열에 반환하고 싶을 때 많이 사용하는 함수이다. 매개변수로는 regex 즉, 정규표현식이 들어갈 수 있고 정규표현식과 limit (정수) 가 함께 들어갈 수 있다. ​ 먼저 매개변수에 정규표현식만 들어간 방식이다. String으로 선언한 aPhoneNumber 에서 "-" 기준으로 잘라 String 배열 a에 반환하는 방식이다. 실행결과는 아래와 같다. ​ ​ 그 다음은 limit 매개변수 까지 들어간 방식이다. limit는 뜻 그대로 제한을 두는 매개변수 이며 문자열을 자르고 배열을 반환할 때 배열의 갯수를 제한하는 것이다. 문자열 bPhoneNum..
[Java] 백준 2822 (점수 계산)
·
BOJ, Programmers
https://www.acmicpc.net/problem/2822 2822번: 점수 계산 8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문 www.acmicpc.net 알고리즘 분류 정렬 풀이 먼저 Node라는 인덱스와 점수를 담은 내부 클래스를 생성하였다. public static class Node{ private int index; private int score; public Node(int index, int score) { this.index = index; this.score = score; } } 그리고 Node 클래스형 1차원 배열을 만든..
[JAVA] 백준 1041 (주사위)
·
BOJ, Programmers
https://www.acmicpc.net/problem/1041 1041번: 주사위 첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 쓰여 있는 수가 주어진다. 위의 그림에서 A, B, C, D, E, F에 쓰여 있는 수가 차례대로 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, 쓰여 있는 수 www.acmicpc.net 어떻게 풀까 매우 고민했었다. 정육면체의 한면의 최솟값을 구하고 x6을 할까 생각을 했었다. 하지만 정육면체중 한면, 두면, 세면만 보이는 작은 정육면체의 갯수를 구하고 그 합들을 더하기로 했다. ​ 먼저 한면만 보이는 정육면체이다. 먼저 내가 생각한 로직은 맨 위 한줄과 그 밑의 정육면체의 갯수를 구하고 그 한줄을 뺀 나머지 밑에 있는 정육면체의 갯수를 구한뒤 더하자고 생..
[Java] 래퍼(Wrapper) 클래스
·
Java
객체지향 개념에서 모든 것은 객체로 다루어져야 한다. 그러나 자바에서는 8개의 기본형(int, boolean 등등)을 객체로 다루지 않는데 이것이 바로 자바가 완전한 객체지향 언어가 아니라는 얘기를 듣는 이유이다. 그 대신 보다 높은 성능을 얻을 수 있었다. 때로는 기본형 변수도 어쩔 수 없이 객체로 다뤄야 할 하는 경우가 있다. 예를들면, 매개변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장해야할 때, 객체간의 비교가 필요할 때 등등의 경우에는 기본형 값들을 객체로 변환하여 작업을 수행해야 한다. 이때 사용되는 것이 래퍼(Wrapper) 클래스 이다. 8개의 기본형을 대표하는 8개의 래퍼클래스가 있는데, 이 클래스들은 이용하면 기본형 값을 객체로 다룰 수 있다. 기본형 래퍼클래스 기본형 래퍼클래..