백준-3

서희찬·2021년 6월 9일
0

백준

목록 보기
3/105
post-thumbnail

11654 : 아스키코드

#include <stdio.h>

int main(void)
{
    char a;
    scanf("%c",&a);
    
    printf("%d\n",a);
    
    return 0;
}

얻은점

문자열 입력 -> 정수 출력

12720

#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... 의 숫자를 얻을 수 있다.

10809 : 알파벳 찾기

#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로 초기화 한 후 진행 한다는 점, 첫번째 배열을 다 루는 방법의 생각 !

1157 : 단어 공부

#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;
}

얻은점

연산식을 넣어 만든 나의코드가 런타임에러,시간초과가 떠서 곤란을 많이겪었다.

2908 : 상수

#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;
}

얻은 점

숫자를 바꿔주는 함수를 만들어서 활용했다.
함수에 대한 이해도 약간 상승한거같다..!

1152 : 단어의 개수

#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]의 의미, 문자열의 마지막은 널문자, 첫번째 부터 공백갯수를 셀 필요 없다 !
공백의 갯수로 접근하여 단어의 갯수를 셀 수 있다.

5622 : 다이얼

#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까지를 찾는다 !!!

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글