반응형

백준 심화1 그룹단어 체크 c++ 풀이

 

 

 

 

 

 

풀이

a b c d e f g h i j k l m n o p q r s t u v w x y z
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

문자열=아스키코드

알파벳 소문자 a부터 소문자 z까지 크기가 26인 배열을 만든다음 0으로 초기화

벡터에 반복하여 저장한 입력 문자열의 각 문자에 접근한 값에서 97을 빼준다음

그 위치에 해당하는 알파벳의 값을 1 증가시켜줌

 

이때 문자열 aab인 경우 예외가 되므로 이전 문자와 현재 문자가 다른 경우에만 배열 값을 증가시킴

배열 값이 1을 초과하는 경우, 이전에 나온 문자가 한번 더 나와 그룹단어가 아니게 되므로 세지않음

 

사용 변수 용도 설명

 

cnt : 문자열 반복해서 입력받을 횟수

ans : 그룹 단어 확인 후 출력할 갯수 (정답)

vector<string> : 반복해서 입력받은 문자열 저장하는 벡터

int arr[] : 알파벳 중복 횟수 확인용

isGroupWord : 그룹 단어가 아닌 경우 구분 용도

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int cnt = 0;
    cin >> cnt;
    int ans = 0;
    vector<string> str;
    bool isGroupWord = true;
    for(int i=0; i<cnt; i++){
        string s = "";
        cin >> s;
        str.push_back(s);
    }
    for(int i=0; i<str.size(); i++){
        int arr[26] = {0,};
        string s = str[i];
        for(int j=0; j<s.length(); j++){
            if(s.length() == 1){
                cout << "글자 수 한 개일 때 : " << s << "\n";
                break;
            }
            if(s[j] != s[j-1]){
                cout << "현재 문자 : " << s[j] << ", 이전 글자 : " <<s[j-1] <<"\n"; 
                arr[s[j]-97]++;
                if(arr[s[j]-97] > 1) {
                    cout <<"중복된 글자 : " <<s[j] <<"\n";
                    isGroupWord = false;
                    break;
                }
            }
        }
        cout <<"문자 하나 체크 완료, ans 값 : "<< ans<< "\n";
        if(isGroupWord) {
            cout << "isGroupWord true 이므로 ans 증가 \n";
            ans++;
        }
        isGroupWord = true; //값 초기화
    }
    cout << ans;
    return 0;
}

 

 

 

 

 

반응형
반응형

 

 

난독증이 있는 상수 이야기

 

풀이

 

입력은 세자리 문자열 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

 

반응형
반응형

문자열 반복해서 새로운 문자열을 만드는 문제

문제만보면 되게 쉬워보이는데 이전에 제출한게 틀려있길래 간만에 겸사겸사 풀어봄

 

 

 

 

 

 

 

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

//횟수만큼 반복해서 새로운 문자열 만들어주는 함수
int makeStr(int cnt, string str){
	//한번씩 출력할 문자열
	string tmpStr;
	
	for(int i=0; i<str.length(); i++){
		for(int j=0; j<cnt; j++){
			tmpStr += str[i];
		}
	}
	cout << tmpStr;
	return 0;
}

int main() {
	//전체 반복 횟수
	int totalCnt = 0;
	cin >> totalCnt;
	
    //makeStr 함수 호출 시 사용되는 변수 (횟수와 문자열)
	int tmpCnt = 0;    
	string tmpStr;
    
	for(int i=0; i<totalCnt; i++){
		cin >> tmpCnt;
		cin >> tmpStr;
		if(i>0) cout << "\n";
        //첫번째 입력이면 한번 출력 후 new line 필요없으므로
        //출력이 1이상일때부터 출력하도록 함
		makeStr(tmpCnt, tmpStr);
	}	
	return 0;
}

 

 

처음에 풀때는 메인함수에서 입력을 다 처리해주다가

그냥 문자열을 새로 만들어주는 함수 makeStr을 작성해서 호출하도록 했다

 

문자열 특성 상 배열처럼 인덱스 접근이 가능하므로

새로 만들 임시 문자열 tmpStr에 할당 연산자(+=)로 반복해야 하는 횟수만큼

i번째 문자열을 j(=cnt)번만큼 더해주었다

 

 

 

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

 

 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net

 

반응형
반응형

 

 

문자열을 취급하는 문제를 풀때 많이 마주치는 아스키코드

문자열 문제에서도 알파벳의 개수를 세거나, 알파벳의 위치를 계산해야할 때 주로 사용하는데

 

매번 찾아보기 귀찮아서 블로그에 박제해둠

 

 

 

 

먼저, 아스키코드란

 

미국 정보교환 표준부호 (영어: American Standard Code for Information Interchange),

줄여서 ASCII( /ˈæski/, 아스키)는

영문 알파벳을 사용하는 대표적인 문자 인코딩이다.

 

아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들

공백을 비롯한 95개의 출력 가능한 문자들로 총128개로 이루어진다.

 

제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다.

출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자,

그리고 하나의 공백 문자로 이루어진다.

 

 

 

표준 아스키코드 표 (Standard character set : 32~127)

영어로 적혀있지만 웬만한 기호만으로도 검색이 가능하니 이대로 사용하면 됨

 

 

DEC OCT HEX BIN Symbol HTML Number HTML Name Description
32 040 20 00100000   &#32;   Space
33 041 21 00100001 ! &#33;   Exclamation mark
34 042 22 00100010 " &#34; &quot; Double quotes (or speech marks)
35 043 23 00100011 # &#35;   Number
36 044 24 00100100 $ &#36;   Dollar
37 045 25 00100101 % &#37;   Per cent sign
38 046 26 00100110 & &#38; &amp; Ampersand
39 047 27 00100111 ' &#39;   Single quote
40 050 28 00101000 ( &#40;   Open parenthesis (or open bracket)
41 051 29 00101001 ) &#41;   Close parenthesis (or close bracket)
42 052 2A 00101010 * &#42;   Asterisk
43 053 2B 00101011 + &#43;   Plus
44 054 2C 00101100 , &#44;   Comma
45 055 2D 00101101 - &#45;   Hyphen
46 056 2E 00101110 . &#46;   Period, dot or full stop
47 057 2F 00101111 / &#47;   Slash or divide
48 060 30 00110000 0 &#48;   Zero
49 061 31 00110001 1 &#49;   One
50 062 32 00110010 2 &#50;   Two
51 063 33 00110011 3 &#51;   Three
52 064 34 00110100 4 &#52;   Four
53 065 35 00110101 5 &#53;   Five
54 066 36 00110110 6 &#54;   Six
55 067 37 00110111 7 &#55;   Seven
56 070 38 00111000 8 &#56;   Eight
57 071 39 00111001 9 &#57;   Nine
58 072 3A 00111010 : &#58;   Colon
59 073 3B 00111011 ; &#59;   Semicolon
60 074 3C 00111100 < &#60; &lt; Less than (or open angled bracket)
61 075 3D 00111101 = &#61;   Equals
62 076 3E 00111110 > &#62; &gt; Greater than (or close angled bracket)
63 077 3F 00111111 ? &#63;   Question mark
64 100 40 01000000 @ &#64;   At symbol
65 101 41 01000001 A &#65;   Uppercase A
66 102 42 01000010 B &#66;   Uppercase B
67 103 43 01000011 C &#67;   Uppercase C
68 104 44 01000100 D &#68;   Uppercase D
69 105 45 01000101 E &#69;   Uppercase E
70 106 46 01000110 F &#70;   Uppercase F
71 107 47 01000111 G &#71;   Uppercase G
72 110 48 01001000 H &#72;   Uppercase H
73 111 49 01001001 I &#73;   Uppercase I
74 112 4A 01001010 J &#74;   Uppercase J
75 113 4B 01001011 K &#75;   Uppercase K
76 114 4C 01001100 L &#76;   Uppercase L
77 115 4D 01001101 M &#77;   Uppercase M
78 116 4E 01001110 N &#78;   Uppercase N
79 117 4F 01001111 O &#79;   Uppercase O
80 120 50 01010000 P &#80;   Uppercase P
81 121 51 01010001 Q &#81;   Uppercase Q
82 122 52 01010010 R &#82;   Uppercase R
83 123 53 01010011 S &#83;   Uppercase S
84 124 54 01010100 T &#84;   Uppercase T
85 125 55 01010101 U &#85;   Uppercase U
86 126 56 01010110 V &#86;   Uppercase V
87 127 57 01010111 W &#87;   Uppercase W
88 130 58 01011000 X &#88;   Uppercase X
89 131 59 01011001 Y &#89;   Uppercase Y
90 132 5A 01011010 Z &#90;   Uppercase Z
91 133 5B 01011011 [ &#91;   Opening bracket
92 134 5C 01011100 \ &#92;   Backslash
93 135 5D 01011101 ] &#93;   Closing bracket
94 136 5E 01011110 ^ &#94;   Caret - circumflex
95 137 5F 01011111 _ &#95;   Underscore
96 140 60 01100000 ` &#96;   Grave accent
97 141 61 01100001 a &#97;   Lowercase a
98 142 62 01100010 b &#98;   Lowercase b
99 143 63 01100011 c &#99;   Lowercase c
100 144 64 01100100 d &#100;   Lowercase d
101 145 65 01100101 e &#101;   Lowercase e
102 146 66 01100110 f &#102;   Lowercase f
103 147 67 01100111 g &#103;   Lowercase g
104 150 68 01101000 h &#104;   Lowercase h
105 151 69 01101001 i &#105;   Lowercase i
106 152 6A 01101010 j &#106;   Lowercase j
107 153 6B 01101011 k &#107;   Lowercase k
108 154 6C 01101100 l &#108;   Lowercase l
109 155 6D 01101101 m &#109;   Lowercase m
110 156 6E 01101110 n &#110;   Lowercase n
111 157 6F 01101111 o &#111;   Lowercase o
112 160 70 01110000 p &#112;   Lowercase p
113 161 71 01110001 q &#113;   Lowercase q
114 162 72 01110010 r &#114;   Lowercase r
115 163 73 01110011 s &#115;   Lowercase s
116 164 74 01110100 t &#116;   Lowercase t
117 165 75 01110101 u &#117;   Lowercase u
118 166 76 01110110 v &#118;   Lowercase v
119 167 77 01110111 w &#119;   Lowercase w
120 170 78 01111000 x &#120;   Lowercase x
121 171 79 01111001 y &#121;   Lowercase y
122 172 7A 01111010 z &#122;   Lowercase z
123 173 7B 01111011 { &#123;   Opening brace
124 174 7C 01111100 | &#124;   Vertical bar
125 175 7D 01111101 } &#125;   Closing brace
126 176 7E 01111110 ~ &#126;   Equivalency sign - tilde
127 177 7F 01111111   &#127;   Delete

 

 

 

 

확장 아스키코드 표 (8비트 - 라틴어에 사용)

확장된 버전은 기존 7비트와 다르게 추가된 문자들을 사용할 수 있다

라틴어 외로 아래 사이트를 방문하면

Icelandic, Latin-1, Latin-2, Nordic, Portuguese and Turkish charsets을 이용할 수 있다

 

DEC OCT HEX BIN Symbol HTML Number HTML Name Description
128 200 80 10000000 &#128; &euro; Euro sign
129 201 81 10000001        
130 202 82 10000010 &#130; &sbquo; Single low-9 quotation mark
131 203 83 10000011 ƒ &#131; &fnof; Latin small letter f with hook
132 204 84 10000100 &#132; &bdquo; Double low-9 quotation mark
133 205 85 10000101 &#133; &hellip; Horizontal ellipsis
134 206 86 10000110 &#134; &dagger; Dagger
135 207 87 10000111 &#135; &Dagger; Double dagger
136 210 88 10001000 ˆ &#136; &circ; Modifier letter circumflex accent
137 211 89 10001001 &#137; &permil; Per mille sign
138 212 8A 10001010 Š &#138; &Scaron; Latin capital letter S with caron
139 213 8B 10001011 &#139; &lsaquo; Single left-pointing angle quotation
140 214 8C 10001100 Π&#140; &OElig; Latin capital ligature OE
141 215 8D 10001101        
142 216 8E 10001110 Ž &#142;   Latin capital letter Z with caron
143 217 8F 10001111        
144 220 90 10010000        
145 221 91 10010001 &#145; &lsquo; Left single quotation mark
146 222 92 10010010 &#146; &rsquo; Right single quotation mark
147 223 93 10010011 &#147; &ldquo; Left double quotation mark
148 224 94 10010100 &#148; &rdquo; Right double quotation mark
149 225 95 10010101 &#149; &bull; Bullet
150 226 96 10010110 &#150; &ndash; En dash
151 227 97 10010111 &#151; &mdash; Em dash
152 230 98 10011000 ˜ &#152; &tilde; Small tilde
153 231 99 10011001 &#153; &trade; Trade mark sign
154 232 9A 10011010 š &#154; &scaron; Latin small letter S with caron
155 233 9B 10011011 &#155; &rsaquo; Single right-pointing angle quotation mark
156 234 9C 10011100 œ &#156; &oelig; Latin small ligature oe
157 235 9D 10011101        
158 236 9E 10011110 ž &#158;   Latin small letter z with caron
159 237 9F 10011111 Ÿ &#159; &Yuml; Latin capital letter Y with diaeresis
160 240 A0 10100000   &#160; &nbsp; Non-breaking space
161 241 A1 10100001 ¡ &#161; &iexcl; Inverted exclamation mark
162 242 A2 10100010 ¢ &#162; &cent; Cent sign
163 243 A3 10100011 £ &#163; &pound; Pound sign
164 244 A4 10100100 ¤ &#164; &curren; Currency sign
165 245 A5 10100101 ¥ &#165; &yen; Yen sign
166 246 A6 10100110 ¦ &#166; &brvbar; Pipe, Broken vertical bar
167 247 A7 10100111 § &#167; &sect; Section sign
168 250 A8 10101000 ¨ &#168; &uml; Spacing diaeresis - umlaut
169 251 A9 10101001 © &#169; &copy; Copyright sign
170 252 AA 10101010 ª &#170; &ordf; Feminine ordinal indicator
171 253 AB 10101011 « &#171; &laquo; Left double angle quotes
172 254 AC 10101100 ¬ &#172; &not; Not sign
173 255 AD 10101101 ­ &#173; &shy; Soft hyphen
174 256 AE 10101110 ® &#174; &reg; Registered trade mark sign
175 257 AF 10101111 ¯ &#175; &macr; Spacing macron - overline
176 260 B0 10110000 ° &#176; &deg; Degree sign
177 261 B1 10110001 ± &#177; &plusmn; Plus-or-minus sign
178 262 B2 10110010 ² &#178; &sup2; Superscript two - squared
179 263 B3 10110011 ³ &#179; &sup3; Superscript three - cubed
180 264 B4 10110100 ´ &#180; &acute; Acute accent - spacing acute
181 265 B5 10110101 µ &#181; &micro; Micro sign
182 266 B6 10110110 &#182; &para; Pilcrow sign - paragraph sign
183 267 B7 10110111 · &#183; &middot; Middle dot - Georgian comma
184 270 B8 10111000 ¸ &#184; &cedil; Spacing cedilla
185 271 B9 10111001 ¹ &#185; &sup1; Superscript one
186 272 BA 10111010 º &#186; &ordm; Masculine ordinal indicator
187 273 BB 10111011 » &#187; &raquo; Right double angle quotes
188 274 BC 10111100 ¼ &#188; &frac14; Fraction one quarter
189 275 BD 10111101 ½ &#189; &frac12; Fraction one half
190 276 BE 10111110 ¾ &#190; &frac34; Fraction three quarters
191 277 BF 10111111 ¿ &#191; &iquest; Inverted question mark
192 300 C0 11000000 À &#192; &Agrave; Latin capital letter A with grave
193 301 C1 11000001 Á &#193; &Aacute; Latin capital letter A with acute
194 302 C2 11000010 Â &#194; &Acirc; Latin capital letter A with circumflex
195 303 C3 11000011 Ã &#195; &Atilde; Latin capital letter A with tilde
196 304 C4 11000100 Ä &#196; &Auml; Latin capital letter A with diaeresis
197 305 C5 11000101 Å &#197; &Aring; Latin capital letter A with ring above
198 306 C6 11000110 Æ &#198; &AElig; Latin capital letter AE
199 307 C7 11000111 Ç &#199; &Ccedil; Latin capital letter C with cedilla
200 310 C8 11001000 È &#200; &Egrave; Latin capital letter E with grave
201 311 C9 11001001 É &#201; &Eacute; Latin capital letter E with acute
202 312 CA 11001010 Ê &#202; &Ecirc; Latin capital letter E with circumflex
203 313 CB 11001011 Ë &#203; &Euml; Latin capital letter E with diaeresis
204 314 CC 11001100 Ì &#204; &Igrave; Latin capital letter I with grave
205 315 CD 11001101 Í &#205; &Iacute; Latin capital letter I with acute
206 316 CE 11001110 Î &#206; &Icirc; Latin capital letter I with circumflex
207 317 CF 11001111 Ï &#207; &Iuml; Latin capital letter I with diaeresis
208 320 D0 11010000 Ð &#208; &ETH; Latin capital letter ETH
209 321 D1 11010001 Ñ &#209; &Ntilde; Latin capital letter N with tilde
210 322 D2 11010010 Ò &#210; &Ograve; Latin capital letter O with grave
211 323 D3 11010011 Ó &#211; &Oacute; Latin capital letter O with acute
212 324 D4 11010100 Ô &#212; &Ocirc; Latin capital letter O with circumflex
213 325 D5 11010101 Õ &#213; &Otilde; Latin capital letter O with tilde
214 326 D6 11010110 Ö &#214; &Ouml; Latin capital letter O with diaeresis
215 327 D7 11010111 × &#215; &times; Multiplication sign
216 330 D8 11011000 Ø &#216; &Oslash; Latin capital letter O with slash
217 331 D9 11011001 Ù &#217; &Ugrave; Latin capital letter U with grave
218 332 DA 11011010 Ú &#218; &Uacute; Latin capital letter U with acute
219 333 DB 11011011 Û &#219; &Ucirc; Latin capital letter U with circumflex
220 334 DC 11011100 Ü &#220; &Uuml; Latin capital letter U with diaeresis
221 335 DD 11011101 Ý &#221; &Yacute; Latin capital letter Y with acute
222 336 DE 11011110 Þ &#222; &THORN; Latin capital letter THORN
223 337 DF 11011111 ß &#223; &szlig; Latin small letter sharp s - ess-zed
224 340 E0 11100000 à &#224; &agrave; Latin small letter a with grave
225 341 E1 11100001 á &#225; &aacute; Latin small letter a with acute
226 342 E2 11100010 â &#226; &acirc; Latin small letter a with circumflex
227 343 E3 11100011 ã &#227; &atilde; Latin small letter a with tilde
228 344 E4 11100100 ä &#228; &auml; Latin small letter a with diaeresis
229 345 E5 11100101 å &#229; &aring; Latin small letter a with ring above
230 346 E6 11100110 æ &#230; &aelig; Latin small letter ae
231 347 E7 11100111 ç &#231; &ccedil; Latin small letter c with cedilla
232 350 E8 11101000 è &#232; &egrave; Latin small letter e with grave
233 351 E9 11101001 é &#233; &eacute; Latin small letter e with acute
234 352 EA 11101010 ê &#234; &ecirc; Latin small letter e with circumflex
235 353 EB 11101011 ë &#235; &euml; Latin small letter e with diaeresis
236 354 EC 11101100 ì &#236; &igrave; Latin small letter i with grave
237 355 ED 11101101 í &#237; &iacute; Latin small letter i with acute
238 356 EE 11101110 î &#238; &icirc; Latin small letter i with circumflex
239 357 EF 11101111 ï &#239; &iuml; Latin small letter i with diaeresis
240 360 F0 11110000 ð &#240; &eth; Latin small letter eth
241 361 F1 11110001 ñ &#241; &ntilde; Latin small letter n with tilde
242 362 F2 11110010 ò &#242; &ograve; Latin small letter o with grave
243 363 F3 11110011 ó &#243; &oacute; Latin small letter o with acute
244 364 F4 11110100 ô &#244; &ocirc; Latin small letter o with circumflex
245 365 F5 11110101 õ &#245; &otilde; Latin small letter o with tilde
246 366 F6 11110110 ö &#246; &ouml; Latin small letter o with diaeresis
247 367 F7 11110111 ÷ &#247; &divide; Division sign
248 370 F8 11111000 ø &#248; &oslash; Latin small letter o with slash
249 371 F9 11111001 ù &#249; &ugrave; Latin small letter u with grave
250 372 FA 11111010 ú &#250; &uacute; Latin small letter u with acute
251 373 FB 11111011 û &#251; &ucirc; Latin small letter u with circumflex
252 374 FC 11111100 ü &#252; &uuml; Latin small letter u with diaeresis
253 375 FD 11111101 ý &#253; &yacute; Latin small letter y with acute
254 376 FE 11111110 þ &#254; &thorn; Latin small letter thorn
255 377 FF 11111111 ÿ &#255; &yuml; Latin small letter y with diaeresis

 

 

 

 

 

참고 : https://www.ascii-code.com/

 

ASCII Code - The extended ASCII table

The following ASCII table with hex, octal, html, binary and decimal chart conversion contains both the ASCII control characters, ASCII printable characters and the extended ASCII character set Windows-1252.

www.ascii-code.com

 

 

그 외의 나라의 확장 아스키코드 포함

https://www.ascii-codes.com/

 

Ascii table for IBM PC charset (CP437) - Ascii-Codes

Code page 437 (IBM PC) American Standard Code for Information Interchange (ASCII) is a widely used character encoding system introduced in 1963. The original character set, which is now referred as the standard character set was initially composed of 128 c

www.ascii-codes.com

 

 

 

https://ko.wikipedia.org/wiki/ASCII

 

ASCII - 위키백과, 우리 모두의 백과사전

1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문 알파벳을 사용하는 대표적인 문자

ko.wikipedia.org

 

반응형
반응형

 

 

하나라도 완료를 뜨게하고싶어서 시도한 입출력문제

new line(\n)과 문자열 escape(\)를 추가해주면 간단하게 해결할수있다

 

 

 

 

#include<bits/stdc++.h>
using namespace std;
int main() {	
	cout<<"\\    /\\\n )  ( ')\n(  /  )\n \\(__)|";
	return 0;
}

예제 출력을 그대로 복사 붙여넣기한 다음,

줄바꿈이 필요한 곳은 \n를 백슬래시(\)앞에는 \를 추가해주면 된다

 

 

 

#include<bits/stdc++.h>
using namespace std;
int main() {	
	cout<<"|\\_/|\n|q p|   /}\n( 0 )\"\"\"\\\n|\"^\"`    |\n||_/=\\\\__|";
	return 0;
}

 

 

 

 

이게 왜 개랑 고양이인가 싶었는데

막상 출력해보니 은근 귀여움ㅋ

 

 

 

반응형
반응형

 

 

데이터베이스 공부 겸 MySQL 쿼리문 공부겸 시작해본 SQL 고득점 키트

Level1은 간단하게 작성할 수 있어서 풀어본 문제들을 한꺼번에 올려본다

 

※공부용으로 정리하였으니 오타나 잘못된 사항이 있다면 알려주세요

 

 

1. 모든 레코드 조회하기 - 59034번

 

 

SELECT * from ANIMAL_INS
ORDER BY ANIMAL_ID;

 

모든 필드를 조회하여 SELECT * from 테이블 명을 사용하였고

ANIMAL_ID를 기준으로 조회되어야 하므로 ORDER BY ANIMAL_ID를 사용해주었다

(ORDER BY는 일반적으로 내림차순 조회이다)

 

 

 

2. 역순 정렬하기 - 59035번

 

SELECT NAME, datetime from ANIMAL_INS
order by ANIMAL_ID desc;

 

동물의 이름과 보호 시작을일 조회하므로

NAME 컬럼과 DATETIME 컬럼을 SELECT 해준다

역순으로 정렬은 ORDER BY를 사용하되, 뒤에 desc를 덧붙여준다

 

*영어 단어 ascend descend에서 유래되었다

 

 

3. 아픈 동물 찾기 - 59036번

 

SELECT ANIMAL_ID, NAME from ANIMAL_INS
WHERE INTAKE_CONDITION="Sick" order by ANIMAL_ID

테이블에서 해당하는 조건에 맞는 동물을 찾고, 아이디 순서대로 조회해야 하므로

WHERE절과 ORDER BY를 사용하였다

 

INTAKE_CONDITION 컬럼의 값이 Normal, Sick, Aged가 있는데

아픈 동물은 INTAKE_CONDITION 컬럼의 값이 Sick 이어야 하고,

 

결과를 동물 아이디ANIMAL_ID 순서대로 조회해야하므로

ORDER BY ANIMAL_ID를 사용하였다

 

 

4. 어린 동물 찾기 - 59037번

 

 

SELECT ANIMAL_ID, NAME from ANIMAL_INS
where not INTAKE_CONDITION = "Aged" order by ANIMAL_ID

위와 마찬가지로 어린 동물을 찾아야 하므로 WHERE 조건절을 사용하되, not을 덧붙여서

INTAKE_CONDITION 값이 Aged인 동물을 걸러내준다

 

마찬가지로 아이디 순으로 조회하므로 ORDER BY를 사용해준다

 

 

5. 동물의 아이디와 이름 - 59403번

 

 

SELECT ANIMAL_ID,NAME from ANIMAL_INS
order by ANIMAL_ID

위의 내용들과 겹쳐서 생략

 

 

6. 여러 기준으로 정렬하기 - 59404번

 

 

SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS
ORDER BY NAME, DATETIME desc

동물의 이름을 사전순으로 조회하되, 보호 시기가 늦은 동물부터 조회해야하므로

조회하는 조건을 이름에서 보호날짜인 DATETIME을 추가 입력해준다

 

이름은 사전순이므로 order by 디폴트값을 사용하고,

오름차순이어야 하는 datetime은 desc을 덧붙여준다

 

 

7. 상위 n개 레코드 - 59405번

 

 

 

SELECT NAME from ANIMAL_INS
order by DATETIME limit 1

 

출력 데이터의 개수 제한이 필요하므로 limit를 사용한다

가장 먼저 들어온 동물이 필요하므로

조회한 다음, 하나만 출력해야해서 limit 뒤의 제한 숫자는 1로 입력한다

 

 

 

 

 

 

참고 : 

https://programmers.co.kr/learn/courses/30/parts/17042

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

반응형
반응형

2021 데브매칭 백엔드 상반기 문제를 풀어봤다

※그냥.. 최적이고 간에 해결하는것에 의의를 둔 풀이임

 

 

늘 그렇듯 1번 문제부터 고전했다.,

 

고전하는 중 질문하기 페이지를 구경하다가 문제에 대해 화가난 유저도 보았다

 

 

문제 요약

민우가 구입한 로또 번호 6개 중 동생이 랜덤하게 덧칠을 해서 알수없는게 n개 있는데

이 n개가 로또 정답일 때, 정답이 아닐 때 를 각각 구하면 됨

 

 

 

 

처음에 생각했던 방식

default_num, : 민우의 로또 번호 중 정답 로또 번호와 일치하는 것

ran_num : 민우의 번호 중 0 인 것

 

for문을 돌려 lottos(민우 로또 번호), win_nums(정답 로또 번호)를 비교하여 위의 변수에 ++; 해줌

 

민우와 정답 로또번호를 모두 비교해서 ran_num, default_num을 구한 뒤

미리 지정해둔 정답과 등수의 map을 이용해

answer에 각각 map[default_num+ran_num]과, map[default_num]을 삽입하도록 하였는데

 

테스트 케이스에서 계속 3개만 맞고 나머지 11개정도를 죄다 틀려버리는 사태가 발생해서

중간 중간 출력을 해보며 확인한 결과,

 

로또 번호를 비교하는 반복문을 수행할 때, 이미 0(ran_num)을 찾은 뒤에 또다시 같은 값을 확인해버리는 상황이 발생해서 문제가 생기는걸 확인함

 

 

해결법으로 2가지 정도를 생각해봤는데

1) 각각의 벡터를 정렬 시킨다음, 위의 방법처럼 for문으로 비교를 하는것과

2) 민우의 로또 번호에서 0을 찾은 다음, 6에서 그 개수를 뺀 나머지만큼만 반복문을 돌려서 수를 비교하는것 중

후자를 선택했다

 

※ 1번이 맞는 방법이 아닐수도 있다

 

 

map에 지정해둔 등수와 개수

맞힌 개수 등수
6 1
5 2
4 3
3 4
2 5
1 6
0 6

 

 

착오를 거쳐 수정한 방법

민우의 로또 번호 중 0의 갯수를 미리 모두 찾아 ran_num에 저장

그리고 민우의 번호인 lottos 벡터에서 0을 모두 지워버린 다음

그만큼 반복을 덜하도록 for문을 수정해주었다

 

#include<bits/stdc++.h>

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    
    //최저 값, 랜덤 값 확인
    //default인 값 만큼은 갯수를 맞힐수있다
    //랜덤 값 만큼 디폴트 기준 위아래로 범위가 넓어짐    
    int default_num = 0;
    
    int ran_num = count(lottos.begin(), lottos.end(), 0);
    cout << "0의 값 : " << ran_num <<"\n";
    remove(lottos.begin(), lottos.end(), 0);
    
    //로또 번호 총 6개에서 민우 번호 중 0개인 만큼 제외하여
    //비교할 for문에 사용
    int len = lottos.size();
    int len1 = len-ran_num;
    int len2 = win_nums.size();
    
    //로또 정답과 민우 번호 비교에 사용
    int tmp;
    
    for(int i=0; i<len1; i++){
        tmp = lottos[i];      
        cout <<"\n tmp 값 : " << tmp << "\n";
        
        for(int j=0; j<len2; j++){            
            if(tmp == win_nums[j]){
                default_num++;
                cout <<"값이 같음, default 값 : " <<+ default_num << "\n";
                break;                
            }
        }
    }
       
    map<int,int> m;
    //맞은 갯수, 등수
    m[6] = 1;
    m[5] = 2;
    m[4] = 3;
    m[3] = 4;
    m[2] = 5;
    m[1] = 6;
    m[0] = 6;
           
    answer.push_back(m[default_num+ran_num]);    
    answer.push_back(m[default_num]);
    
    /* 맞게 들어갔는지 확인차 출력
    for(int i=0; i<2; i++){
        cout <<answer[i] << ", \n";
    }*/
    
    return answer;
}

최고 순위 : default_num + ran_num
> 맞은 로또 번호에 ran_num(0)이 추가로 정답일 경우
     
최저 순위 : default_num
> ran_num(0)이 로또 정답이 아닐 경우

 

map의 value 값은 중복이 가능하므로

m[1]=6, m[0] =6을 넣어줌

 

 

 

https://programmers.co.kr/learn/courses/30/lessons/77484?language=cpp 

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

반응형
반응형

 

 

 

 

 

입력된 문자열 2개를 같은 문자열로 만들기 위해 제거해야할 최소의 문자의 수를 구하는문제

 

예제를 보면 aabbcc와 xxyybb는 공통된 bb만을 갖고있으므로 나머지 aacc와 xxyy는 제거되어야한다

따라서 총 8개의 문자를 제거해야하므로 출력값은 8이 나오는것

 

 

풀이를 위해 생각한 과정

 

문자열 str1, str2를 각각 입력받은 다음, a부터 z까지의 크기를 갖는 배열 arr1, arr2를 만든다

 

str1에서 나온 문자를 arr1의 알파벳 문자에 해당하는 인덱스 값을 증가시켜주어

str1에 해당하는 문자의 개수를 기록한다

 

그렇게 str2도 동일한 과정을 거쳐

arr1과 arr2와의 차이를 모두 더한 값을 출력하도록했다

 

이때, 차이는 음수가 될수있으므로 음수인경우는 -부호를 붙여 양수로 만들어 계산을 했다

 

 

문제 - str1과 str2의 사이즈가 다르다는 생각을 못해서 런타임 에러가 났다

OutOfBounds 컨테이너 또는 배열에서 할당된 경계를 넘어가는 접근 발생

 

런타임 에러가 났길래 자세히 봤더니 배열 범위에 문제가 생긴듯해서 처음에는 알파벳개수에 문제가 생긴줄알았는데

입력받는 문자열의 개수가 다를수있다는걸 간과해서

 

각각의 개수를 반복하는 반복문으로 수정해서 오류 해결완료함

 

 

 

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

int main() {	
	string str1;
	string str2;	
	cin >> str1;
	cin >> str2;
	
	int arr1[27]={0};
	int arr2[27]={0};
	
	for(int i=0; i<str1.size();i++){		
		arr1[str1[i]-'a']++;	
	}
    
	for(int i=0; i<str2.size();i++){		
		arr2[str2[i]-'a']++;
	}
    
	int ans=0;
	int tmp;
	
	for(int i=0; i<26; i++){
		tmp = arr1[i]-arr2[i];		
		if(tmp >0){
			ans+=tmp;
		}else{
			ans+=(-tmp);
		}
	}
	cout << ans;
	return 0;
}

 

 

 

 

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

 

1919번: 애너그램 만들기

두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs

www.acmicpc.net

 

반응형

+ Recent posts