혜랑's STORY

[BOJ_C] 10809번, 10773번 본문

2021 SISS 21기 활동/겨울방학 C

[BOJ_C] 10809번, 10773번

hyerang0125 2021. 1. 6. 14:07

#BOJ 10809 : 알파벳 찾기

 

BOJ 10809번 문제

 

- 풀이

  search() 함수는 알파벳이 등장하는 위치를 알아내기 위한 함수이다. 만약 단어의 i번째에 알파벳이 위치한다면, i를 반환하고 그렇지 않으면 초기에 설정해둔 -1값을 반환한다.

 알파벳의 처음부터 끝까지 -1 또는 등장하는 위치를 출력해야 하기 때문에 alpha라는 배열에 a-z까지 넣은 배열을 생성하였다. 단어 S를 입력받고 a-z까지 앞에서 만들어둔 search() 함수를 이용하여 위치값 또는 -1을 출력한다.

- 코드

#include <stdio.h>
#include <string.h>

int search(char *x, char y){
    int n = -1;
    for(int i=0; x[i]; i++){
        if(x[i] == y){
            n=i;
            break;
        }
    }
    
    return n;

}

int main(){
    char S[101];
    const char alpha[27] = "abcdefghijklmnopqrstuvwxyz";

    scanf("%s", S);
    for(int i=0; alpha[i]; i++){
        printf("%d ",search(S, alpha[i]));
    }

    return 0;
}

- 실행결과

 

BOJ_10809번 실행결과

 

 

#BOJ 10773 : 제로

 

BOJ 10773번 문제

 

- 풀이

 문제의 핵심인 입력받은 정수가 0이라면 직전 값을 지우고 0이 아닌 다른 수라면 해당 수를 쓴다. 따라서 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조인 스택을 사용하는 것이 가장 효율적이라고 생각하여 스택의 pop과 push를 이용하였다.  입력받은 정수가 0이라면 pop으로 값을 꺼내고, 아니면 push로 값은 저장해 둔다. 입력을 마치면 top이 초기값인 -1이 될 때까지 sum에 스택에 남아있는 값을 저장하고 출력한다.

- 코드

#include <stdio.h>
#define MAX_STACK_SIZE 100000
int stack[MAX_STACK_SIZE];
int top = -1;

int pop(){
    return stack[top--];
}

void push(int value){
    stack[++top] = value;
}

int main(){
    int k, n;
    scanf("%d", &k);
    for(int i=0; i<k; i++){
        scanf("%d", &n);
        if(n==0){
            pop();
            continue;           
        }
 
        push(n);
    }

    int sum=0;
    while(top != -1){
        sum += pop();
    }

    printf("%d",sum);

    return 0;
}

- 실행결과

 

BOJ 10773번 실행결과(1)
BOJ 10773번 실행결과(2)

 

'2021 SISS 21기 활동 > 겨울방학 C' 카테고리의 다른 글

[BOJ_C] 1316번, 2869번  (0) 2021.02.08
[BOJ_C] 2748번, 2750번  (0) 2021.02.01
[BOJ_C] 2941번, 2884번  (0) 2021.01.23
[BOJ_C] 1037번, 1712번  (0) 2021.01.18
[2021 겨울 C언어 2주차]  (0) 2021.01.14