본문 바로가기

# 프로그래밍 개발/04. 알고리즘 문제풀이

백준 알고리즘 3059번 [등장하지 않는 문자의 합] 문제풀이코드공개

반응형

문제

알파벳 대문자로 구성되어있는 문자열 S가 주어졌을 때, S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 구하는 프로그램을 작성하시오.

문자열 S가 “ABCDEFGHIJKLMNOPQRSTUVW” 일 때, S에 등장하지 않는 알파벳 대문자는 X, Y, Z이다. X의 아스키 코드 값은 88, Y는 89, Z는 90이므로 이 아스키 코드 값의 합은 267이다.

알파벳 대문자의 아스키 코드 값은 다음과 같다.

입력

입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성되어 있고, 문자열 S가 주어진다. S는 알파벳 대문자로만 구성되어 있고, 최대 1000글자이다.

출력

각 테스트 데이터에 대해, 입력으로 주어진 문자열 S에 등장하지 않는 알파벳 대문자의 아스키 코드 값의 합을 한 줄에 하나씩 출력한다.

알고리즘 분류

 

아스키코드 (ASCII) 코드는 미국에서 표준화한 정보교환용 7비트 부호 체계입니다. 

대표적인 문자 인코딩이라고도 할 수 있는데요. 저희와 같은 일반 사용자 혹은 프론트 단위의 개발자분들은 현업에서 거의 사용하지 않습니다. 그러나 만일 통신과 관련된 일을 하게 되면 주로 접하게 됩니다. 

 

오늘은 이 아스키코드와 관련되어 있는 문제 풀이코드를 공개하도록 하겠습니다

#include<stdio.h>
#include<string.h>

int main(){
	int t;
	scanf("%d",&t);
	char S[1003];
	int len,res=0;
	int arr[26];
	for(int i = 0 ; i < t ; i++){
		scanf("%s",&S);
		len = strlen(S);
		for(int j = 0 ; j < len ; j++){
			arr[S[j]-65] = 1;
		}
		for(int j = 0 ; j < 26 ; j++){
			if(arr[j]!=1)
				res += (j+65);
			arr[j] = 0;
		}
		printf("%d\n",res);
		res=0;
	}
}

해당 코드는 C언어로 작성이 되어 있으며, 문자열을 이용한 문제 풀이이기 때문에 string.h 라이브러리가 사용되었습니다. 코딩 테스트를 준비하기 전 활용가능한 라이브러리를 확인하고 가시는 것은 큰 도움이 됩니다. 만일 사용하기로 계획했던 라이브러리 지원을 하지 않거나, 라이브러리에서 지원하는 자료구조를 직접 구현하라는 요구를 받을 수도 있기 때문에 그렇습니다. 또한, 지원하는 라이브러리를 알고가면 어떤 문제가 나올지 유추하는 것도 가능합니다. 만일, 이번 코딩 테스트에서는 문자열 관련 라이브러리를 대거 사용한다면 문자열을 활용하는 문제가 나올 가능성이 높다는 의미이기도 합니다. 따라서, 코딩 테스트 전에 지원 라이브러리 리스트를 꼭 확인하시길 바라겠습니다. 

 

해당 문제는 단순히 아스키코드 값이 몇번 부터 시작하는지를 묻는 문제였으며, 그리드 알고리즘 느낌으로 처음부터 끝까지 조회한 뒤 더하면 되는 간단한 문제입니다. 

하지만 아스키코드 값이 몇번부터 시작하는지 모른다면 이야기가 달라지죠. 절대 풀 수 없는 문제가 될 것입니다. 

코딩 테스트 전 아스키코드 값이 어떻게 되는지는 전부 외우고 갈 수는 없지만 

'0'에 대한 값이 48

'A'에 대한 값이 65

'a'에 대한 값이 97

위의 세 가지 값만 알고가도 충분히 풀 수 있을 것이기에 이는 반드시 외워두시길 바라겠습니다. 

 

이상입니다! 

반응형