혜랑's STORY

[BOJ_C] 1316번, 2869번 본문

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

[BOJ_C] 1316번, 2869번

hyerang0125 2021. 2. 8. 13:57

#BOJ 1316번 : 그룹 단어 체커

1316번 문제

- 풀이

#include <stdio.h>

int check(char x[]){
    int flag[26] = {0};

    for(int i=0; x[i]; i++){
        if(flag[x[i]-'a']){
            return 0;
        }
        else{
            char temp = x[i];
            flag[x[i]-'a'] = 1;

            while(1){
                if(temp != x[++i]){
                    i--;
                    break;
                }
            }
        }
    }
    return 1;
}

int main(){
    int n, cnt = 0;
    char word[101];
    scanf("%d",&n);

    for(int i=0; i<n; i++){
        scanf("%s", word);
        
        if(check(word)){
            cnt++;
        }
    }

    printf("%d", cnt);
    return 0;
}

 

  1. 이미 등장한 알파벳을 구분하기 위해 알파벳 길이만큼의 배열 flag를 0으로 초기화 한다.
  2. 단어의 길이만큼 반복하며, 만약 이미 등장했던 단어라면(flag가 1이라면) return으로 0을 보낸다.
  3. 앞에서 등장하지 않았던 단어라면, flag의 알파벳 자리에 1을 대입하고, temp에 해당 알파벳을 넣어 다른 알파벳이 될 때까지 i의 값을 늘려준다. 다른 단어에 도착하면 i는 1을 빼준다. (뒤의 값과 비교하기 때문)

+) 여기서 알파벳 자리란, x[i] - 'a'를 통해 해당 알파벳이 a라면 0번째, b라면 1번째 자리값을 가지도록 한 것이다.

   4.  main함수에서 check()의 반환값이 1이면(그룹단어가 맞다면) cnt를 1 증가시킨다. 

 

- 실행결과

1316번 실행결과

 

#BOJ 2869번 : 달팽이는 올라가고 싶다.

2869번 문제

- 풀이

#include <stdio.h>

int main(){
    int a, b, v;
    scanf("%d %d %d", &a, &b, &v);

    printf("%d", ((v-b-1)/(a-b)+1));
    return 0;
}

 

달팽이가 k일째 정상이라면 다음과 같은 수식으로 풀 수 있다.

높이 <= A*K - B*(K-1)
(A-B)*K >= V-K
K >= (V-B-1) / (A-B)

따라서 (v-b-1)/(a-b)+1을 출력하면 된다.

 

- 실행결과

2869번 실행결과

 

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

[BOJ_C] 13235번, 2908번  (0) 2021.02.24
[BOJ_C] 4673번, 16503번  (0) 2021.02.15
[BOJ_C] 2748번, 2750번  (0) 2021.02.01
[BOJ_C] 2941번, 2884번  (0) 2021.01.23
[BOJ_C] 1037번, 1712번  (0) 2021.01.18