반응형

보통은 CP850 인코딩 방식을 사용하므로 영어가 아닌 언어를 사용할때는 그에맞는 방식을 추가해주어야 한다 함

따라서 영어가 아닌 언어를 쓸때는 다른 코드페이지로 변경해주어야한다

 

※코드페이지 란

코드 페이지(code page)는 특정한 문자 인코딩 테이블을 위해 쓰이는 전통적인 IBM 용어이다.
문자 인코딩 테이블 부터 255까지의 정수를 표현하는 단일 옥텟(octet, 바이트)이라고 불리는 일련의 비트들이 특정한 문자와 결합하여 표화(mapping)한 것이다.
IBM과 마이크로소프트는 코드 페이지를 문자열 집합(charset)에 자주 할당한다.

 

437 원래의 IBM PC 코드 페이지
737 그리스어
850 "다중 언어 (라틴 1)" (서양 유럽 언어) 
852 "슬라브어 (라틴 2)" (동유럽 언어) 
855 키릴 자모 알파벳 
857 튀르키예어 
858 "다중 언어" - 유로 기호 
860 포르투갈어 
861 아이슬란드어 
863 프랑스 캐나다어 
865 북유럽어 
862 히브리어 
866 키릴 자모 알파벳 
869 그리스어 
10000 매킨토시 로마어 인코딩 (몇몇의 다른 맥 문자열 세트를 따름) 
10007 매킨토시 키릴 자모 인코딩 
10029 매킨토시 중앙유럽어 인코딩
932 일본어 지원 
936  GBK 중국어 간체자 지원 
949 한국어 지원 
950 중국어 번체자 (대만) 지원 
1200 UCS-2LE 유니코드 little-endian 
1201 UCS-2BE 유니코드 big-endian 
65000 UTF-7 유니코드 
65001 UTF-8 유니코드 
ASMO449+ 아랍어 지원 
MIK 불가리아어, 러시아어 지원

 

 

한글 utf-8 인코딩 방식 기준으로 65001로 변경하여 사용

 

chcp 65001

 

 

 

 

참고 : https://ss64.com/nt/chcp.html

 

CHCP - Change Code Page - Windows CMD - SS64.com

Change the active console Code Page. The default code page is determined by the Windows Locale. This command is rarely required as most GUI programs and PowerShell now support Unicode. When working with characters outside the ASCII range of 0-127, such as

ss64.com

https://stackoverflow.com/questions/1427796/batch-file-encoding

 

Batch file encoding

I would like to deal with filename containing strange characters, like the French é. Everything is working fine in the shell: C:\somedir\>ren -hélice hélice I know if I put this line in a .ba...

stackoverflow.com

https://ss64.com/nt/chcp.html

 

CHCP - Change Code Page - Windows CMD - SS64.com

Change the active console Code Page. The default code page is determined by the Windows Locale. This command is rarely required as most GUI programs and PowerShell now support Unicode. When working with characters outside the ASCII range of 0-127, such as

ss64.com

 

반응형
반응형

 

 

난독증이 있는 상수 이야기

 

풀이

 

입력은 세자리 문자열 2개가 들어온다

입력된 숫자(사실은 문자열임)의 배치를 반대로 바꾸어준 다음 비교하여 큰 값을 출력해주면 된다

(문자(char)에 저장된 숫자도 int형 숫자처럼 비교가 가능)

 

입력받은 문자열을 반대로 만든다음 맨 앞자리부터 비교한 다음 큰 수를 출력했다

반대로 만든 문자열의 한자리씩 비교하는 반복문 도중에

큰수가 있으면 출력 후 바로 리턴시켜서 종료했는데

 

이때 두 수가 같은 경우 반복문 내에서 결론이 나오지 않기때문에 반복문이 끝나고 둘 중 하나를 출력해주고 마무리시켰다

 

 

코드

 

#include <bits/stdc++.h>
using namespace std;
int main() {
	string str1,str2;
	cin >> str1;
	cin >> str2;
    
    //변환할 문자열
	string str1_, str2_;
    
    //문자열 반대로 변환
	for(int i=2; 0<=i; i--){
		str1_ += str1[i];
		str2_ += str2[i];
	}
    //앞자리부터 비교
	for(int i=0; i<3; i++){
		if(str1_[i] > str2_[i]){
			cout << str1_;
			return 0;
		}else if(str1_[i] < str2_[i]){
			cout << str2_;
			return 0;
		}
	}
    //반복문이 종료될때까지 큰수가 나타나지 않는다면 둘다 같은 수이므로 둘중에 하나를 출력했음
	cout << str1_;
	return 0;
}

 

 

출처 : https://www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

 

반응형
반응형

백준 문자열 단어의 개수 풀이

다양한 사례를 생각하지 못해서 연달아 틀리다가 겨우 맞음

 

 

 

 

 

풀이

띄어쓰기 -> ' '

문자가 끝난것을 알려주는 기호 -> '\0'

 

이거 2가지를 미리 알고있으면 문제 푸는게 쉬움

 

 

char 배열의 마지막에는 null 문자가 있어 문자가 끝났다는것을 알수있고 억저고 ~

관련된 깊은 지식은 따로 검색 ㄱㄱ

 

일단 입력 범위가 굉장히 광범위하므로 입력의 크기인 백만개보다 하나 큰 만큼의 char 배열을 만든다음

그 중에서 실제로 사용자가 입력한 만큼만을 입력받아 처리했다

 

cin으로 입력을 받으면 띄어쓰기만 해도 입력이 종료되므로 평소와는 다른 입력 방식을 사용해야 함

getline 을 이용하여 사용자가 입력한 만큼 입력받아 미리 만들어둔 배열에 저장한 다음

 

문자 하나하나 확인하여 처리하면 됨

 

 

입력된 문자열이 (     ) 공백으로만 존재하거나 (     a) 공백부터 시작하여 마지막에 알파벳이 나올수도있으므로

띄어쓰기를 기본으로 숫자를 세지말고 알파벳을 기준으로 단어를 인식하게 함

 

아스키코드를 사용해서 문자의 알파벳 여부를 확인함

외우자

알파벳은 아스키코드 65~90, 97~122이다

 

배열에 저장된 각 문자를 반복해서 돌때 알파벳을 마주치면

그 다음 문자가 공백인지 확인 후, 공백이 맞다면 단어의 개수를 하나 증가시켜주고

공백이 아니라면 계속 알파벳이 나오고 있다는 뜻이므로 그냥 무시했다

 

알파벳이 아닌 배열의 끝을 알리는 \0 문자를 마주친다면

마지막 문자의 바로 앞에 위치한 문자가 공백인지 확인 후, 공백이 아니라면 그것 또한 단어이므로 ex) (a   b)

단어의 개수를 하나 증가시키고 반복을 멈추고 단어의 개수를 출력하면 된다

 

 

코드
#include <bits/stdc++.h>
using namespace std;
int main() {
	int cnt=0;
	char arr[1000001];
	cin.getline(arr, sizeof(arr));
	for(int i=0; i<=sizeof(arr); i++){
    		//a~z 또는 A~Z
		if(65<=arr[i] && arr[i]<=90 || 97<=arr[i] && arr[i]<=122){
			if(arr[i+1] == ' ') cnt++;
		}// ' ', '\0', '\n'
		else{
			if(arr[i] == '\0') {
				if(arr[i-1] != ' ') cnt++;
				break;
			}
		}
	}
	cout << cnt;
	return 0;
}

 

 

 

출처 : https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열

www.acmicpc.net

 

반응형
반응형

 

문제 요약

알파벳으로 이루어진 입력 문자열에서 가장 많이 사용된 알파벳 대문자로 출력

가장 많이 사용된 알파벳이 2개 이상이라면 물음표 ? 출력

 

풀이 과정

알파벳 대문자(A~Z)는 아스키코드 65부터 90까지이며

알파벳 소문자(a~z)는 아스키코드 97부터 122까지이다

 

위의 두가지를 사용해서 처음에는 알파벳 a부터 z까지 해당하는 배열을 만들려고했으나

돌면서 중복 값을 찾는게 귀찮아서 벡터로 전환해서 해결했다

 

 

인덱스와 값으로 알파벳에 접근가능한 배열

A B C D E F G H I J K L M N O P W R S T U V W X Y Z
0 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
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

아스키코드 65가 A이므로

index가 0인 경우, 65를 더한 다음 char 화하여 출력해주면 A가 출력이 되는 방법을 사용했다

 

초기값을 -1로 세팅해서 입력 문자열 str에 특정 알파벳이 나올 때마다

65나 97을 뺀 값을 벡터의 인덱스로 사용하여 증감연산자로 값을 1씩 올려준다

 

이때, 최대값을 저장하는 max와 최대값의 위치를 저장하는 index도 함께 업데이트를 해준다

 

문자열에서 반복되는 알파벳을 모두 체크한 다음 count를 사용하여 벡터에서 특정 max 값의 갯수를 센다

max의 값이 2개 이상이라면 물음표를 출력하고

그렇지 않는 경우에는 index에 65를 더하여 문자로 출력시켜주면 끝

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
	vector<int> v1(26,0);
	string str;
	cin >> str;
	
	int tmp = 0;
    
	int index = 0;    
	int max = -1;
    
	for(int i=0; i<str.length(); i++){
    		//소문자
    		if(97 <= str[i] && str[i] <=122) {
			v1[str[i] - 97]++;
			if(max < v1[str[i] - 97]){
				max = v1[str[i]-97];
				index = str[i]-97;
			}
		}
        	//대문자
        	else if(65 <= str[i] && str[i] <= 90){
			v1[str[i] - 65]++;
			if(max < v1[str[i] - 65]){
				max = v1[str[i]-65];
				index = str[i]-65;
			}
		}
	}
    
	int cnt = count(v1.begin(), v1.end(), max);
	if(2<=cnt) cout << "?";
	else cout << char(index + 65);
	return 0;
}

 

 

 

 

출처 : https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

 

반응형

+ Recent posts