[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개의 래퍼클래스가 있는데, 이 클래스들은 이용하면 기본형 값을 객체로 다룰 수 있다. 기본형 래퍼클래스 기본형 래퍼클래..
그리디(Greedy) 알고리즘
·
Algorithm
그리디라는 사전적 의미는 "탐욕스러운" 이다. 즉, 탐욕적으로 "현재 상황에서 가장 베스트인 것만 고르는 방법"인 알고리즘이다. 부분 최적해가 모이면 전체 최적해가 되다는 알고리즘이다. ​ 예를들어 서울 대구 부산을 지나간다고 가정을 해보자 (서울 - 대구 길에서 가장 빠른 길) + (대구 - 부산길에서 가장 빠른길) 를 찾아 더하면 최적해를 구할 수 있다. ​ 이 알고리즘이 쓰이게 된 이유는 속도 때문이다. 완전탐색으로 정답을 찾게 되면 속도가 느리게 되니 DP 알고리즘을 사용하게 됐다. 하지만 DP프로그래밍도 항상 최적해를 보장하기 위해서 모든 경우의 수를 고려한다. 그러다보니 속도가 느려지게 된다. 그래서 항상 최적해를 찾는 그리디를 사용해 좀더 빠르게 문제를 풀 수 있게 되었다. 현실에서는 최적해..
디자인 패턴
·
나의 공부방
1. 디자인 패턴이란? -> 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다. 디자인 패턴을 참고하여 개발할 경우 개발의 효율 성과 유지 보수성, 운용성이 높이자며, 프로그램의 최적화에 도움이 된다. 2. 디자인 패턴의 유형 구분 유형 설명 목적 생성 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴 구조 더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴 행위 클래스나 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴 범위 클래스 클래스 간 관련성( 상속 관계를 다루는 패턴) 컴파일 타임에 정적으로 결정 객체 객체 간 관련성을 다루는 패턴 런타임에 동적으로 결정 3. 디자인 패턴의 종..