[백준 31663] Mean Words (C#, C++) - soo:bak
작성일 :
문제 링크
설명
여러 단어에서 같은 위치에 있는 문자들의 ASCII 값 평균을 구해 새로운 단어를 만드는 문제입니다.
각 위치마다 해당 위치에 문자가 있는 단어만 평균 계산에 포함하며, 평균값은 내림합니다.
접근법
가장 긴 단어의 길이까지 위치를 순회합니다. 각 위치에서 해당 위치에 문자가 있는 모든 단어의 문자 ASCII 값을 더하고 개수로 나눕니다. 나눈 결과를 문자로 변환하여 결과 단어에 추가합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Text;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var words = new string[n];
var maxLen = 0;
for (var i = 0; i < n; i++) {
words[i] = Console.ReadLine()!;
if (words[i].Length > maxLen) maxLen = words[i].Length;
}
var sb = new StringBuilder();
for (var pos = 0; pos < maxLen; pos++) {
var sum = 0;
var cnt = 0;
for (var i = 0; i < n; i++) {
if (words[i].Length > pos) {
sum += words[i][pos];
cnt++;
}
}
sb.Append((char)(sum / cnt));
}
Console.WriteLine(sb.ToString());
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <bits/stdc++.h>
using namespace std;
typedef vector<string> vs;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vs w(n);
int maxLen = 0;
for (int i = 0; i < n; i++) {
cin >> w[i];
if ((int)w[i].size() > maxLen) maxLen = w[i].size();
}
string res;
res.reserve(maxLen);
for (int pos = 0; pos < maxLen; pos++) {
int sum = 0, cnt = 0;
for (int i = 0; i < n; i++) {
if ((int)w[i].size() > pos) {
sum += w[i][pos];
cnt++;
}
}
res.push_back(char(sum / cnt));
}
cout << res << "\n";
return 0;
}