Skip to content

Commit

Permalink
📝 BOJ solution is posted.
Browse files Browse the repository at this point in the history
  • Loading branch information
soo-bak committed Aug 5, 2023
1 parent 3d88ba0 commit f2f272f
Showing 1 changed file with 99 additions and 0 deletions.
99 changes: 99 additions & 0 deletions algorithm/boj/_posts/2023-08-05-[Koncert-35].md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
layout: single
title: "[백준 7947] Koncert (C#, C++) - soo:bak"
date: "2023-08-05 13:34:00 +0900"
description: 문자열, 구현 등을 주제로 하는 백준 7947번 문제를 C++ C# 으로 풀이 및 해설
---

## 문제 링크
[7947번 - Koncert](https://www.acmicpc.net/problem/7947)

## 설명
특정 색상을 만들기 위해 `10` 개의 램프를 사용했을 때, 각 램프의 색상을 입력받아 최종 색상의 `RGB` 값을 계산하는 문제입니다.<br>
<br>
각 램프의 `0``255` 사이의 `RGB` 색상값을 입력받은 후 각 색상값들을 더하고,<br>
<br>
램프의 수인 `10` 으로 나누어 평균을 계산합니다.<br>
<br>
이후, 평균을 가장 가까운 정수로 반올림하여 게산된 평균 색상을 출력합니다.<br>
<br><br><br>
`C#``Math.Round()` 메서드는 과 `C++``round()` 함수와 작동방식이 다름에 주의합니다. <br>
<br>
`C++``round()` 함수는 반올림할 값이 정확히 중간에 위치하면(즉, `.5` 인 경우),<br>
<br>
가장 가까운 짝수로 반올림하지 않고, 반드시 큰 쪽으로 반올림합니다.<br>
<br>
예를 들어 `2.5``3` 으로, `3.5``4` 로 반올림됩니다.
<br><br>
반면, `C#``Math.Round` 메서드는 기본적으로 `Banker's rounding` 을 사용합니다.<br>
<br>
이는 반올림할 값이 정확히 중간에 위치하면 가장 가까운 `짝수` 로 반올림 대상을 선택합니다. <br>
<br>
예를 들어, `2.5` 를 반올림하면 `2` 가 되고, `3.5` 를 반올림하면 `4` 가 됩니다. <br>
<br>
따라서, 중간값을 무조건 큰 쪽으로 반올림하려는 경우, <br>
<br>
`Math.Round()` 메서드의 두 번째 인수로 `MidpointRound` 열거형을 이용하여 반올림의 방식을 변경해주어야 합니다.<br>

- - -

## Code
<b>[ C# ] </b>
<br>

```c#
namespace Solution {
class Program {
static void Main(string[] args) {

var z = int.Parse(Console.ReadLine()!);

for (int i = 0; i < z; i++) {
int sumR = 0, sumG = 0, sumB = 0;
for (int j = 0; j < 10; j++) {
var rgb = Console.ReadLine()!.Split(' ').Select(int.Parse).ToArray();
sumR += rgb[0];
sumG += rgb[1];
sumB += rgb[2];
}
sumR = (int)Math.Round(sumR / 10.0, MidpointRounding.AwayFromZero);
sumG = (int)Math.Round(sumG / 10.0, MidpointRounding.AwayFromZero);
sumB = (int)Math.Round(sumB / 10.0, MidpointRounding.AwayFromZero);
Console.WriteLine($"{sumR} {sumG} {sumB}");
}

}
}
}
```
<br><br>
<b>[ C++ ] </b>
<br>

```c++
#include <bits/stdc++.h>

using namespace std;

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);

int z; cin >> z;

for (int i = 0; i < z; i++) {
int sumR = 0, sumG = 0, sumB = 0;
for (int j = 0; j < 10; j++) {
int r, g, b; cin >> r >> g >> b;
sumR += r;
sumG += g;
sumB += b;
}
cout << round((double)sumR / 10) << " "
<< round((double)sumG / 10) << " "
<< round((double)sumB / 10) << "\n";
}

return 0;
}
```

0 comments on commit f2f272f

Please sign in to comment.