작성일 :

문제 링크

31663번 - Mean Words

설명

여러 단어에서 같은 위치에 있는 문자들의 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;
}