전체 글 296

[JAVA] 완전탐색 "소수 찾기"

완전탐색을 이용하여 소수를 찾는 알고리즘이다. 이전에 String을 parseInt하는 부분도 포함되어있는 문제다. 그리고, Permutation순열을 이용하여 수학적으로 재귀탐색을 하는 방식이며, Set을 이용하여 중복 제거를 하는 방식으로 알고리즘을 풀어야 했다. 필자는 Permutation부분을 스스로 구현하기 어려워 다른 이의 코드를 참고하였다. codevang.tistory.com/299?category=827588 import java.util.ArrayList; import java.util.List; import java.util.TreeSet; class Solution { private static TreeSet set = new TreeSet(); private int count; p..

[JAVA] 정렬 "가장 큰 수"

너무 복잡하게 생각하여 문제풀이를 실패했다. 단순하게 Sort에서 Compare 메소드를 오버라이드할때, String o1, o2를 비교하면, o1+o2 와 o2+o1을 Integer로 변환해서 비교하여 정렬하는 방식으로 해야한다. 가장 이해하기 쉬운 코드리뷰이다. import java.util.Arrays; import java.util.Comparator; class Solution { public String solution(int[] numbers) { String[] nums = new String[numbers.length]; for (int i=0; iString으로 변환해준다. 이러한 경우 String값을 많이 사용하는 케이스어서 첫번째 코드보다 두번째 코드에서 9배가량의 속도차이가 났다...

[C++] 재귀 "우박수 길이(3n+1)"

#include using namespace std; long long int memo[10000001] = { 0 }; long long int recur(long long int n) { if (n > 10000000) {//메모리보다 크면 배열사용안함. if (n % 2 == 0) return recur(n / 2) + 1; else return recur(n * 3 + 1) + 1; } //여기부터 시작. if (memo[n] != 0) return memo[n];//메모이제이션 else { if (n == 1) { return 1;//실행된 횟수 반환. } else if (n % 2) { return memo[n] = recur(3 * n + 1) + 1; } else { return memo[..

코딩테스트/C++ 2020.09.16

[JAVA] 힙 "이중우선순위큐"

우선순위 큐를 두개를 이용해서 풀어야하는 강박관념에 아래와 같이 풀었다. import java.util.PriorityQueue; class Solution { public int[] solution(String[] operations) { int[] answer = new int[2]; //오름차순 우선순위큐 PriorityQueue incQ = new PriorityQueue((o1, o2) -> o1 - o2); //내림차순 우선순위큐 PriorityQueue decQ = new PriorityQueue((o1, o2) -> o2 - o1); for(String op : operations){ //공백기준 분리 String[] str = op.split(" "); System.out.println(..

[JAVA] 힙 "디스크 컨트롤러"

이 문제는 2가지를 고려하여 코드를 짜야한다. 1. '작업소요시간'이 짧은 작업부터 수행해야한다. 2. 단, 하나의 작업이 끝나는 시점을 기준으로, '그 이전까지 요청된' 작업들에 한하여 '작업소요시간'을 비교한다. 필자는 런타임에러로 인해 코드작성에 실패하여, 다른사람의 코드를 리뷰하겠다. 첫번째는, 람다식을 이용하여 풀이를 하는 방식이다. import java.util.Arrays; import java.util.PriorityQueue; class Solution { public int solution(int[][] jobs) { int answer = 0; int end = 0; // 수행되고난 직후의 시간 int jobsIdx = 0; // jobs 배열의 인덱스 int count = 0; //..

[JAVA] 큐/스택 정리

컬렉션프레임워크 관련 표 Stack s = new Stack(); Queue q = new LinkedList(); PriorityQueue pq = new PriorityQueue(); => 우선순위큐는 implements Comparable 필요. Stack 메소드 설명 .empty() Stack이 비어있으면 true 반환 .peek() Stack 맨위의 객체 반환(꺼내지 않음) .pop() Stack 맨위의 객체를 꺼내서 반환 .push(객체) Stack에 객체 저장 .search(객체) Stack에서 주어진 객체를 찾아서 그 위치 반환.(배열과 달리 위치가 1부터 시작) / 못찾으면 -1 반환 Queue 메소드 설명 .add(객체) 객체추가(성공시true /실패시 저장공간이 부족하면 예외발생) ...

[JAVA] 힙 "더 맵게"

이 문제는 힙을 이용하는 원리인데, JAVA에서는 "우선순위 큐"라는 큐 라이브러리를 이용한다. PriorityQueue() = new PriorityQueue(); 필자는 구글검색을 통해서 PriorityQueue에 대해 학습했는데, 각각의 음식을 객체로 할당하는 방식으로 구현했다. import java.util.PriorityQueue; class Solution { class food implements Comparable{ int scoville; food(int sco){ scoville = sco; } @Override public int compareTo(food target) { return this.scoville >= target.scoville ? 1 : -1; } } public i..

[JAVA] 스택/큐 "프린터"

필자가 작성한 코드는 통과하였지만, 실행시간이 좀 오래걸리는 단점이 있다. import java.util.*; class Solution { class Printing{ int pri, loc; Printing(int priority, int locate){ pri = priority; loc = locate; } } public int solution(int[] priorities, int location) { int answer = 0; Integer[] Priorities = new Integer[priorities.length]; Queue q = new LinkedList(); for(int i =0; i= priority.get(0)){//최고순위인경우 priority.remove(0);//해..

[JAVA] 스택/큐 "다리를 지나는 트럭"

지금까지 코딩방식과는 느낌이 다르게, 내용 그대로 객체를 코드에 반영하는 느낌이다. 필자는 위 방식이 아니라, 다른 수학적으로 계산을 하려다가 실패하여 다른 코드를 리뷰한다. 첫번째, 코드는 Queue에 대기큐와 무브큐를 구현해서, 1. 무브큐가 비어있을때 if 2. 무브큐의 트럭이 다리를 다 건넌걸 판단하는 if 3. 대기큐에 트럭이 있고, 대기큐의 다음 차례트럭 무게+현재 다리의 무게 < 무게 제한 인 경우 if import java.util.*; class Solution { class Truck { int weight; int move; public Truck(int weight) { this.weight = weight; this.move = 1; } public void moving() { m..