본문 바로가기

ascode 문제풀이

[ascode 문제풀이] 1004: 시분할 연습 #1

오늘 문제는 어찌보면 정말 간단한 문제!

ascode 시분할 문제를 풀어볼 것이다!

 

http://www.ascode.org/problem.php?id=1004

 

ascode.org discuss3

문제 설명 차차라는 학생은 매트릭스라는 영화에 나오는 숫자들이 내려오는 장면을 구현해 보고 싶다.  하지만 그것을 구현하기 위해선 우리들이 사용하는 방식으로는 불가능할 것같다.  A와 B, C 문자들이 주기적으로 출력을 하는 프로그램을 구현해보자.  반복문과 구조체를 활용을 하면은 매우 쉽게 해결할수 있을것 같다. 입력 설명 첫번째 줄에는 테스트 케이스가 들어온다. 0 < TestCase < 10 (정수이다)  두번째 줄에는 진행할 시간이 들어온다.  0

www.ascode.org

 

 


문제 분석

 

조건 분석

1. 문제 해결을 반복할 testCase와 출력을 반복할 시간(T)이 입력된다.
2. A의 주기, B의 주기 C의 주기의 값이 들어온다.  (0 < A, B, C < 1000)

 

 

문제 해결

1. 각 값을 입력 받는다.

2. 자신의 주기가 될 때마다 출력을 한다.

 

걱정 안 해도 될 요소 ※

1. 만약에 A의 주기가 1이고, B의 주기가 2인데 그럼 2번째 타임에는 A 출력 한다!

AAB 와 같이 알파벳 순으로 그냥 출력해주자!

 

 

 


코드 작성

 

1. 입력 및 변수설정

int main() {
    int testCase;
    scanf("%d", &testCase);
    while (testCase--) {
        int turn, aCycle, bCycle, cCycle;
        scanf("%d %d %d %d", &turn, &aCycle, &bCycle, &cCycle);
    }
}

작동시간(T), A의 주기(aCycle), B의 주기(bCycle), C의 주기(aCycle)를 각각 선언하고 입력을 받았다.

 

 

2. 사이클 알고리즘

        for (int i = 1; i <= turn; i++) {
            if (!(i % aCycle)) printf("A");
            if (!(i % bCycle)) printf("B");
            if (!(i % cCycle)) printf("C");
        }
        printf("\n");

시작값을 1로 둔 이유는 사이클 계산을 편하게 하기 위함이다.

자신의 주기로 나누어 떨어지게 되면 출력을 하게된다.

 

자신의 주기로

나누어 떨어짐

if( !0 )

같은 의미를 가짐

0의 not 연산을

통해 참이 됨

 

 

 


전체코드

 

#include <stdio.h>

int main() {
    int testCase;
    scanf("%d", &testCase);
    while (testCase--) {
        int turn, aCycle, bCycle, cCycle;
        scanf("%d %d %d %d", &turn, &aCycle, &bCycle, &cCycle);
        for (int i = 1; i <= turn; i++) {
            if (!(i % aCycle)) printf("A");
            if (!(i % bCycle)) printf("B");
            if (!(i % cCycle)) printf("C");
        }
        printf("\n");
    }
}