Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 뒤집은 소수
- 보이는 학생
- 격자판
- 인프런
- 점수계산
- 등수구하기
- 공통원소 구하기
- 코테준비
- 자바
- 아스키코드
- ArrayList
- 투 포인터
- 큰 수 출력하기
- 가장 짧은 문자거리
- 백준
- 누적 계산
- 연속부분수열
- 두 배열 합치기
- java
- 모든행과열대각선의합
- 임시반장 정하기
- 최대 길이
- 알고리즘
- GitHub #Commit #BaekJoon
- 10991
- Pointer
- Two Pointer
- 배열
- array
- 10992
Archives
- Today
- Total
ezhoon
[인프런] 06-08 이분검색 / 순차검색 본문
[Java] 인프런 문제풀이/Sorting and Searching (정렬, 이분검색과 결정알고리즘)
[인프런] 06-08 이분검색 / 순차검색
ezhoon 2022. 2. 7. 21:38📖 문제
⚠️ 주의사항
- 이분검색 / 순차검색 두 개 사용해서 풀 것
- 오름차순으로 정렬 후 찾기
✍️ 이해
/** 이분검색
* 1. N과 M 입력 후 N개의 배열 입력
* 2. 배열 정렬
* 3. 이분검색이므로 lt = 0 rt = N - 1 지정
* 4. while(lt <= rt)
* 4-1. 중간값인 mid는 (lt+rt) / 2
* 4-2. if 배열의 중간값이 정답인 M과 같다면 answer에 mid + 1 -> 배열은 0부터 시작이므로 + 1
* 4-3. if 배열의 중간값이 M보다 크다면 rt를 mid - 1 방향으로 이동
* 4-4. else lt를 mid + 1
* 5. return answer
*/
/** 순차검색
* 1. N과 M 입력 후 N개의 배열 입력
* 2. 배열 정렬
* 3. 이분검색이므로 lt = 0 rt = N - 1 지정
* 4. for each 구문으로 arr의 값이 M과 같아질 때 까지 반복
* 4-1. 같으면 break 다르면 계속 진행하면서 answer ++;
* 5. return answer;
*/
✏️ 풀이
이분검색
import java.util.Arrays;
import java.util.Scanner;
public class Java06_08_1 {
public int solution(int N, int M, int[] arr) {
// 이분 검색
int answer = 1;
Arrays.sort(arr);
int lt = 0, rt = N - 1;
while (lt <= rt) {
int mid = (lt + rt) / 2;
if (arr[mid] == M) {
answer = mid;
break;
}
if (arr[mid] > M) rt = mid - 1;
else lt = mid + 1;
}
return answer;
}
public static void main(String[] args) {
Java06_08_1 T = new Java06_08_1();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
System.out.println(T.solution(N, M, arr));
}
}
순차검색
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public int solution(int N, int M, ArrayList<Integer> arr) {
int answer = 1;
Collections.sort(arr);
for (int i : arr) {
if(i == M) break;
answer++;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
ArrayList<Integer> arr = new ArrayList<>();
for (int i = 0; i < N; i++) {
arr.add(sc.nextInt());
}
System.out.println(T.solution(N, M, arr));
}
}
'[Java] 인프런 문제풀이 > Sorting and Searching (정렬, 이분검색과 결정알고리즘)' 카테고리의 다른 글
[인프런] 06-10 마구간 정하기 (결정알고리즘) (0) | 2022.02.08 |
---|---|
[인프런] 6-9 뮤직비디오 (결정알고리즘) (0) | 2022.02.08 |
[인프런] 06-07 좌표 정렬 (0) | 2022.02.06 |
[인프런] 6-6 장난꾸러기 (0) | 2022.02.05 |
[인프런] 06-05 중복확인 (0) | 2022.02.04 |
Comments