전체 글
-
[Algorithm-PS] 가장 작은 약수카테고리 없음 2024. 8. 28. 20:15
a와 b를 포함하여 사이에 있는 정수의 약수를 모두 구하여가장 많이 나온 약수를 구하는 문제가 있다.만약 많이 나온 약수의 개수가 여러 개 존재한다면, 가장 작은 약수를 구해야 한다. (약수가 1인 것은 제외)(단, 2 해당 문제는 범위를 잘 보며 문제를 풀어야 한다.처음에는 범위 생각않고 풀었다가 시간 초과를 맞닥뜨렸다. 그냥 정말로 a와 b를 포함한 사잇수의 약수의 빈도수를 구하면시간 초과가 나올 수밖에 없다. 그러면 한번 수학적으로 생각해보자,가장 빈도 수가 높으면서 작은 약수는 무엇일까?당연히 2가 아닐까? (모든 짝수는 약수로 2를 갖고 있으므로~.~) a가 12이고 b가 15라고 가정해보자.12의 약수 - 1, 2, 3, 4, 6, 1213의 약수 - 1, 1314의 약수 - 1, 2, 7,..
-
[Java] Collection의 toArray 메서드카테고리 없음 2024. 8. 22. 22:31
Collection에는 배열로 반환해주는 toArray 메서드가 존재한다.단순히 매개변수 없이 toArray 를 사용하면 Object 타입의 배열로 반환한다.매개변수를 넣어서 toArray 를 사용하면 해당 타입의 배열로 반환한다.매개변수가 존재하는 경우의 toArray 사용법을 알아보겠다. 사용법은 T[] toArray(T[] arr) 로, 예를 들면,...List answer = new ArrayList();...answer.toArray(new Boolean[0]);... 해당 코드처럼 사용할 수 있다.매개변수로 들어온 Boolean 배열에 answer(Collection)에 들어있는 요소들을 담아서 Boolean 배열을 반환해준다.그러나 이때 배열의 사이즈가 answer(Collection)에 들..
-
[Java] int Array to Integer List & Integer List to int Array카테고리 없음 2024. 8. 14. 15:39
자주 쓰이는원시타입의 배열을 참조타입의 리스트로 변환하는 방법과그 반대인 참조타입의 리스트를 원시타입의 배열로 변환하는 방법을 기록하려고 한다. 해당 글에서는 원시 타입의 int와 참조 타입의 Integer를 이용하겠다. 첫 번째,int 형 배열을 Integer 형 리스트로 바꾸는 방법이다. ...int[] arr = { 1, 2, 3, 4, 5 };List list = Arrays.stream(arr).boxed().collect(Collectors.toList());... 단순히 Arrays.asList() 함수를 사용해도 되지만,이는 고정된 크기의 리스트를 반환하여 list에 새로운 값을 추가하게 되면 예외가 발생하게 된다.(또한, 리스트의 값을 변경하면 원본 배열의 값도 변경된다.)이를 막기 위해..
-
[Java] char 타입을 int 타입으로 변환하기카테고리 없음 2024. 8. 7. 23:41
쓸 일이 종종 있는데 계속 까먹어서 기록해두려고 한다. ...char ch1 = '5';char ch2 = 'a';// 해당 라이브러리로 char형을 int형으로 변환 가능int n = Character.getNumericValue(ch1); // n = 5// 소문자나 대문자는 각각 10부터 시작하여 순차적으로 숫자가 부여된다.int m = Character.getNumericValue(ch2); // m = 10 ('A' 인 경우에도 10)... 이렇게 Character 객체의 getNumericValue 메서드를 이용해 형변환을 할 수 있다.
-
[Algorithm-PS] 이분 탐색카테고리 없음 2024. 8. 6. 23:46
이분 탐색이란, 정렬되어 있는 배열에서 탐색 범위를 절반씩 줄여나가며 데이터를 탐색하는 방법이다.보통 시작점 start, 중간점 mid, 마지막점 end 변수를 이용하여 탐색한다. start가 end와 동일하거나 커지기 전까지(>= or >)(알고리즘에 따라 둘 중 하나가 선택됨) 반복하며 탐색 범위를 줄여나간다....int[] arr = ...int start = 0;int end = arr.length - 1;int findNumber = 10;int mid = 0;while(start findNumber) { end = mid - 1; } // mid에 있는 값이 찾는 수 보다 작거나 같은 경우 else { start = mid + 1; }}// mid에 우리가..
-
[Java] Labeled Loop카테고리 없음 2024. 7. 9. 17:46
이번에 알고리즘 문제를 풀면서 알게 된 기능이다.반복문에 이름을 달아 continue [이름]; 으로 해당 [이름]의 반복문으로 이동시켜준다. 뭐가 떠오르지 않나? 나는 C언어의 goto문이 떠올랐다.(배우긴 배웠지만 교수님이 쓰지 말라하셔서 써본 기억이 없는 goto문.. (왜 쓰지 말라하셨는지 기억이 안남)) 그래서 자바에서도 쓰면 안 되는 줄 알았는데, 적절히 사용하면 해가 될 건 없을 것 같다.(성능 측면에서도 명명된 반복문과 일반 반복문 사이에 큰 차이는 없다고 한다.) 밑은 사용 예제이다.문제를 풀다가 사용할 일이 있으면 한번 사용해보자. ...A: for (int i = 0; i
-
래퍼(Wrapper) 클래스의 compare 함수카테고리 없음 2024. 7. 7. 23:53
Integer나 Double, 거기에 String 까지Wrapper 클래스에는 기본적으로 값을 비교하는 compare 함수가 있다. Integer를 대표 예로 들겠다.Integer.compare(1, 2) 를 호출하면-1이 반환된다.Integer.compare(2, 1) 를 호출하면1이 반환된다.Integer.compare(1, 1) 를 호출하면0이 반환된다. 이것을 정의해보자면,Integer.compare(v1, v2) 에서v1이 v2보다 크면 1을 반환하고v1이 v2보다 작으면 -1을 반환한다.마지막으로 v1과 v2가 같으면 0을 반환한다.라고 할 수 있다. 이 함수는 정렬할 때 많이 사용하는데,쉽게 설명하면,compare 함수를 통해 1을 반환하면 자리를 바꾸고0과 -1인 경우에는 자리를 유지한다...
-
[Algorithm-PS] 약수의 개수카테고리 없음 2024. 7. 3. 17:18
알고리즘 문제를 풀 때종종 약수의 개수를 물어보는 문제들이 출제된다. 입력 수를 number 라고 할 때,가장 쉬운 방법으로는 1부터 number로 number를 나눠서나누어 떨어지면 count를 1 증가시키면 된다.해당 방법의 시간 복잡도는 O(N)으로입력 수가 커짐에 따라 실행 시간이 비례적으로 증가한다는 것을 알 수 있다. 그렇다면 효율적인 방법은 뭐가 있을까?나는 일단 단순하게 자기 자신(number)을 제외하면 모든 약수는 number를 2로 나눈 값보다작거나 같을 테니 1부터 (number / 2)로 number를 나눴었다.그러나 다른 사람들의 코드를 분석해본 결과 더 효율적인 방법이 있었다.√number 보다 작거나 같은 값으로 number를 나눠서나누어 떨어지면 count를 2번 증가시키..