상세 컨텐츠

본문 제목

[백준]BOJ_단어 공부_ 1157번 브론즈 1 - C++ (아스키코드, string)

알고리즘/C++

by 셉인 2022. 11. 3. 12:46

본문

728x90

주어진 예제 입력을 다 입력해보지 않으면 해당 것 처럼 틀릴 수 있다..

1157번: 단어 공부 (acmicpc.net)

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

#include <iostream>
#include <string>
using namespace std;

int main()
{
   ios_base::sync_with_stdio(false); 
	cin.tie(nullptr); 
	cout.tie(nullptr);
int max =0;
string s;
int num=0;
int arrnum[26]={0};
cin>>s;
for(int j=0; j<s.size(); j++){
if(s[j]<97)
arrnum[s[j]-65]++;
else
arrnum[s[j]-97]++;
}


for(int z=0; z<26; z++){
if(arrnum[z]>max){
max=arrnum[z];
num=z;
}}
char c=num+65;
for(int i=0; i<26; i++){
if(num==i)
continue;//이걸 빼먹었는데 무조건 해줘야한다. 왜냐하면 안해주면 한번은 무조건 겹치니깐(max값) 계속 물음표가 출력된다. -> 내가 실수했던 부분
if(arrnum[i]==max){
cout<<'?';
return 0;}
}
cout<<c;//아스키코드 ->대문자 출력
    return 0;
}

이때 중요하게 사용된 개념이 '아스키코드다'

//아스키코드 소문자 97(a)~122(z), 대문자 65(a)~90(z) 

해당 게시물을 이용하면 더 자세한 지식을 얻을 수 있습니다.

[CS] 아스키코드/ASCII 란? (tistory.com)

 

[CS] 아스키코드/ASCII 란?

우리가 프로그래밍을 하다보면 '아스키코드'를 이용해서 문자를 숫자로, 숫자를 문자로 바꾸는 것이 편할 때가 있다. 먼저 아스키란? 미국 국립 표준 협회에서 표준화한 정보교환용 7비트 부호

sebbb-in.tistory.com

 

string은 배열처럼 문자열을 받아주는 것인데요.

해당 문제에서는 입력의 문자열을 받아서 얼마나 길이를 갖고 있는지 파악해줘서 메모리 낭비를 줄이도록 했습니다.

저는 처음에는 arr[100]으로 설정해서 문자열이 길어도 100줄은 넘지 않겠지라고 생각하고 배열을 만든 뒤 반복문을 100번 돌리는 형식으로 만들어줬었는데 string함수가 떠올라서 이를 이용해주었습니다.

- 문자열 받기 

cin >>s;

- string길이를 이용해서 반복문 돌리기

s.size();

s.length();

두개의 방법 모두 이용해도 됩니다.

 

<코드해석>

1. string을 사용할 것이므로 헤더파일을 넣어줍니다.

2. 먼저 문자열 길이만큼 반복문을 이용해서 97보다 작으면 대문자 크면 소문자라고 지정하였습니다.

3. 그러면 arrnum이라는 숫자 세서 각 배열칸에 넣어주는 배열을 이용해 0->A 1->B 이런 식으로 각 알파벳 별로 넣어주었습니다. 이때 else를 이용해서 대문자/ 소문자 구분 없이 같은 문자면 넣어주었습니다.

4. 그다음 알파벳의 갯수가 26개이니 26번도는 반복문을 이용해서 max가 더 작으면 max값에 해당 숫자를 넣어주고 , num에는 z값(해당 반복문 번호)을 넣어주었습니다. 이 z값은 마지막에 아스키코드에 유용하게 쓰입니다.

5. c라는 output을 만들어서 num+65해주면 마지막에 대문자가 출력됩니다. 만약 num이 0 이면 0+65= 65 해서 A가 출력됩니다.

6. num이 i랑 같다면 계속 진행 -> 같은 값이 있는지 판별 계속 진행

if(num==i)
continue;//이걸 빼먹었는데 무조건 해줘야한다. 왜냐하면 안해주면 한번은 무조건 겹치니깐(max값) 계속 물음표가 출력된다. -> 내가 실수했던 부분

7. 겹치는 게 있다면 if문으로 ?가 출력 될 것이며 없다며 c의 값 이때 c는 char 문자 이기에 대문자가 출력된다.

 

728x90

관련글 더보기

댓글 영역