[CodeForce] Superhero Transformation


문제는 쉬워보이는데 역시 영어에서 막힌다.. vowel이 모음이란 뜻이였다니. 항상 생각하는 건데 코딩하는 것 보다 읽고 이해하는데 시간이 더 걸리는 듯하다. 영어 공부 좀 꾸준히 해야지.

첫번째 라인에 오는 문자열과 두번째 오는 문자열에서 같은 자리에 있는 철자가 모음은 모음끼리, 자음은 자음끼리 연결되어야 한단다.
즉 첫번째가 abc면 두번째 문자열은 첫째자리엔 모음이, 나머지 두번째와 세번째 자리에는 자음이 와야되는 것이다. 조건은 각 라인의 문자열 길이는 1~1000. 그렇다면 일단 길이가 1000인 배열 2개를 만들어보자. null 들어가는 것까지 생각해서 1001로 지정하자.


char Buffer1[1001], Buffer2[1001];

그리고 우리는 이 버퍼에 뭔진 모르겠지만 철자를 써넣을 것이다. scanf로 받도록 하자.


scanf("%s", Buffer1);
scanf("%s", Buffer2);

여기서 "s"가 "t"로 완전히 바뀌어야하므로 길이는 같아야 할 것이다. 따라서 길이가 다르다면 No를 출력해야할 것이다.


//문자열 길이가 다르다면 No 출력
        if(strlen(Buffer1) != strlen(Buffer2)){
            printf("No");
            break;
        }

그 후 두 문자열의 길이를 체크해주고, 모음 - 자음 관계를 체크해주면 될 것이다. while문을 이용해서 체크해주도록 만들었다. while문으로 버퍼에 들어있는 모든 문자를 읽을 때까지 돌면서 모음 - 모음 관계인지, 자음 - 자음 관계인지 체크하면서 틀린게 없으면 Yes를, 있었으면 No를 출력하게 해주면 된다.



소스코드
//
//  SuperheroTransformation.c
//  CodeForce
//
//  Created by 신기열 on 2019. 2. 18..
//  Copyright © 2019년 신기열. All rights reserved.
//

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

void swap(int *a, int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main(int argc, const char * argv[]) {
    
    int div, result1, result2 = 0;
    
    scanf("%d\n", &div);
    
    char String[1000000];
    int Buffer[div];
    
    int i = 0, num;
    
    scanf("%[^\n]s", String);
    char *c = strtok(String, " ");
    
    
    while(c != NULL){
        
        num = atoi(c);
        
        Buffer[i] = num;
        c = strtok(NULL, " ");
        
        i++;
    }
    
    for(int p = 0; p < div-1; p++){
        for(int q = 1; q < div; q++){
            if(Buffer[q-1] < Buffer[q]){
                swap(&Buffer[q-1], &Buffer[q]);
            }
        }
    }
    
    result1 = Buffer[0];
    
    for(int r = 0; r < div-1; r++){
        if(result1 % Buffer[r+1] != 0){
            result2 = Buffer[r+1];
            
            break;
        }
        else if(Buffer[0] % Buffer[r+1] == 0){
            
            
            int d = div;
            int temp = 0;
            
            while(d > 0){
                
                if(Buffer[d-1] == Buffer[d-2]){
                    temp = Buffer[d-1];
                    d = d - 2;
                }
                
                else{
                    d = d - 1;
                }
            }
            
            result2 = temp;
        }
    }
    
    
    
    printf("%d %d", result1, result2);
    
    
    return 0;
}


소스코드 : https://github.com/betterafter/CodeForce/blob/master/SuperheroTransformation.c

댓글