#include <stdio.h>
int main(void)
{
char a;
scanf("%c",&a);
printf("%d\n",a);
return 0;
}
문자열 입력 -> 정수 출력
#include <stdio.h>
int main(void)
{
int n,sum=0;
char a[100]={0,};
scanf("%d",&n);
scanf("%s",a);
for(int i=0;i<n;i++)
sum+=a[i]-'0'; // 아스키 0 = 48이므로!!!
printf("%d\n",sum);
return 0;
}
배열에 저장되는 요소는 문자열로 정수로 출력하면 아스키값이 출력된다.
그러므로 '0'의 아스키값 만큼 빼주면 1,2,3,4,5... 의 숫자를 얻을 수 있다.
#include <stdio.h>
#include <string.h>
int main(void)
{
int arr[26];
char arr2[100];
scanf("%s",arr2); // 문자열 입력 받기
for(int i=0;i<26;i++) // 모든 배열에 -1저장
arr[i]=-1;
for(int i=0;i<strlen(arr2);i++)
{
if(arr[arr2[i]-97]==-1) // 97 = 'a' // 저장된 위치찾음
{
arr[arr2[i]-97]=i;
}
}
for(int i=0;i<26;i++)
printf("%d ",arr[i]);
return 0;
}
우선, 모든 배열에 -1로 초기화 한 후 진행 한다는 점, 첫번째 배열을 다 루는 방법의 생각 !
#include <stdio.h>
#include <string.h>
int main(void)
{
// 문자열 입력
char arr[1000000];
int arr2[26]={0,};
int max,len,select=0,result=0;
scanf("%s",arr);
//대소문자 -> 대문자 통일
len = strlen(arr);
for(int i='a';i<='z';i++)
{
for(int j=0;j<len;j++)
{
if(i==arr[j])
arr2[i-'a']++;
}
}
for(int i='A';i<='Z';i++)
{
for(int j=0;j<len;j++)
{
if(i==arr[j])
arr2[i-'A']++;
}
}
// 최댓값 찾기
max = arr2[0];
for(int j=0;j<26;j++)
{
if(arr2[j]>max)
{
max=arr2[j];
select = j;
}
}
//중복값 찾기
for(int i=0;i<26;i++)
{
if(max==arr2[i])
result++;
}
if(result>1)
printf("?\n");
else
printf("%c\n",select+'A');
return 0;
}
연산식을 넣어 만든 나의코드가 런타임에러,시간초과가 떠서 곤란을 많이겪었다.
#include <stdio.h>
int change(int num)
{
num = ((num%10)*100)+(((num/10)%10)*10)+(num/100);
return num;
}
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
a = change(a);
b = change(b);
if(a>b)
printf("%d\n",a);
else
printf("%d\n",b);
return 0;
}
숫자를 바꿔주는 함수를 만들어서 활용했다.
함수에 대한 이해도 약간 상승한거같다..!
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr[1000000];
int cnt=0,len;
scanf("%[^\n]",arr); // null이 나오기 전까지 읽어버린다 !
len = strlen(arr);
if(len == 1)
{
if(arr[0]==' ')
{
printf("0\n");
return 0;
}
}
for(int i=1;i<len-1;i++) //마지막은 널문자
{
if(arr[i]==' ')
cnt++; //공백 갯수 세기
}
printf("%d\n",cnt+1); //공백 + 1 = 단어갯수
return 0;
}
%[^\n]의 의미, 문자열의 마지막은 널문자, 첫번째 부터 공백갯수를 셀 필요 없다 !
공백의 갯수로 접근하여 단어의 갯수를 셀 수 있다.
#include <stdio.h>
#include <string.h>
int change(int n);
int main(void)
{
char arr[15];
int i,j,total=0;
scanf("%s",arr);
for(i='A';i<='Z';i++)
{
for(j=0;j<strlen(arr);j++) // 문자열 길이만큼 반복
{
if(i==arr[j])
total+=change(i);
}
}
total+=strlen(arr); // 숫자 +1 만큼을 더해야하므로 길이를 추가해줘야한다.
printf("%d\n",total);
return 0;
}
int change(int n)
{
switch (n) {
case 'A':
case 'B':
case 'C':
return 2; // 숫자 2
case 'D':
case 'E':
case 'F':
return 3;
case 'G':
case 'H':
case 'I':
return 4;
case 'J':
case 'K':
case 'L':
return 5;
case 'M':
case 'N':
case 'O':
return 6;
case 'P':
case 'Q':
case 'R':
case 'S':
return 7;
case 'T':
case 'U':
case 'V':
return 8;
default: //나머지 영어
return 9;
}
}
switch문 활용 -> 알파벳별 숫자 나타내기, 숫자와 걸리는 시간의 관계는 숫자+1 이다.
이중 반복문에서 문자열에서 A~Z까지를 찾는다 !!!