목록Java Note (89)
럿고의 개발 노트
[프로그래머스] 코딩테스트 연습 기능개발 간략한 문제 풀이 스택/큐 문제인데, 나는 개인적으로 하드 코딩한 느낌이다. API 부분에서는 크게 설명할 부분이 없는 것 같다.. ㅎㅎ Github 문제 및 풀이 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return ..
MVC Pattern 이란? 이글을 쓴 계기는 우아한테크코스 Level 1 미션인 문자열 계산기와 자동차 경주게임을 하다보니, 패턴에 대한 지식이 없는 것 같아서 공부를 해봤습니다. 정확히 말하자면, MVC 패턴에서 Model(Domain)과 View에게 어떤 역할을 줘야 하는지에 대한 명확한 개념이 없었다고 하는게 더 정확하겠네요 디자인패턴이란? MVC 패턴을 공부하기 전에, 디자인 패턴이라는 것을 먼저 알아둬야 함. 디자인 패턴은 건축에서 사용하는 공법이라는 말에서 유래하였으며, 공법을 소프트웨어 개발 방법으로 공식화 한 것입니다. 소수의 뛰어난 개발자가 해결한 문제를 다수의 개발자들이 처리 할 수 있도록 공식화 시킨 규칙이라고 생각하면 됩니다. 프로그램을 어떻게 짜야하는지에 대한 방법론도 디자인패턴..
[프로그래머스] 코딩테스트 연습 다트게임 간략한 문제 풀이 카카오 신입 공채 1차 코딩 테스트 문제 해설 Level1중에서 어려운 문제에 꼽히는 문제였습니다. 일단 문제해설을 살펴보면 문자열 처리(String Manipulation)을 묻는 문제라고 합니다. 한글자씩 잘라서 처리하고 Tokenizing, Semantic Analysis을 통해 계산하는 문제였습니다. 처음 생각한 로직대로 충분이 가능했지만, 생각을 못했던 부분이 *인 스타상이 들어오면 해당 점수와 바로 전에 얻은 점수를 각 2배로 만드는 부분을 생각을 못해서 조금 어려웠습니다. 코드가 깔끔하지가 않아서 리패토링을 해야 될것 같은데, 지금의 실력으로는 이정도가 최대인것 같습니다. 우아한테크코스에서 배웠던 다형성을 이용한 if문 대처방법을 사..
[프로그래머스] 코딩테스트 연습 실패율 간략한 문제 풀이 지금까지 풀었던 Level1 문제중 가장 어려웠습니다. 처음 생각한 구현 방법은 '스테이지에 도달한 플레이어 수'를 구하고, '스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수'를 구하고 실패율을 구해서 정렬을 이용해 답을 도출해나갈려고 했습니다. 사실 처음부터 Stage라는 객체로 포장할 생각은 없었지만, 처음에 정렬과 수많은 자료구조들이 존재하게 되어서 싹다 지우고 다시 진행하게 되었습니다. 두번째 구현방법은 객체에 포장을 해서 실패율로 객체를 정렬하는 방법을 고민하였고, 검색 결과에 나온 대로 코드를 구현하였습니다. 두번째 구현 방법으로는 테스트 케이스들을 통과하기 시작했는데, 몇개에서 오류가 발생하게 되었..
[프로그래머스] 코딩테스트 연습 비밀지도 간략한 문제 풀이 2017년 카카오 신입 공채 1차 코딩 테스트 문제입니다. 카카오 신입 공채 1차 코딩 테스트 문제 해설 OR 비트 연산과 2진수에 대한 지식만 있다면, 어렵지 않게 풀수 있는 문제인 것 같습니다. 처음 생각한 코딩 방향과 일치하도록 설계를 했지만, 10진수를 2진수로 변환하면, 앞에 있는 '0'들은 생략이 되버립니다. Ex) 실제값 : 0000 1011 -> 출력값 : 1011 이 부분을 구현하는 데 처음에는 String.format을 사용하여 0을 추가했지만, 이상하게 값이 변경을 하는 바람에, while문으로 매개변수로 주어진 n과 변 문자열의 길이가 다르면 공백을 앞에 추가하도록 하였습니다. 문자열을 연산해야 하는 경우가 많..
[프로그래머스] 코딩테스트 연습 예산 간략한 문제 풀이 처음 문제를 읽어보고 들었던 생각은 작은 수 부터 넣다가 예산에서 벗어나면 그게 제일 많이 지원할 수 있는 길이 아닐까 생각해서 코드 방향을 그렇게 잡았습니다. 다행이게도 처음에 생각한 방향이 맞았으며, 배열을 정렬하여 작은 수부터 더하면서 부서 수를 세었고, 최대 예산과 비교하여 더 크면 그때 for문을 빠져나가도록 구현하였습니다 Arrays.sort() public static void sort(int[] a) 매개변수(Parameters)로 들어온 배열을 오름차순으로 정렬합니다. github 문제 및 풀이 문제 설명 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이..
[프로그래머스] 코딩테스트 연습 직사각형 별찍기 간략한 문제 풀이 쉽게 풀수 있었고, for문 예제중 가장 기본적인 별찍기 문제였습니다., Github 문제 및 풀이 문제 설명 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수입니다. 예시 입력 5 3출력 ***** ***** *****import java.util.Scanner; /** * @ClassName : RectangleStar * @ProblemName : 직사각형 별찍기 * @URL : https://programmers.co.kr/learn/courses/30/lessons/12969..
[프로그래머스] 자바 중급 Part6. 어노테이션 1. 어노테이션 Java5에 추가된 기능 클래스나 메소드위에 붙으며 @(at)기호를 사용 어노테이션을 클래스나 메타코드에 붙인 후, 클래스가 컴파일되거나 실행될 때 어노테이션의 유무나 어노테이션에 설정된 값을 통하여 클래스가 좀 더 다르게 실행되게 할 수 있음. 이런 이유로 어노테이션을 일정의 설정파일처럼 설명하는 경우도 있음. 어노테이션은 자바가 기본으로 제공해주는 것도 있고, 사용자가 직접 만들 수도 있음. 사용자가 직접 작성하는 어노테이션을 Custom 어노테이션이라고 말함. Custom 어노테이션을 이용하는 방법 어노테이션 정의 어노테이션을 클래스에 사용(타켓에 적용) 어노테이션을 이용하여 실행 JVM실행시 감지할 수 있도록 하려면 @Retenti..
[프로그래머스] 자바 중급 Part5. IO 1. 자바IO 입출력을 위한 인터페이스와 클래스들임. 크게 byte단위 입출력과 문자 단위 입출력클래스로 나뉨. byte단위 입출력클래스는 모두 InputStream, OutputStream이라는 추상클래스를 상속받아 만들어 짐. 문자(char)단위 입출력클래스는 모두 Reader와 Writer라는 추상클래스를 상속받아 만들어 짐. 4가지 추상클래스(InputStream, OutputStreamReader, Reader, Writer)를 받아들이는 생성자가 있다면, 다양한 입출력방법을 제공하는 클래스 4가지 클래스를 받아들이는 생성자가 없다면, 어디로부터 입력받을 것인지, 어디에 쓸것인지를 나타내는 클래스 파일로 부터 입력받고 쓰기 위한 클래스 FileInpu..