๊ธ€ ์ž‘์„ฑ์ž: ๋˜ฅํด๋ฒ .
๋ฐ˜์‘ํ˜•

 

ํ•ด๋‹น ๊ธ€์˜ ๋‚ด์šฉ์€ ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹Œ ๊ธ€์“ด์ด์˜ ์ฃผ๊ด€์ ์ธ ํ’€์ด์ž…๋‹ˆ๋‹ค. ๋” ์ข‹์€ ํ’€์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค(__)

 

๋งํฌ


 

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

 

2012๋ฒˆ: ๋“ฑ์ˆ˜ ๋งค๊ธฐ๊ธฐ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 500,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์‚ฌ๋žŒ์˜ ์˜ˆ์ƒ ๋“ฑ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์˜ˆ์ƒ ๋“ฑ์ˆ˜๋Š” 500,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ์„ค๋ช…


 2007๋…„ KOI์— N๋ช…์˜ ํ•™์ƒ๋“ค์ด ์ฐธ๊ฐ€ํ•˜์˜€๋‹ค. ๊ฒฝ์‹œ์ผ ์ „๋‚ ์ธ ์˜ˆ๋น„์†Œ์ง‘์ผ์—, ๋ชจ๋“  ํ•™์ƒ๋“ค์€ ์ž์‹ ์ด N๋ช… ์ค‘์—์„œ ๋ช‡ ๋“ฑ์„ ํ•  ๊ฒƒ์ธ์ง€ ์˜ˆ์ƒ ๋“ฑ์ˆ˜๋ฅผ ์ ์–ด์„œ ์ œ์ถœํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

 

 KOI ๋‹ด๋‹น ์กฐ๊ต๋กœ ์ฐธ๊ฐ€ํ•œ ๊น€์ง„์˜ ์กฐ๊ต๋Š” ์‹ค์ˆ˜๋กœ ๋ชจ๋“  ํ•™์ƒ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋‚ ๋ ค ๋ฒ„๋ ธ๋‹ค. 1๋“ฑ๋ถ€ํ„ฐ N ๋“ฑ๊นŒ์ง€ ๋™์„์ฐจ ์—†์ด ๋“ฑ์ˆ˜๋ฅผ ๋งค๊ฒจ์•ผ ํ•˜๋Š” ๊น€ ์กฐ๊ต๋Š”, ์–ด์ฉ” ์ˆ˜ ์—†์ด ๊ฐ ์‚ฌ๋žŒ์ด ์ œ์ถœํ•œ ์˜ˆ์ƒ ๋“ฑ์ˆ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž„์˜๋กœ ๋“ฑ์ˆ˜๋ฅผ ๋งค๊ธฐ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 ์ž์‹ ์˜ ๋“ฑ์ˆ˜๋ฅผ A๋“ฑ์œผ๋กœ ์˜ˆ์ƒํ•˜์˜€๋Š”๋ฐ ์‹ค์ œ ๋“ฑ์ˆ˜๊ฐ€ B ๋“ฑ์ด ๋  ๊ฒฝ์šฐ, ์ด ์‚ฌ๋žŒ์˜ ๋ถˆ๋งŒ๋„๋Š” A์™€ B์˜ ์ฐจ์ด ( |A-B| )๋กœ ์ˆ˜์น˜ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ๋‹น์‹ ์€ N๋ช…์˜ ์‚ฌ๋žŒ๋“ค์˜ ๋ถˆ๋งŒ๋„์˜ ์ด ํ•ฉ์„ ์ตœ์†Œ๋กœ ํ•˜๋ฉด์„œ, ํ•™์ƒ๋“ค์˜ ๋“ฑ์ˆ˜๋ฅผ ๋งค๊ธฐ๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ ์‚ฌ๋žŒ์˜ ์˜ˆ์ƒ ๋“ฑ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊น€ ์กฐ๊ต๋ฅผ ๋„์™€ ์ด๋Ÿฌํ•œ ๋ถˆ๋งŒ๋„์˜ ํ•ฉ์„ ์ตœ์†Œ๋กœ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

 

์ œํ•œ ์กฐ๊ฑด


 ์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 500,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์‚ฌ๋žŒ์˜ ์˜ˆ์ƒ ๋“ฑ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์˜ˆ์ƒ ๋“ฑ์ˆ˜๋Š” 500,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

 

 

์ž…์ถœ๋ ฅ ์˜ˆ


<์ž…๋ ฅ 1>

5
1
5
3
1
2

 

 

<์ถœ๋ ฅ 1>

3

 

 

ํ’€์ด


[Golang]

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

func absoluteSubtract(a int, b int) uint64 {
	result := a - b
	if result < 0 {
		return uint64(result * -1)
	}

	return uint64(result)
}

func main() {
	r := bufio.NewReader(os.Stdin)
	var num int
	_, _ = fmt.Fscanf(r, "%d\n", &num)

	expectedList := make([]int, 0, num)
	for i := 0; i < num; i++ {
		var expected int
		_, _ = fmt.Fscanf(r, "%d\n", &expected)
		expectedList = append(expectedList, expected)
	}

	sort.Ints(expectedList)

	var result uint64
	for i := 0; i < num; i++ {
		result += absoluteSubtract(expectedList[i], i+1)
	}
	fmt.Println(result)
}

 

[C++]

#include <stdio.h>
#include <vector>
#include <algorithm>

const int MAX_NUM = 500000;

int main() 
{
	std::vector<int> expectedVector;
	int num;
    
	scanf("%d", &num);
	expectedVector.reserve(MAX_NUM);

	for (int i = 0; i < num; i++)
	{
		int expected;
		scanf("%d", &expected);
		expectedVector.push_back(expected);
	}
    
	std::sort(expectedVector.begin(), expectedVector.end());

	long long result = 0;
	for (int i = 1; i <= num; i++)
	{
		int expected = expectedVector[i-1];
		if (expected - i > 0)
		{
			result += expected - i;
		}
		else
		{
			result += i - expected;
		}
	}

	printf("%lld\n", result);
    
	return 0;
}

 

ํ’€์ด ์„ค๋ช…


 ์ž์‹ ์ด ์˜ˆ์ƒํ•œ ๋“ฑ์ˆ˜์™€ ์‹ค์ œ ๋“ฑ์ˆ˜์˜ ๊ฐ’์„ ์ตœ์†Œํ™”์‹œํ‚ค๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ํ•™์ƒ์ด ์˜ˆ์ƒํ•œ ๋“ฑ์ˆ˜์™€ ์‹ค์ œ ๋“ฑ์ˆ˜๋ฅผ ์ •๋ ฌํ•˜์—ฌ ๋‘ ์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’ ์ฐจ๋ฅผ ๊ตฌํ•œ ๋’ค ๋ชจ๋‘ ๋”ํ•ด์ฃผ๋ฉด ๋ถˆ๋งŒ๋„ ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’์ด ๋œ๋‹ค.

 

์ฃผ์˜: ํ•™์ƒ ์ˆ˜๊ฐ€ N๋ช…์ผ ๋•Œ ์˜ˆ์ƒํ•œ ๋“ฑ์ˆ˜๊ฐ€ N ์ด์ƒ ์ผ ์ˆ˜ ์žˆ๋‹ค -_-;; (ex. ํ•™์ƒ์ด 15๋ช…์ธ๋ฐ ์˜ˆ์ƒํ•œ ๋“ฑ์ˆ˜๋ฅผ 20์œ„๋ผ๊ณ  ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Œ)

 

๋ฐ˜์‘ํ˜•