https://www.acmicpc.net/step/7
https://www.acmicpc.net/problem/11654
방법 1
#include <iostream>
using namespace std;
int main() {
char a;
cin >> a;
cout << int(a);
}
방법 2
#include <stdio.h>
int main(){
char u;
scanf("%c",&u);
printf("%d",u);
}
https://www.acmicpc.net/problem/11720
방법 1 - 2020KB, 0ms, 162B
character를 int 변환하면 ascii 코드 변환이 됨
따라서 숫자로 인식하고 싶다면 ascii 코드로 변환되기 전 '0'을 뺀 숫자를 사용하면 원하는 숫자를 얻을 수 있음.
#include <iostream>
using namespace std;
int main() {
int n, s=0;
cin >> n;
char t[n];
cin >> t;
for (int i=0; i<n; i++) s += int(t[i] - '0');
cout << s;
}
방법 2 - 1112KB, 0ms, 123B
#include<stdio.h>
int main(){
int t,n,s=0;
scanf("%d",&t);
while(t--){
scanf("%1d",&n);
s+=n;
}
printf("%d",s);
}
https://www.acmicpc.net/problem/10809
방법 1 - 2020KB, 0ms, 252B
array initialization 방법 중 하나인 fill_n(array, int(length), initialization value)
참고로 첫 for문에서 조건을 '\0'이 아닐 때로 설정하지 않고 100으로 설정하면 문제가 됨. 뒤에 있는 오류 파트 참조.
#include <iostream>
using namespace std;
int main() {
char s[101];
cin >> s;
int b[26];
fill_n(b, 26, -1);
for (int i = 0; s[i] != '\0'; i++) {
if (b[s[i] - 'a'] < 0) b[s[i] - 'a'] = i;
}
for (int k=0; k<26; k++)
cout << b[k] << " ";
}
방법 2 - 2024KB, 0ms, 228B
string.find('b')를 통해 최초 등장 위치 인덱스 반환
string.length()를 통해 string 길이 추정 (strlen(string)으로도 활용 가능)
https://aigong.tistory.com/259 참조
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
string a = "abcdefghijklmnopqrstuvwxyz";
cin >> s;
for(int i = 0; i < a.length(); i++)
cout << (int)s.find(a[i]) << " ";
}
cf) 오류 - 추정으로는 null이 문제였던 듯
#include <iostream>
using namespace std;
int main() {
char s[101];
cin >> s;
int b[26];
fill_n(b, 26, -1);
for (int i = 0; i < 100; i++) {
if (b[int(s[i]) - 97] < 0) b[int(s[i]) - 97] = i;
}
for (int k=0; k<26; k++)
cout << b[k] << " ";
}
https://www.acmicpc.net/problem/2675
방법 1 - 2024KB, 0ms, 236B
for 문 3개를 넣는 것과 별 차이는 없으나 그래도 for문 2개 썼으니 복잡도 $O(n^2)$
#include <iostream>
#include <string>
using namespace std;
int main(){
int t, i, j, c;
string str;
cin >> t;
for (i=0; i<t; i++){
cin >> c >> str;
for (j=0; j<c*str.length(); j++){
cout << str[j/c];
}
cout << "\n";
}
}
방법 2 - 1112KB, 0ms, 247B
#include<stdio.h>
int main(){
int t, a;
char x[21];
scanf("%d", &t);
while(t--){
scanf("%d %s", &a, x);
for(int i=0; x[i]!='\0'; i++){
for(int j=0; j<a; j++) printf("%c", x[i]);
}
printf("\n");
}
}
https://www.acmicpc.net/problem/1157
방법 1 - 4916KB, 48ms, 398B
초기 시도
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin >> str;
int alp[26] = {};
int i, t=-1;
char z = '?';
for (i = 0; i < str.length(); i++) {
if (int(str[i]) < 97) alp[str[i] - 'A']++;
else alp[str[i] - 'a']++;
}
for (i = 0; i < 26; i++) {
if (alp[i] > t) {
t = alp[i];
z = char(i + 65);
}
else if (alp[i] == t) z = '?';
}
cout << z;
}
방법 2 - 4916KB, 44ms, 406B
string에서는 하나의 char에 대하여 toupper와 tolower를 사용할 수 있으며 이를 통해 대문자, 소문자로 바꿀 수 있음.
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin >> str;
int alp[26] = {};
int i, idx, cnt, max=-1;
for (i = 0; i < str.length(); i++) {
alp[toupper(str[i]) - 'A']++;
}
for (i = 0; i < 26; i++) {
if (alp[i] > max) {
max= alp[i];
cnt = 0;
idx = i;
}
else if (alp[i] == max) cnt++;
}
if (cnt) cout << '?';
else cout << char(idx + 'A');
}
방법 2 + 윗 3줄 추가 - 3680KB, 8ms, 475B
#include <iostream>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
string str;
cin >> str;
int alp[26] = {};
int i, idx, cnt, max = -1;
for (i = 0; i < str.length(); i++) {
alp[toupper(str[i]) - 'A']++;
}
for (i = 0; i < 26; i++) {
if (alp[i] > max) {
max = alp[i];
cnt = 0;
idx = i;
}
else if (alp[i] == max) cnt++;
}
if (cnt) cout << '?';
else cout << char(idx + 'A');
}
나머지 방법들에 대해서는 어려움.... <unistd.h> ? fread?
https://www.acmicpc.net/problem/1152
https://aigong.tistory.com/261
https://www.acmicpc.net/problem/2908
방법 1 - 2020KB, 0ms, 232B
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
a = (a % 10) * 100 + (a % 100 / 10) * 10 + (a / 100);
b = (b % 10) * 100 + (b % 100 / 10) * 10 + (b / 100);
if (a > b) cout << a;
else cout << b;
}
방법 2 - 2208KB, 0ms, 284B
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
string a, b;
int c=0, d=0;
cin >> a >> b;
for (int i = 0; i < 3; i++) {
c += int(a[i] - '0') * pow(10, i);
d += int(b[i] - '0') * pow(10, i);
}
if (c > d) cout << c;
else cout << d;
}
방법 3 - 1112KB, 0ms, 152B
#include <stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
a=a/100+(a/10)%10*10+a%10*100;
b=b/100+(b/10)%10*10+b%10*100;
printf("%d",a>b?a:b);
}
https://www.acmicpc.net/problem/5622
방법 1 - 2024KB, 0ms, 323B
#include <iostream>
#include <string>
using namespace std;
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
int i, cnt=0;
string str;
cin >> str;
int alp[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
for (i=0; i<str.length(); i++){
cnt = cnt + alp[str[i] - 'A'] + 1;
}
cout << cnt;
}
방법 2 - 2024KB, 0ms, 264B
#include <iostream>
#include <string>
using namespace std;
int main() {
int i, cnt=0;
string str;
cin >> str;
int alp[26]={3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10};
for (i=0; i<str.length(); i++) cnt += alp[str[i] - 'A'];
cout << cnt;
}
방법 3 - 1112KB, 0ms, 205B
#include <stdio.h>
int main(){
int i, cnt=0, t[26]={3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10};
char a[16];
scanf("%s",&a);
for(i=0;a[i]!='\0';i++)cnt += t[a[i]-'A'];
printf("%d",cnt);
}
https://www.acmicpc.net/problem/2941
방법 1 - 2024KB, 0ms, 386B
초기시도
#include <iostream>
#include <string>
using namespace std;
int main(){
int i, cnt=0;
string s;
cin >> s;
for (i=0; i<s.length(); i++){
if (i>0){
if (s[i] == '='){
if (i>1) if (s.substr(i-2,2)=="dz") cnt--;
}
else if (s[i] == '-') {}
else if (s.substr(i-1,2)=="lj" || s.substr(i-1,2)=="nj") {
}
else cnt++;
}
else cnt++;
cout << i << "th string is " << s[i] << " and count is " << cnt << endl;
}
cout << cnt;
}
방법 2 - 2024KB, 0ms, 403B
string.find, string.replace 아래 링크 참조
https://aigong.tistory.com/259
string::npos 찾는 문자열이 없는 경우 사용, 혹은 -1 사용
#include <iostream>
#include <string>
using namespace std;
int main() {
int idx, i;
string str, cro[8] = {"c=","c-","dz=","d-","lj","nj","s=","z="};;
cin >> str;
for(i = 0; i < 8; i++){
while(1){
idx = str.find(cro[i]);
if(idx == string::npos) break;
str.replace(idx, cro[i].length(), "a");
}
}
cout << str.length();
}
https://www.acmicpc.net/problem/1316
방법 1 - 2024KB, 0ms, 499B
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, i, j, cnt=0;
bool t = true;
cin >> n;
int alp[26];
string str;
for (i=0; i<n; i++){
cin >> str;
fill_n(alp, 26, 0);
for (j=0; j<str.length(); j++){
if (j==0) alp[str[j] - 'a']++;
else if (alp[str[j] - 'a']>0 & str[j-1]==str[j]) alp[str[j] - 'a']++;
else if (alp[str[j] - 'a'] == 0) alp[str[j] - 'a']++;
else {
t = false;
break;
}
}
if (t) cnt++;
else t=true;
}
cout << cnt;
}
방법 2 - 2024KB, 0ms, 408B
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, i, j, cnt=0;
bool t = true;
cin >> n;
int alp[26]={};
string str;
for (i=0; i<n; i++){
cin >> str;
fill_n(alp, 26, 0);
for (j=0; j<str.length(); j++){
if (alp[str[j] - 'a'] == 0) alp[str[j] - 'a']++;
else if (str[j-1]!=str[j]){
t=false;
break;
}
}
if (t) cnt++;
else t=true;
}
cout << cnt;
}
방법 3 - 2024KB, 0ms, 365B
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, i, j;
cin >> n;
int cnt = n;
int alp[26]={};
string str;
for (i=0; i<n; i++){
cin >> str;
fill_n(alp, 26, 0);
for (j=0; j<str.length(); j++){
if (alp[str[j] - 'a'] > 0 && str[j-1]!=str[j]){
cnt--;
break;
}
else alp[str[j] - 'a']++;
}
}
cout << cnt;
}
방법 4 - 1112KB, 0ms, 362B
#include<stdio.h>
int main(){
int t, i, j;
char s[101];
scanf("%d", &t);
int cnt=t;
for (i = 0; i < t; ++i){
scanf("%s", s);
char abc[26]={};
for (j = 0; s[j] != '\0'; ++j){
if(abc[s[j] -'a'] > 0 && s[j-1] != s[j]){
--cnt;
break;
}
else ++abc[s[j] - 'a'];
}
}
printf("%d", cnt);
}