문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
문제 링크
풀이
문제에서 시키는 대로 알파벳이 몇 번 나왔는 지를 세주면 된다.▼
꼼수고 뭐고 그냥 나오는대로 세준 다음에 제일 많이 나온거 찾으면 된다.
제일 많이 나온게 여러개면 그 때는 '?' 를 출력하면 된다.
Swift 코드
var str = readLine()!
var arr = Array(repeating: 0, count: 26)
for i in str {
let a = i
for j in 0..<26 {
if a.asciiValue! == 65 + j || a.asciiValue! == 97 + j {
arr[j] += 1
}
}
}
var confirm = false
for i in 0..<26 {
var a = 0
for j in 0..<26 {
if arr[i] > arr[j] {
a += 1
}
}
if a == 25 {
print(Character(UnicodeScalar(i + 65)!))
confirm = true
break
}
}
if confirm == false {
print("?")
}
Swift는 Ascii를 사용하지 않는다.
Unicode에다가 extended grapheme cluster라는 걸 이용해서 문자를 표현해서, 다른 언어들의 문자열과는 사뭇 다르다.
가장 큰 차이점은 문자열의 요소에 인덱스로 접근할 수 없다.
C 언어 처럼 string[10] 이런게 불가능하다.
하지만 Swift에서는 for문을 통해 각 요소에 접근할 수 있는데, 그렇게 문자를 다 따로 저장하는게 아닌 이상 문자열에서는 인덱스 접근이 불가능하다.
Ascii를 쓰지 않기 때문에 당연히 Character와 Int간의 자유로운 형변환도 불가능하다.
따라서 Swift의 경우 Character의 asciiValue라는 프로퍼티를 통해야만 Ascii 값을 얻을 수 있다.
그리고 그 Ascii값을 다시 원래의 Character로 돌리려면 UnicodeScalar라는 형변환도 해줘야한다.
안쓰고도 풀 수는 있지만, 선언할 변수가 많아지게 되고 직관적이지 않아서 그냥 Ascii로 변환해서 풀었다.
#include<iostream>
#include<string>
using namespace std;
int main()
{
int alphabet[26] = { 0, };
string S;
cin >> S;
for (int i = 0; i < S.length(); i++)
{
int a = 0;
a = S[i];
for (int i2 = 0; i2 < 26; i2++)
{
if (a == 65 + i2 || a == 97 + i2)
alphabet[i2]++;
}
}
bool confirm = false;
for (int i = 0; i < 26; i++)
{
int a = 0;
for (int i2 = 0; i2 < 26; i2++)
{
if (alphabet[i] > alphabet[i2])
a++;
}
if (a == 25)
{
char c(i + 65);
cout << c;
confirm = true;
break;
}
}
if (confirm == false)
{
cout << "?";
}
}
Swift로 푼 것과 비슷한 로직이다.
Swift와는 다르게 ascii를 사용할 수 있어서 0부터 25까지 쭉 순회하면서 각각 65와 97을 더해서 알파벳이 맞는지 확인해주면 된다.
'Algorithm > PS' 카테고리의 다른 글
백준 10341번 줄세우기 - C++ (0) | 2024.05.25 |
---|---|
백준 9655번 돌 게임 - C++ (0) | 2024.05.25 |
백준 2292번 벌집 - SWIFT, C++ (0) | 2024.05.23 |
백준 5073번 삼각형과 세 변 - SWIFT, C++ (0) | 2024.05.23 |
백준 23971번 ZOAC 4 - C++ (0) | 2024.05.23 |