작성일 :

문제 링크

6843번 - Anagram Checker

설명

대문자와 공백으로 이루어진 두 문장이 주어질 때, 공백을 무시하고 알파벳 빈도가 같으면 애너그램으로 판정하는 문제입니다.


접근법

알파벳 26개에 대한 빈도를 두 문장 각각 세어 배열을 비교합니다.

공백은 건너뛰고, 하나라도 다르면 “Is not an anagram.”, 모두 같으면 “Is an anagram.”을 출력합니다.



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
using System;

class Program {
  static void Main() {
    var a = Console.ReadLine()!;
    var b = Console.ReadLine()!;

    var ca = new int[26];
    var cb = new int[26];

    foreach (var ch in a)
      if (ch != ' ') ca[ch - 'A']++;
    foreach (var ch in b)
      if (ch != ' ') cb[ch - 'A']++;

    bool same = true;
    for (int i = 0; i < 26; i++) {
      if (ca[i] != cb[i]) { same = false; break; }
    }

    Console.WriteLine(same ? "Is an anagram." : "Is not an anagram.");
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;

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

  string a, b;
  getline(cin, a);
  getline(cin, b);

  int ca[26] = {0}, cb[26] = {0};
  for (char c : a) if (c != ' ') ca[c - 'A']++;
  for (char c : b) if (c != ' ') cb[c - 'A']++;

  bool same = true;
  for (int i = 0; i < 26; i++) if (ca[i] != cb[i]) { same = false; break; }

  cout << (same ? "Is an anagram." : "Is not an anagram.") << "\n";
  return 0;
}

Tags: 6843, BOJ, C#, C++, 구현, 문자열, 백준, 알고리즘

Categories: ,