πŸ”₯[99클럽 μ½”ν…Œ μŠ€ν„°λ””] 31일차 TIL - 점프 점프

HOONSSACΒ·2024λ…„ 8μ›” 21일
1

99Club Coding Test Study

λͺ©λ‘ 보기
31/41
post-thumbnail

⏳문제

μ˜μš°λŠ” κ°œκ΅¬λ¦¬λ‹€ 개꡴개꡴개꡴🐸

μ˜μš°λŠ” μ§€κΈˆ n개의 돌이 일렬둜 λ†“μ—¬μžˆλŠ” λŒλ‹€λ¦¬μ— μžˆλ‹€. 그리고 λŒλ‹€λ¦¬μ˜ λŒμ—λŠ” μˆ«μžκ°€ ν•˜λ‚˜μ”© μ ν˜€μžˆλ‹€. μ˜μš°λŠ” 이 μˆ«μžκ°€ μ ν˜€μžˆλŠ” 만큼 μ™Όμͺ½μ΄λ‚˜ 였λ₯Έμͺ½μœΌλ‘œ 점프할 수 μžˆλŠ”λ°, μ΄λ•Œ λŒλ‹€λ¦¬ λ°–μœΌλ‘œ λ‚˜κ°ˆ μˆ˜λŠ” μ—†λ‹€.

μ˜μš°λŠ” 이 λŒλ‹€λ¦¬μ—μ„œ μžκΈ°κ°€ λ°©λ¬Έ κ°€λŠ₯ν•œ λŒλ“€μ˜ 개수λ₯Ό μ•Œκ³  μ‹Άμ–΄ν•œλ‹€. λ°©λ¬Έ κ°€λŠ₯ν•˜λ‹€λŠ” 것은 ν˜„μž¬μœ„μΉ˜μ—μ„œ λ‹€λ₯Έ λŒμ„ 적절히 λ°Ÿμ•„ ν•΄λ‹Ήν•˜λŠ” μœ„μΉ˜λ‘œ 이동이 κ°€λŠ₯ν•˜λ‹€λŠ” λœ»μ΄λ‹€.

ν˜„μž¬ μœ„μΉ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ˜μš°κ°€ λ°©λ¬Έ κ°€λŠ₯ν•œ λŒλ“€μ˜ 개수λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.

μž…λ ₯

첫 번째 μ€„μ—λŠ” λŒλ‹€λ¦¬μ˜ 돌 개수 n이 주어진닀.(1≀n≀100,000) 돌의 λ²ˆν˜ΈλŠ” μ™Όμͺ½λΆ€ν„° 1λ²ˆμ—μ„œ nλ²ˆμ΄λ‹€. λ‹€μŒ μ€„μ—λŠ” κ·Έ μœ„μΉ˜μ—μ„œ 점프할 수 μžˆλŠ” 거리 Ai_iκ°€ 주어진닀.(1≀Ai_i≀100,000)

λ‹€μŒ μ€„μ—λŠ” 좜발점 sκ°€ 주어진닀.(1≀s≀n)

좜λ ₯

μ˜μš°κ°€ λ°©λ¬Έ κ°€λŠ₯ν•œ λŒλ“€μ˜ 개수λ₯Ό 좜λ ₯ν•˜μ‹œμ˜€.

πŸ“ƒμž…μΆœλ ₯ 예

예제 μž…λ ₯

5
1 4 2 2 1
3

예제 좜λ ₯

5

βœοΈν’€μ΄

πŸΈλ‚˜μ˜ 풀이

λ‚˜λŠ” λ°°μ—΄κ³Ό 인덱슀λ₯Ό 잘 ν™œμš©ν•˜λ©΄ 문제λ₯Ό ν’€ 수 μžˆκ² λ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.

μ˜μš°κ°€ 밟고 μžˆλŠ” λŒμ— μ ν˜€ μžˆλŠ” 숫자만큼 쒌, 우둜 이동할 수 μžˆλ‹€κ³  ν–ˆκΈ° λ•Œλ¬Έμ—,
ν˜„μž¬ μ˜μš°κ°€ 밟고 μžˆλŠ” 돌의 μΈλ±μŠ€μ— λŒμ— μ ν˜€ μžˆλŠ” 숫자λ₯Ό λ”ν•˜κ³  빼쀌으둜써, 쒌우둜 μ΄λ™ν•˜λŠ” κ±Έ κ΅¬ν˜„ν•  수 μžˆμ—ˆλ‹€.

이동 ν›„ 같은 λ§€μ»€λ‹ˆμ¦˜μœΌλ‘œ λŒλ‹€λ¦¬λ₯Ό λ°˜λ³΅ν•΄μ„œ κ±΄λ„ˆκ°€μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, 이λ₯Ό μž¬κ·€ ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄ ν˜ΈμΆœν•΄λ³΄κΈ°λ‘œ ν–ˆλ‹€.
단, 점프λ₯Ό ν•  수 μžˆλŠ” 쑰건은 μ ν”„ν•œ ν›„ 돌의 λ²ˆν˜Έκ°€ λŒλ‹€λ¦¬μ˜ λ²”μœ„ 내에 μžˆμ–΄μ•Ό ν•˜κ³ , ν•΄λ‹Ή λŒμ„ λ°©λ¬Έν•œ 적이 μ—†μ–΄μ•Ό ν•œλ‹€.

πŸΈλ‚˜μ˜ μ½”λ“œ

import java.util.*;

public class Main {
    public static int[] stones; // λŒλ‹€λ¦¬ 정보
    public static int count; // 돌 개수
    public static ArrayList<Integer> visited = new ArrayList<>(); // 돌 λ°©λ¬Έ μ—¬λΆ€

    // 점프 λ©”μ„œλ“œ
    public static void step(int start) {
        // startκ°€ λŒλ‹€λ¦¬ λ²”μœ„ 내에 있고, λ°©λ¬Έν•˜μ§€ μ•Šμ€ κ²½μš°μ—λ§Œ 이동
        if (start > 0 && start <= count && !visited.contains(start)) {
            visited.add(start); // λ°©λ¬Έν•œ 돌 μ €μž₯
            step(start - stones[start]); // μ™Όμͺ½μœΌλ‘œ 점프
            step(start + stones[start]); // 였λ₯Έμͺ½μœΌλ‘œ 점프
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        count = sc.nextInt();
        stones = new int[count + 1];

        // 돌 정보 μž…λ ₯
        for (int i = 1; i <= count; i++) {
            stones[i] = sc.nextInt();
        }

        // μΆœλ°œμ§€ μž…λ ₯
        int start = sc.nextInt();

        // 점프
        step(start);

        // λ°©λ¬Έν•œ 돌 개수 좜λ ₯
        System.out.println(visited.size());
        
        sc.close();
    } 
}

πŸΈμ½”λ“œ μ„€λͺ…

  1. λ¨Όμ € 돌의 개수λ₯Ό μž…λ ₯λ°›κ³ , ν•΄λ‹Ή 개수만큼의 돌 정보λ₯Ό μž…λ ₯λ°›μ•„ stones배열에 μ €μž₯ν•œλ‹€.

  2. μΆœλ°œμ§€λ₯Ό μž…λ ₯λ°›κ³ , stepν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.

  3. startκ°€ λŒλ‹€λ¦¬ λ²”μœ„ 내에 있고, λ°©λ¬Έν•œ 적이 μ—†λ‹€λ©΄,

  4. λ°©λ¬Έν•œ λŒμ„ visited λ¦¬μŠ€νŠΈμ— μ €μž₯ν•œλ‹€.

  5. ν˜„μž¬ μœ„μΉ˜(start)μ—μ„œ ν•΄λ‹Ή λŒμ— μ ν˜€ μžˆλŠ” 숫자λ₯Ό λΊ€ 값을 가지고 stepν•¨μˆ˜λ₯Ό μž¬κ·€ ν˜ΈμΆœν•œλ‹€. (μ™Όμͺ½μœΌλ‘œ 점프)

  6. ν˜„μž¬ μœ„μΉ˜(start)μ—μ„œ ν•΄λ‹Ή λŒμ— μ ν˜€ μžˆλŠ” 숫자λ₯Ό λ”ν•œ 값을 가지고 stepν•¨μˆ˜λ₯Ό μž¬κ·€ ν˜ΈμΆœν•œλ‹€. (였λ₯Έμͺ½μœΌλ‘œ 점프)


πŸ”—λ¬Έμ œ 링크
πŸ’»Repository

profile
ν›ˆμ‹Ήμ˜ κ°œλ°œμ—¬ν–‰

1개의 λŒ“κΈ€

comment-user-thumbnail
2024λ…„ 8μ›” 22일

개꡴개꡴개꡴🐸

λ‹΅κΈ€ 달기