목록Java Note/Algorithmus (48)
럿고의 개발 노트
[프로그래머스] 코딩테스트 연습 다리를 지나는 트럭 간략한 문제 풀이 제대로된 큐를 사용하는 알고리즘 문제였다. 멀쩡한 사각형 이후로 제일 어려웠던 문제였다고 생각한다. 트럭을 하나씩 빼면서 다리 위에 올리는데, 계속해서 무게와 비교하면서 시간을 더해주는 것이다. 문제에서 나오는 조건을 조건문으로 고쳐나가는 부분이 어려웠다...ㅎㅎ Github 문제 및 풀이 문제 설명 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. ..
[프로그래머스] 코딩테스트 연습 멀쩡한 사각형 간략한 문제 풀이 Level2 문제부터는 API 사용보다는 알고리즘에 더 치중되어 있는 문제들이 많은 것 같습니다. 이번 문제는 저에게는 너무 어려웠습니다. 고민을 많이 하다가 다른 사람 풀이를 보고 한 수 배우게 된 문제였습니다. 일단, 살짝 함정(?)이라면, return값은 long인데, 매개변수는 int였습니다. 또한 제한사항에서 매개변수는 1억 이하의 자연수라고 했는데, 1억이하 자연수는 int로 모두 담을 수 없기 때문에 long으로 변환해줘야 합니다. Long.parseLong과 'String.valueOf()'를 이용해서 Long으로 변환했습니다. 최대공약수를 구했어야 하는데, 최대공약수는 Level1 문제때 풀어본 기억이 있어서 ..
[프로그래머스] 코딩테스트 연습 프린터 간략한 문제 풀이 이번에는 선입선출인 Queue를 사용하는 문제였습니다. 그러나 Queue종류 중에 여기서 쓰면 좋은 것이 PriorityQueue입니다. 바로 우선순위 큐이죠. 제가 설정한 우선순위로 큐를 저장해주는 기능입니다. 아래 간단한 설명을 적어놓도록 하겠습니다. 아울러 location값이 index값으로 들어오기 떄문에 훨씬 더 쉽게 풀 수 있었던 문제였습니다. Github 문제 및 풀이 문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업..
[프로그래머스] 코딩테스트 연습 주식가격 간략한 문제 풀이 0번째 인덱스 값은 자기보다 낮은 값이 나올때 마다 비교를 해야 하며, 1번째 인덱스 값도 자기보다 낮은 값이 나올때 마다 비교를 해야 합니다. 일단, 첫번째 for문으로 0~배열길이-1까지의 인덱스를 만들었습니다. 두번째 for문은 비교할 인덱스 + 1 ~ 배열길의 -1까지의 인덱스를 만들었습니다. 비교할 인덱스 값보다 높거나 같은 값이 나오면 계속해서 second를 1초씩 더했습니다. 비교할 인덱스보다 낮은 값이 나오면 지금까지 계산한 것과 +1을 해줬습니다. 왜냐하면, 예제에서 3초 시점의 3은, 4초 시점이 2로 바로 떨어졌지만, 1초를 인정하기 떄문입니다. 또한, 맨 마지막 인덱스까지 비교했을 경우 계속해서 값이 떨어지지 않았다면, an..
[프로그래머스] 코딩테스트 연습 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만 해주면 된다. 스택을 이용하면 (가 나오면 갯수만큼 집어넣고, )이게 나오면 하나를 빼주면 되는 식으로 쉽게 문제가 풀릴 것이다. 사실 스택을 이용하지 않아도 충분히 풀수는 있지만, 스택/큐 문제이기 떄문..
[프로그래머스] 코딩테스트 연습 기능개발 간략한 문제 풀이 스택/큐 문제인데, 나는 개인적으로 하드 코딩한 느낌이다. API 부분에서는 크게 설명할 부분이 없는 것 같다.. ㅎㅎ Github 문제 및 풀이 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return ..
[프로그래머스] 코딩테스트 연습 다트게임 간략한 문제 풀이 카카오 신입 공채 1차 코딩 테스트 문제 해설 Level1중에서 어려운 문제에 꼽히는 문제였습니다. 일단 문제해설을 살펴보면 문자열 처리(String Manipulation)을 묻는 문제라고 합니다. 한글자씩 잘라서 처리하고 Tokenizing, Semantic Analysis을 통해 계산하는 문제였습니다. 처음 생각한 로직대로 충분이 가능했지만, 생각을 못했던 부분이 *인 스타상이 들어오면 해당 점수와 바로 전에 얻은 점수를 각 2배로 만드는 부분을 생각을 못해서 조금 어려웠습니다. 코드가 깔끔하지가 않아서 리패토링을 해야 될것 같은데, 지금의 실력으로는 이정도가 최대인것 같습니다. 우아한테크코스에서 배웠던 다형성을 이용한 if문 대처방법을 사..