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 |
Tags
- java
- LeetCode
- DP
- 완전탐색
- algorithm
- 리트코드
- dynamic programming
- 코딩
- boj
- 자바
- 투포인터
- 백준
- 깃
- 컴퓨터과학과
- two pointers
- sliding window
- it
- 방송통신대학교
- 탐욕알고리즘
- 코테
- 자바스크립트
- Binary Search
- Git
- greedy
- 그리디
- 이진탐색
- 방송대
- javascript
- 알고리즘
- 방통대
Archives
- Today
- Total
개발이 취미인 주니어 기획자
[이진탐색][Java][BOJ] #11663. 선분 위의 점 본문
728x90
반응형
#이진탐색 #silver3
https://www.acmicpc.net/problem/11663
🌷 문제 설명
✏️ 백준 연습문제: 선분 위의 점
일차원 좌표상의 점 N개와 선분 M개가 주어진다. 이때, 각각의 선분 위에 입력으로 주어진 점이 몇 개 있는지 구하는 프로그램을 작성하시오.
⌨️ 입력
첫째 줄에 점의 개수 N과 선분의 개수 M이 주어진다. (1 ≤ N, M ≤ 100,000) 둘째 줄에는 점의 좌표가 주어진다. 두 점이 같은 좌표를 가지는 경우는 없다. 셋째 줄부터 M개의 줄에는 선분의 시작점과 끝점이 주어진다. 입력으로 주어지는 모든 좌표는 1,000,000,000보다 작거나 같은 자연수이다.
🖨️ 출력
입력으로 주어진 각각의 선분 마다, 선분 위에 입력으로 주어진 점이 몇 개 있는지 출력한다.
입출력 예
| 입력 | 출력 |
| 5 5 1 3 10 20 30 1 10 20 60 3 30 2 15 4 8 |
3 2 4 2 0 |
💡해결 포인트
1. 이진 탐색은 "정렬된" 배열을 대상으로 한다 Arrays.sort(배열명);
🌷 내 코드
어제부터 이진 탐색을 풀다 보니 대충 어떻게 풀지 감이 왔던 것 같다. 범위를 생각하는게 조금 헷갈려서 계속 손으로 짚어가며 풀었다. 🤦🏻♀️
import java.io.*;
import java.util.*;
public class BOJ_11663 {
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("example.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 첫 번째 줄 입력
String[] firstLine = br.readLine().split(" ");
int N = Integer.parseInt(firstLine[0]); // 점 개수
int M = Integer.parseInt(firstLine[1]); // 선분 개수
// N개 좌표 입력
int[] numbers = new int[N];
String [] thirdLine = br.readLine().split(" ");
for (int i = 0; i < N; i++) {
numbers[i] = Integer.parseInt(thirdLine[i]);
}
// 배열 정렬
Arrays.sort(numbers);
// M개 선분의 쌍 입력
for (int i = 0; i < M; i++) {
String[] secondLine = br.readLine().split(" ");
int target1 = Integer.parseInt(secondLine[0]);
int target2 = Integer.parseInt(secondLine[1]);
// target1 index
int target1Idx = 0;
int target2Idx = 0;
// target 1 이진탐색
int left = 0;
int right = N - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (numbers[mid] < target1) {
left = mid + 1;
} else {
right = mid - 1;
}
target1Idx = left;
}
// target 2 이진탐색
int left2 = 0;
int right2 = N - 1;
while (left2 <= right2) {
int mid = (left2 + right2) / 2;
if (numbers[mid] > target2) {
right2 = mid - 1;
} else {
left2 = mid + 1;
}
target2Idx = left2;
}
System.out.println(target2Idx - target1Idx);
}
}
}
🌷 코멘트

한 번에 성공한건 첨이라 좀 감격(물론 그 전에 VS코드로 다 찍어 봄.. 근데 예전에도 그건 다 했는데 항상 채점을 돌리면 틀리는 포인트들이 있었는데 이번 문제는 그냥 다 돌아갔다. 그런데 채점 시간이 엄청 오래 걸렸다. 시간 초과 날까봐 엄청 조마조마 했음 나 자야돼ㅠ)
블로그 내용에 문제가 있다면 댓글 혹은 아래로 연락주세요!
~대가리 꽃밭인 디지털 노마드가 꿈이예요~
🧚♀️ Gyumin Lee
📧 gyumin.q.lee@gmail.com
qminlee723 - Overview
noob. qminlee723 has 8 repositories available. Follow their code on GitHub.
github.com
728x90
반응형
'문제 풀이 > 알고리즘 문제 풀이' 카테고리의 다른 글
| [투포인터][Java][BOJ] #2470. 두 용액 (2) | 2025.01.18 |
|---|---|
| [이진탐색][Java][BOJ] #2343. 기타 레슨 (0) | 2025.01.17 |
| [이진탐색][Java][BOJ] #1654. 랜선 자르기 (0) | 2025.01.15 |
| [Hashset][Java][BOJ] #2776. 암기왕 (0) | 2025.01.14 |
| [DP][JavaScript][LeetCode] #338. Counting Bits (0) | 2023.05.01 |