본문 바로가기

전체 글447

[JAVA][SORT] 가장 큰 수_프로그래머스 level 2 출처 : https://programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열.. 2020. 4. 7.
[JAVA][PERMUTATION] 소수 찾기_프로그래머스 level 2 출처 : https://programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자.. 2020. 4. 6.
[JAVA][PERMUTATION] 숫자 야구_프로그래머스 level 2 출처 : https://programmers.co.kr/learn/courses/30/lessons/42841 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 참조 : https://gorakgarak.tistory.com/522 문제 설명 숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다. 게임해보기 각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다. * 숫자는 맞지만, 위치가 틀렸을 때는 볼 * 숫자와 위치가 모두 .. 2020. 4. 6.
[JAVA] 최대공약수, 최소공배수 찾기 가장 기초적인 방식으로 최대공약수를 구하는 방법은 큰 수부터 차례대로 나누는 것이고, 최소 공배수는 두 수 중 작은 수부터 시작해 동시에 나누어지는 수를 검사하는 방식이다. 하지만 이러한 방법은 두 수가 모두 소수이면 오랜 시간이 소모될 수 있다. 그래서 최대공약수와 최소공배수를 효율적으로 구하기 위해 유클리드 호제법을 사용할 수 있다. int uclid(int a, int b) { if (b==0) return a; return uclid(b, a%b); } 추가로 간혹 유클리드 호제법을 사용해도 풀리지 않는 알고리즘 문제들이 존재한다. 이럴 때는 확장 유클리드 호제법을 사용하면 된다. int extUclid(int a, int b, Integer[] x, Integer[] y) { int g = a;.. 2020. 4. 4.
[JAVA] 소수 찾기 소수란 1과 자기 자신을 제외하고는 약수가 없는 수이다. 소수를 찾는 가장 기초적인 방법은 2~n-1 까지 반복문을 돌리거나, 혹은 2~n/2 까지 반복문을 돌리며 나누어봄으로써 소수를 찾을 수 있겠지만, 당연히 이는 효율적이지 못한 방법이다. 하지만 아래의 방법을 사용하면 않고 √n까지 나누면 소수인지 알 수가 있다. 이 방법은 O(√n)의 시간 복잡도를 가진다. boolean isPrime(int n) { if(n 2020. 4. 4.
[JAVA][DFS] 타겟넘버_프로그래머스 level 3 출처 : https://programmers.co.kr/learn/courses/30/lessons/43165?language=java 문제 설명 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 .. 2020. 4. 4.
[JAVA][Comparable][Compare] 비교 숫자 비교 Integer x = 0; Integer y = 0; Integer z = 1; x.compareTo(1); // 0 - 1 = -1 Integer.compare(x,y); // 0 Integer.compare(x,y); // -1 x.compareTo(y); //0 x.compareTo(z); //-1 *사실상 그냥 빼기 *int 안됨. Integer 같은 자료형만 가능. 문자열 비교 String str = "minwooLee"; str.compareTo("minwooLee"); // 완전히 일치하기에 0 str.compareTo("minwoo"); // 뒤의 세 개가 일치하지 않아 3 str.compareTo("minwool") // L부터 다른데, L의 아스키 코드가 76, l의 아스키 .. 2020. 4. 4.
[JAVA][PriorityQueue][ArrayList] 디스크 컨트롤러_프로그래머스 level 3 출처 : https://programmers.co.kr/learn/courses/30/lessons/42627# 문제 설명 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를들어 - 0ms 시점에 3ms가 소요되는 A작업 요청 - 1ms 시점에 9ms가 소요되는 B작업 요청 - 2ms 시점에 6ms가 소요되는 C작업 요청 와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다. 한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 작업을 요청받은 순서대로 처리하면 다음과 같이 처리 됩니다. - A: 3ms 시점에 작업 완료 (요청에서 종료까지 : 3ms) -.. 2020. 4. 4.
[JAVA][Array] 배열 정렬 1차원 배열 import java.util.Arrays; Arrays.sort(arr); //오름차순 Arrays.sort(arr, i, j); //i부터 j까지 오름차순 정렬 Arrays.sort(arr, Collections.reverseOrder()); //내림차순 n차원 배열 1) 0번째 인자로 정렬 Arrays.sort(arr, Comparator.comparingInt(o1 -> o1[0])); 2) 0, n번째 인자로 정렬 (0먼저, 그 다음 n번째 정렬) Arrays.sort(arr, (x, y) -> { if(x[0] == y[0]) return Integer.compare(x[n], y[n]); else return Integer.compare(x[0], y[0]); }); 2020. 4. 4.
[JAVA] PriorityQueue import java.util.PriorityQueue; PriorityQueue arr = new PriorityQueue(); 추가 arr.add(e) arr.offer(e) 삭제 arr.remove(e) 전체 삭제 arr.clear() 크기 arr.size() 가져오기(헤드 검색 및 제거) arr.poll() 가져오기(헤드 검색) arr.peek() *에러 발생시 add는 예외 발생, offer는 false 반환 *선언시 자동으로 정렬됨. 객체의 큐로 할 때는 implements Comparable 를 한 객체로 하면 정렬됨. https://docs.oracle.com/javase/10/docs/api/java/util/Queue.html#peek() 2020. 4. 4.
[JAVA] ArrayList import java.util.ArrayList; 초기화 ArrayList arr = new ArrayList(); 추가 arr.add(e) i번째 삭제 arr.remove(i) i에서 j번째까지 삭제 arr.remove(i, j) 전체 삭제 arr.clear() i번째 수정 arr.set(i, e) 보유 여부 (Boolean) arr.contains(e) 위치 arr.indexOf(e) 사이즈 arr.size() 오름차순 정렬 arr.sort(null) 기존 배열로 생성 ArrayList arr = new ArrayList(Arrays.asList(arr2)); 얕은 복사 ArrayList arr3 = (ArrayList) arr.cline(); 최대 최소 Collections.min(arr) || C.. 2020. 4. 4.
[JAVA][PriorityQueue] 더 맵게_level 2 출처 : https://programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코.. 2020. 4. 4.