[JAVA-자바] 1107번: 리모컨

2025. 1. 8. 14:20·알고리즘/백준

 

1.현재 채널은 100이다.

2.채널의 범위는 0~500000이다.

3.+- 버튼을 사용하여 채널을 증감시킬수 있다.

4.버튼은 0부터9까지 있으며, 고장나있을수있다.

 

풀이:

채널의 범의가 0부터 500000까지인데, -버튼으로 이동하는것까지 감안해서 0부터 999999까지 반복문을 돌며

모든 채널에 대해서 버튼을 누르는 횟수를 계산하여 최솟값을 선택하면 됩니다.

 

 

소스코드:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Main {
    // 바로 누를수 있는 길이 리턴
    public static int isValidChannel(int targetChannel, boolean[] buttons) {
        int length = 0;

        if (targetChannel == 0) { // 특수케이스
            return !buttons[0] ? 0 : 1;
        }

        while (targetChannel > 0) {
            if (!buttons[targetChannel % 10]) {
                return 0; // 고장나서 바로 입력못함
            }
            targetChannel /= 10;
            length++;
        }
        return length;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int targetChannel = Integer.parseInt(br.readLine());
        int brokenButtonCount = Integer.parseInt(br.readLine());

        boolean[] buttons = new boolean[10];
        Arrays.fill(buttons, true);

        // 버튼 고장난게 있을 때만 입력받음
        if (brokenButtonCount != 0) {
            String[] data = br.readLine().split(" ");
            for (int i = 0; i < brokenButtonCount; i++) {
                buttons[Integer.parseInt(data[i])] = false;
            }
        }
        br.close();

        int minLength = Math.abs(100 - targetChannel);

        // 채널은 0~500000까지이므로 위 아래 탐색을 위해 999999까지 반복
        for (int i = 0; i <= 999999; i++) {
            int length = isValidChannel(i, buttons);
            if (length != 0) { // 바로 누를 수 있다면
                int buttonCount = length + Math.abs(i - targetChannel); // 버튼 횟수 + 부족한 이동횟수
                minLength = Math.min(minLength, buttonCount);
            }
        }

        bw.write(String.valueOf(minLength));

        bw.flush();
        bw.close();
    }
}

 

글의 내용 중 잘못된 점이나 수정이 필요한 부분, 혹은 궁금한 사항이 있다면 언제든 댓글로 남겨주시면 감사하겠습니다.

여러분의 피드백은 더 나은 글을 작성하는 데 큰 도움이 됩니다. 감사합니다.

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA-자바] 15650번: N과 M (2)  (0) 2025.01.09
[JAVA-자바] 15649번: N과 M (1)  (0) 2025.01.09
[JAVA-자바] 6064번: 카잉 달력  (0) 2025.01.03
[JAVA-자바] 3085번: 사탕 게임  (0) 2025.01.02
[JAVA-자바] 9095번: 1, 2, 3 더하기  (0) 2024.12.23
'알고리즘/백준' 카테고리의 다른 글
  • [JAVA-자바] 15650번: N과 M (2)
  • [JAVA-자바] 15649번: N과 M (1)
  • [JAVA-자바] 6064번: 카잉 달력
  • [JAVA-자바] 3085번: 사탕 게임
raven
raven
Github : https://github.com/RabeMaster | Email : ra___be@naver.com
  • raven
    배움을 원하는 사람
    raven
  • 전체
    오늘
    어제
  • 공지사항

    • 안녕하세요
    • 분류 전체보기 (169)
      • 네이버 부스트캠프 10기 (7)
        • 멤버십 (5)
        • 챌린지 (1)
        • 베이직 (1)
      • 공부 (2)
        • JAVA (1)
        • CS (0)
        • 정보처리기사 (1)
      • 알고리즘 (159)
        • 백준 (159)
      • 개발 (1)
        • 백준 확장 프로그램 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

    백트래킹
    최단 경로
    부스트캠프
    코딩
    구현
    부트캠프
    다이나믹 프로그래밍
    코딩테스트
    그래프 탐색
    네부캠
    백준
    문자열
    자바
    수학
    네이버
    멤버십
    그래프 이론
    알고리즘
    java
    코테
    브루트포스 알고리즘
    자료 구조
    개발
    그리디 알고리즘
    정렬
    회고
    너비 우선 탐색
    스택
    IT
    네이버부스트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
raven
[JAVA-자바] 1107번: 리모컨
상단으로

티스토리툴바