알고리즘 풀이현황을 보여주는 엑셀 파일을 자동으로 생성해주는 프로그램을 개발했다. 자바 코드를 컴파일해서 엑셀파일을 얻는 것이기 때문에 프로그램이라고 말하기에는 좀 그렇지만, 사용자는 오직 나 한명이기 때문에 충분하다고 생각한다. 프로그램을 개발하게된 배경은, 매일 알고리즘을 풀고 풀이현황을 수동으로 엑셀에 정보(문제번호, 문제명, URL, 완료유무, 재풀이 필요유무)를 입력하였다. 수동으로 입력하기 때문에 가끔 오타가 있었던 적도 있고, 주말에 한번에 입력한 적도 있었고, 매번 귀찮고 번거로웠다. 그래서 개발을 했다! 알고리즘을 풀때 나는 일정한 규칙을 가지고 패키지명과 파일을 구성했다. 1. 패키지명은 'Q + 문제번호' 이다. 하지만, 풀이가 완료되지 않는 문제는 'Q + 문제번호 + _Not' 으..
프로그래머스 3단계 카카오 베스트앨범 url : https://programmers.co.kr/learn/courses/30/lessons/42579?language=java 문제설명스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. - 속한 노래가 많이 재생된 장르를 먼저 수록합니다. - 장르 내에서 많이 재생된 노래를 먼저 수록합니다. - 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. - 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를..
가끔 문제를 풀 경우, Map을 정렬하는 경우가 많다! Key에 관한 정렬은 TreeMap을 사용한다면 별도의 구현없이 정렬이 가능하다. 단, String, Integer 와 같은 기본형에만 해당된다. 만약 객체를 특정 인스턴스 변수 기준으로 정렬하고 싶다면, Comparable 을 이용한 정렬이 필요하다. 해당 객체를 생성하는 클래스에서 Comparable 인터페이스를 implements 하거나, 혹은 아래와 같은 방식으로 익명객체, 람다식을 활용할 수 있다. 하지만, 이번 예제에서는 Map의 Value에 대한 정렬을 해볼려고 한다. 정렬하는 방법을 익명객체와 람다식을 활용해서 구현했다. package test; import java.util.*; public class ValueSortExample ..
프로그래머스 3단계 카카오 프렌즈 컬러링북 문제 url : https://programmers.co.kr/learn/courses/30/lessons/1829 문제설명출판사의 편집자인 어피치는 네오에게 컬러링북에 들어갈 원화를 그려달라고 부탁하여 여러 장의 그림을 받았다. 여러 장의 그림을 난이도 순으로 컬러링북에 넣고 싶었던 어피치는 영역이 많으면 색칠하기가 까다로워 어려워진다는 사실을 발견하고 그림의 난이도를 영역의 수로 정의하였다. 영역이란 상하좌우로 연결된 같은 색상의 공간을 의미한다. 그림에 몇 개의 영역이 있는지와 가장 큰 영역의 넓이는 얼마인지 계산하는 프로그램을 작성해보자. 제한사항1 0 ? answer[0] + 1 : answer[0]; answer[1] = Math.max(count, ..
1. Java 구현 package Q11057; import java.util.Scanner; public class Main { /* 오르막수 * url : https://www.acmicpc.net/problem/11057 */ public static void main(String[] args) { int n = new Scanner(System.in).nextInt(); /* D(n)(0~9) = D(n-1)(0) + 2*D(n-1)(1) + 3*D(n-1)(2) … + 9*D(n-1)(8) + 10*D(n-1)(9) */ /* D(n)(0) = D(n-1)(0~9) = D(n-1)(0~9) D(n)(1) = D(n-1)(0~9) - D(n-1)(0) = D(n-1)(1~9) D(n)(2) = D..
객체지향 설계의 5원칙 - SOLID 1. SRP (Single Responsibility Principle) : 단일 책임 원칙 2. OCP (Open Closed Principle) : 개방 폐쇄 원칙 3. LSP (Liskov Subsitution Principle) : 리스코프 치환 원칙 4. ISP (Interface Segregation Principle) : 인터페이스 분리 원칙 5. DIP (Dependency Inversion Principle) : 의존 역전 원칙 이 원칙들은 응집도는 높이고, 결합도는 낮추는 객체지향의 설계를 재정립한 원칙들이다. 결합도는 응집도는 모듈간의 관계를 표현하는 개념이다.여기서 모듈은 하나의 기능을 수행하는 단위로서, 프로그램 기능의 독립적인 단위라고 할 수..
1. 프로세스와 스레드프로세스는 실행중인 하나의 애플리케이션으로서 운영체제로부터 실행에 필요한 메모리 공간을 할당받는다. 스레드는 프로세스 내에서의 작업의 실행 흐름이다. 멀티 프로세스는 애플리케이션 단위의 멀티태스킹이고, 멀티스레드는 애플리케이션 내부에서의 멀티테스팅이라고 정의할 수 있다. 프로세스는 운영체제로부터 할당받은 메모리를 가지고 실행하기 때문에 각각 독립적이다. 하지만, 스레드는 하나의 메모리 공간을공유하기 때문에 하나의 스레드에서 예외가 발생할 경우, 전체 프로세스가 종료될 수 있다. 자바에서 main 메소드는 자바의 main 스레드에 의해 실행이 된다. 이 메인 스레드가 종료될지라도, 다른 멀티스레드들이 종료되지 않는다면프로세스는 종료되지 않는다. 2. 스레드 우선순위멀티스레드는 동시성과..
Lotto 프로그램을 개발하는 과정에서 수정된 내용을 간단하게 정리해보려고 한다.피드백1) Lotto 번호에 대한 유효성 검증을 Lotto를 생성하는 Factory 클래스가 아닌, Lotto 생성자에서 진행하도록 수정하자! [LottoFactory.java] public static Lotto createLotto(String lottoString) { if(!isValidFormat(lottoString)) { try { throw new LottoException("유효하지않는 형식의 당첨번호를 입력하셨습니다."); } catch (LottoException lottoException) { return InputView.getWinningNum(); } } return new Lotto(createW..
1. Enum 열거타입 변수 서로 연관된 상수들의 집합으로 정의 가능. Enum 열거타입도 하나의 데이터 타입이므로 변수를 선언하고 사용해야 한다. 예) Week today = Week.MONDAY; == ( Enum 열거타입 변수 = Enum 상수 ) 위에 코드는 Week Enum 열거타입을 가지는 today라는 변수를 생성하여 Enum 상수를 대입한 코드이다. Enum 상수는 Enum 열거 타입의 객체라고 생각하면 된다. 그렇기 때문에 today는 Stack 영역에서 Enum 상수의 주소값을 가지고 있으며, Enum 상수는 Heap 영역에서 Enum 열거타입의 객체를 가지고 있다. 2. Enum의 장점 - 입력에 대한 유효성 체크가 가능 - 코드 유지보수 시, (개발 내용 추가) 변경하는 범위가 최소..
프로그램을 구현하면서 입력값 조건에 맞는 객체가 반환이 되도록 구현해야 하는 코드가 있었다.아래 코드는 입력된 점의 개수에 따라 도형의 모양을 출력하는 코드이다. 점이 2개면 직선, 3개면 삼각형, 4개면 사각형을 반환하도록 되어있다.현재는 조건문이 3개이지만, 만약 십이각형, 십삼각형 등의 다각형이 계속 추가된다고 한다면, 조건문은 계속 늘어날 것이다.그렇다면 추후 유지보수가 굉장히 어려울 것이라고 생각된다. 그래서 이부분을 수정해보았다. public static Figure create(String[] inputPoint) throws PointException { if(inputPoint.length == 2) { return new Line(init(inputPoint)); } else if(in..