[백준/BOJ] 27159번_노 땡스! (C++/Java)

JIMIN·2023년 1월 30일

BOJ_Bronze

목록 보기
32/75

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

문제


《노 땡스!》 는 3부터 35까지의 정수가 쓰인 수 카드를 이용하여 플레이할 수 있는 보드게임입니다. 수 카드를 경매를 통해서 낙찰받으며, 최종적으로 가지고 있는 수 카드를 이용하여 다음과 같이 점수를 계산합니다.
  1. 정수들을 오름차순으로 정렬한 뒤, 이웃한 수끼리의 차가 1인 구간들로 그룹을 나눕니다.
  2. 각 그룹별로 가장 작은 수를 모두 합한 값이 점수가 됩니다.

예를 들어 가지고 있는 수 카드가 6, 7, 10, 12, 13, 14, 15, 20, 21, 22라면, [6,7], [10], [12,13,14,15], [20,21,22]의 4개의 그룹으로 나뉘며, 점수는 6+10+12+20=48점입니다.

가지고 있는 수 카드가 주어졌을 때 점수를 계산하는 프로그램을 작성하세요.


입력


첫 번째 줄에 수 카드의 개수 N이 주어집니다.

두 번째 줄에 N개의 카드에 적힌 정수 xixi가 공백으로 구분되어 오름차순으로 주어집니다.


출력


첫 번째 줄에 문제에서 설명한 규칙에 따라 계산한 점수를 출력합니다.



💻 예제 입력

10
6 7 10 12 13 14 15 20 21 22

💻 예제 출력

48

풀이


모든 수를 배열로 전달받은 후 차례대로 1씩 차이나는지 검사.

arr[i-1]이 arr[i]-1과 같지 않으면, 즉 1 차이가 나지 않으면 arr[i]을 새로운 그룹의 시작 수로 보고 sum에 더함.


C++ 소스코드


#include <iostream>
using namespace std;

int main(void) {
    int N, sum = 0, arr[33] = { 0 };
    cin >> N;
    
    for (int i = 0; i < N; i++) cin >> arr[i];
    sum += arr[0];  // 첫번째 수는 일단 합하기
    
    for (int i = 1; i < N; i++) {
        if (arr[i-1] != arr[i]-1)
            sum += arr[i];  // 이웃한 수가 1차이 나지 않는 경우 합하기
    }
    cout << sum << "\n";
}

Java 소스코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String[] s = br.readLine().split(" ");

        int[] arr = new int[N];
        int sum = 0;

        for (int i = 0; i < N; i++) arr[i] = Integer.parseInt(s[i]);
        sum += arr[0];  // 첫번째 수는 일단 합하기

        for (int i = 1; i < N; i++) {
            if (arr[i-1] != arr[i]-1)
                sum += arr[i];  // 이웃한 수가 1차이 나지 않는 경우 합하기
        }
        System.out.println(sum);
    }
}
profile
잘못된 코드나 정보가 있다면 알려주세요! 👋🏻

0개의 댓글