목록Java Note (89)
럿고의 개발 노트
[프로그래머스] 코딩테스트 연습 멀쩡한 사각형 간략한 문제 풀이 Level2 문제부터는 API 사용보다는 알고리즘에 더 치중되어 있는 문제들이 많은 것 같습니다. 이번 문제는 저에게는 너무 어려웠습니다. 고민을 많이 하다가 다른 사람 풀이를 보고 한 수 배우게 된 문제였습니다. 일단, 살짝 함정(?)이라면, return값은 long인데, 매개변수는 int였습니다. 또한 제한사항에서 매개변수는 1억 이하의 자연수라고 했는데, 1억이하 자연수는 int로 모두 담을 수 없기 때문에 long으로 변환해줘야 합니다. Long.parseLong과 'String.valueOf()'를 이용해서 Long으로 변환했습니다. 최대공약수를 구했어야 하는데, 최대공약수는 Level1 문제때 풀어본 기억이 있어서 ..
자바 8의 새로운 개념과 기능 멀티코어 CPU가 대중화 되면서 자바는 병렬 실행에 대해서 고민하게 되었다. 그 전에는 나머지 코어를 활용할 수 있는 Thread가 있었지만, 관리와 사용이 너무 어렵다는 단점이 있었다. 자바 8에서 병렬 실행을 새롭게 단순한 방식으로 접근할 수 있는 방법을 제공했으며 그것이 Stream이다. 또한 자바 8에서는 간결한 코드와 멀티코어 프로세서의 쉬운 활용이라는 두 가지 요구사항을 기반으로 새로운 기능들이 나타났다. 1. 스트림 API 스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목의 모임이다. 이론적으로 프로그래밍은 입력 스트림에서 한 개씩 읽고 출력 스트림에서 데이터를 한 개씩 기록한다. 또한 어떤 프로그램의 출력 스트림은 다른 프로그램의 입력 스트림이 될 ..
[프로그래머스] 코딩테스트 연습 프린터 간략한 문제 풀이 이번에는 선입선출인 Queue를 사용하는 문제였습니다. 그러나 Queue종류 중에 여기서 쓰면 좋은 것이 PriorityQueue입니다. 바로 우선순위 큐이죠. 제가 설정한 우선순위로 큐를 저장해주는 기능입니다. 아래 간단한 설명을 적어놓도록 하겠습니다. 아울러 location값이 index값으로 들어오기 떄문에 훨씬 더 쉽게 풀 수 있었던 문제였습니다. Github 문제 및 풀이 문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업..
전략패턴 & 인터페이스로 추상화 우아한테크코스 2기에 참여하게 되면서 Level1 2번째 미션인 자동차 경주 게임을 진행하면서 배우게 된 새로운 디자인 패턴입니다. 자동차 경주 게임은 랜덤값을 생성하여 랜덤값이 4이상이면 전진을 하는 상황이 존재합니다. TDD를 이용하여 미션을 진행한 것이여서 랜덤값을 테스트 하기에는 어려웠습니다. 테스트를 위해서는 자동차 전진이나 정지를 마음대로 조작할 수 있어야 하는데, 그것을 해결하는 방법이 인터페이스 추상화였습니다. 처음에 구현할때는 테스트를 제대로 작성을 못했지만, 피드백을 받으면서 제대로된 자료를 찾게 되면서 구현하게 되었습니다. 예제 문제점 처음에 구현했던 코드를 살펴보도록 하겠습니다. public class Car { private String name; ..
[프로그래머스] 코딩테스트 연습 주식가격 간략한 문제 풀이 0번째 인덱스 값은 자기보다 낮은 값이 나올때 마다 비교를 해야 하며, 1번째 인덱스 값도 자기보다 낮은 값이 나올때 마다 비교를 해야 합니다. 일단, 첫번째 for문으로 0~배열길이-1까지의 인덱스를 만들었습니다. 두번째 for문은 비교할 인덱스 + 1 ~ 배열길의 -1까지의 인덱스를 만들었습니다. 비교할 인덱스 값보다 높거나 같은 값이 나오면 계속해서 second를 1초씩 더했습니다. 비교할 인덱스보다 낮은 값이 나오면 지금까지 계산한 것과 +1을 해줬습니다. 왜냐하면, 예제에서 3초 시점의 3은, 4초 시점이 2로 바로 떨어졌지만, 1초를 인정하기 떄문입니다. 또한, 맨 마지막 인덱스까지 비교했을 경우 계속해서 값이 떨어지지 않았다면, an..
Chapter04. 연습문제 4-1. 다음의 문장들을 조건식으로 표현하라 int x 10 20 true 형 변수 가 보다 크고 보다 작을 때 인 조건식 char ch true 형 변수 가 공백이나 탭이 아닐 때 인 조건식 char ch ‘x' ’X' true 형 변수 가 또는 일 때 인 조건식 char ch 형 변수 가 숫자(‘0’~‘9’)일 때 인 조건식 true char ch ( ) true 형 변수 가 영문자 대문자 또는 소문자 일 때 인 조건식 int year 400 4 100 형 변수 가 으로 나눠떨어지거나 또는 로 나눠떨어지고 으로 나눠떨어지지 않을 때 인 조건식 true boolean powerOn false true 형 변수 가 일 때 인 조건식 str “yes” true 문..
[프로그래머스] 코딩테스트 연습 124나라의 숫자 간략한 문제 풀이 10진법, 2진법, 16진법 처럼 개인적으로 3진법을 구현하는 문제라고 생각해서 진법을 구현하는 방법으로 접근했습니다. 배열로 진법에 쓰이는 숫자를 넣고, n%3으로 index를 구했습니다. (n-1) / 3으로 앞자리 수의 반복을 구현하였습니다. String연산이 있어 효율성을 위해 StringBuilder를 이용하여 연산을 진행하였습니다. 문제는, 앞자리가 계속 추가가 되어야 해서 insert()메서드로 offset을 0으로 두고 계속 앞으로 값을 추가 할 수 있도록 했습니다. 간단하지만, 생각이 필요한 문제였던 것 같습니다! Github 문제 및 풀이 문제 설명 124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은..
[프로그래머스] 코딩테스트 연습 스킬트리 간략한 문제 풀이 정의한 Skill의 순서에 맞게 배웠어야 제대로된 SkillTree인 것을 찾는 문제였습니다. 따라서, 인덱스를 찾아서 비교한다면 문제가 풀릴거 같았습니다. 따라서 String.indexOf()를 이용하여 인덱스를 찾았습니다. String.indexOf() indexOf(String str) indexOf(char ch) indexOf(char ch, int fromIndex) indexOf(String str, int fromIndex) 문자열에서 특정 문자의 index를 찾는 메서드입니다. 앞에서부터 처음 발견되는 인덱스를 반환하며, 찾지 못했을 경우 "-1"을 반환합니다. 시작할 위치도 지정할 수 있는데, 시작 위치을 생략한다면 0번째 인덱..
[프로그래머스] 코딩테스트 연습 쇠막대기 간략한 문제 풀이 처음에는 문제를 이해하기에 조금 난해할 수 있지만, 조금만 생각하면 출제 의도를 알 수 있을 것이다. 일단, 레이저를 만나기 전에 나오는 ( 이거의 갯수가 올려져 있는 쇠막대기의 갯수이다. 따라서 레이저를 만나기 전에 나오는 (의 개수만큼 절단이 나오게 될 것이다. 따라서 (의 개수만큼 절단 개수를 더해주면 된다. 그리고 )이게 나오게 되면 쇠막대기의 끝부분이 짤리게 될 것이다. 이것은 한개의 쇠막대기의 끝부분만 잘리는 것 이기 떄문에, +1만 해주면 된다. 스택을 이용하면 (가 나오면 갯수만큼 집어넣고, )이게 나오면 하나를 빼주면 되는 식으로 쉽게 문제가 풀릴 것이다. 사실 스택을 이용하지 않아도 충분히 풀수는 있지만, 스택/큐 문제이기 떄문..