[ 백준 10819번 ] 차이를 최대로

2023. 3. 3. 15:58·Algorithm/문제풀이

1. 문제

 

10819번: 차이를 최대로

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

www.acmicpc.net

 

2. 풀이

뭔가 주어진 수열의 연속된 부분합의 최대를 구하는 것이 수학적인 공식으로 해결할 수 있을 것 같기도 한데... 귀찮아서 백트래킹으로 풀었읍니다...

 

백트래킹을 시도할 수 있는 근거는, 문제에서 주어진 정수 배열의 범위가 최대 8로 8!의 경우의 수만 해결해주면 되기 때문이다. 따라서 배열에서 중복되지 않는 순열을 만드는 기법을 이용해 합을 산정해주었다. 이 때 매개변수로 이전 idx를 넘겨줌으로써 연속된 idx들의 합을 계속해서 더해나갈 수 있도록 처리하였다.

 

3. 소스코드

더보기
public class Main {
    static int N;
    static int[] arr;
    static boolean[] visit;
    static int ans = -801;

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

        arr = new int[N];
        visit = new boolean[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        backtracking(0, 0, -1);

        bw.write(ans + "");
        bw.close();
        br.close();
    }

    static void backtracking(int sum, int cnt, int preIdx) {
        if (cnt == N) {
            ans = Math.max(ans, sum);
            return;
        }

        for (int i = 0; i < N; i++) {
            if (visit[i]) continue;

            visit[i] = true;
            if (preIdx != -1) {
                backtracking(sum + Math.abs(arr[i] - arr[preIdx]), cnt + 1, i);
            } else {
                backtracking(sum, cnt + 1, i);
            }
            visit[i] = false;
        }
    }
}

 

 

GitHub - kwanik-kor/BOJ: Baekjoon Online Judge - explanation of solved problems and complete code

Baekjoon Online Judge - explanation of solved problems and complete code - GitHub - kwanik-kor/BOJ: Baekjoon Online Judge - explanation of solved problems and complete code

github.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > 문제풀이' 카테고리의 다른 글

[ 백준 14891번 ] 톱니바퀴  (0) 2023.03.05
[ 백준 3190번 ] 뱀  (3) 2023.03.03
[ 백준 14499번 ] 주사위 굴리기  (0) 2023.03.03
[ 백준 2003번 ] 수들의 합2  (0) 2023.03.02
[ 백준 14503번 ] 로봇 청소기  (0) 2023.03.01
'Algorithm/문제풀이' 카테고리의 다른 글
  • [ 백준 14891번 ] 톱니바퀴
  • [ 백준 3190번 ] 뱀
  • [ 백준 14499번 ] 주사위 굴리기
  • [ 백준 2003번 ] 수들의 합2
갈닉
갈닉
중요한 건 엔지니어가 되겠다는 마음. 근데 이제 인문학을 곁들인.
    반응형
  • 갈닉
    KwanIk Devlog
    갈닉
  • 전체
    오늘
    어제
    • 분류 전체보기 (57)
      • Algorithm (41)
        • 알고리즘 개요 (8)
        • 문제풀이 (33)
      • Language (6)
        • Java (1)
        • Kotlin (4)
        • Rust (1)
      • Framework (0)
        • Spring (0)
        • Spring Security (0)
        • Spring Data JPA (0)
      • Computer Science (1)
        • 프로그래밍 언어 (0)
        • 자료구조 (1)
        • 보안 (0)
      • ETC (1)
        • MSA (0)
        • TDD (1)
        • DDD (0)
      • 개발서적 (3)
        • 오브젝트 (3)
      • Life (5)
        • 생각생각 (4)
        • 회고록 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

    • My Github
  • 공지사항

  • 인기 글

  • 태그

    시뮬레이션
    알고리즘
    bitmask
    비트마스크
    Kotlin
    BFS
    greedy
    DP
    객체지향
    구현
    backtracking
    자바
    Algorithm
    boj
    오브젝트
    백준
    java
    백트래킹
    너비우선탐색
    코틀린
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
갈닉
[ 백준 10819번 ] 차이를 최대로
상단으로

티스토리툴바