코테/백준

[백준/JAVA] 20364번: 부동산 다툼

imname1am 2024. 6. 22. 10:45
반응형

📖 문제

https://www.acmicpc.net/problem/20364

 

 

 

 

💡  풀이 방식

• 트리

필요 자료구조
- 점유된 땅의 수 저장하는 int형 배열
- 점유되었는지 상태를 표시할 boolean형 배열

 

 

1. 땅 개수 N과 오리 수 Q를 입력받는다.

2. i번째 오리가 원하는 땅 번호를 입력받는다.

3. 2에서 입력받은 오리가 원하는 땅 번호를 갈 수 있는지 확인해 출력한다.

  - 원하는 땅에서 1까지 거슬러 올라오며(/2) 점유된 상태인지 확인한다.

    ㄴ 점유된 상태인 경우, 점유된 땅의 번호를 정답으로 출력한다.

    ㄴ 정답이 초기값 0에서 바뀌지 않은 경우, 해당 번호의 땅을 점유 처리한다.

 

 

 

🔺 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.*;
import java.io.*;
 
public class Main {
    static int N,Q;
    static int[] duck;
    static boolean[] chk;
    static StringBuilder sb = new StringBuilder();
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        N = Integer.parseInt(st.nextToken());   // 땅 개수
        Q = Integer.parseInt(st.nextToken());   // 오리 수
        
        duck = new int[Q];
        for(int i = 0 ; i < Q ; i++) {
            duck[i] = Integer.parseInt(br.readLine());
        }
        
        chk = new boolean[N+1];
        for(int i = 0 ; i < Q ; i++) {
            solve(duck[i]);
        }
        System.out.println(sb.toString());
    }
    
    private static void solve(int num) {
        int idx = num;
        int ans = 0;
        
        // 원하는 땅에서 1까지 거슬러 올라오기
        while(idx != 0) {
            if(chk[idx]) { // 점유된 상태인 경우
                ans = idx;
            }
            idx /= 2; // 1칸 올라가기
        }
        
        sb.append(ans).append("\n");
        
        if(ans == 0)
            chk[num] = true;
  }
}
cs

 

 

 

➕ 다른 풀이 방식

1칸 거슬러 올라갈 때 비트 연산을 사용하셨다. (>>1)

 

백준 20364 부동산 다툼 Java

https://www.acmicpc.net/problem/20364 20364번: 부동산 다툼 첫 번째 줄에 땅 개수 N과 꽉꽉나라에 사는 오리 수 Q가 공백으로 구분되어 주어진다. (2 ≤ N 오리가 원하는 땅으로 접근을 했으나 강사님의 스켈

dhbang.tistory.com


💦 어려웠던 점

- 점유된 땅 상태를 언제 변경하지?의 문제..

 

 

🧐 새로 알게 된 내용

- 점유 처리 방법

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

[BOJ] 백준 20364번: 부동산 다툼

문제 설명 이진 트리 모양의 땅으로 이루어진 꽉꽉마을에는 오리들이 살고 있다. 땅 번호는 다음과 같이 매겨진다. 루트 땅의 번호는 1이다. 어떤 땅의 번호가 K라면, 왼쪽 자식 땅의 번호는 2 × K

jgeun97.tistory.com

 

반응형