11504번 돌려 돌려 돌림판! | 뭐라도 하겠지

11504번 돌려 돌려 돌림판!

이왜틀?


img01

11504번 돌려 돌려 돌림판! - 백준

실버 조지기 시작
단순 구현 문제인데 왜 틀렸을까?

int t=Integer.parseInt(br.readLine());
while(t-->0) {
    StringTokenizer st=new StringTokenizer(br.readLine()," ");
    int dn=Integer.parseInt(st.nextToken());
    int ys=Integer.parseInt(st.nextToken());
    st=new StringTokenizer(br.readLine()," ");
    StringBuilder sb=new StringBuilder();
    while(st.hasMoreTokens()) sb.append(st.nextToken());
    long x=Long.parseLong(sb.toString());
    st=new StringTokenizer(br.readLine()," ");
    sb.setLength(0);
    while(st.hasMoreTokens()) sb.append(st.nextToken());
    long y=Long.parseLong(sb.toString());
    Deque<String> que=new LinkedList<>();
    Stack<String> stk=new Stack<>();
    st=new StringTokenizer(br.readLine()," ");
    while(st.hasMoreTokens()) que.add(st.nextToken());
    int cnt=0;
    if(dn==ys) {
        sb.setLength(0);
        while(!que.isEmpty()) sb.append(que.poll());
        long dc=Long.parseLong(sb.toString());
        if(dc>=x&&dc<=y) bw.write("1\n");
        else bw.write("0\n");
    }else {
        for(int i=0;i<dn;i++) {
            sb.setLength(0);
            String tmp=que.poll();
            sb.append(tmp);
            que.add(tmp);
            for(int j=1;j<ys;j++) {
                String tmp2=que.poll();
                sb.append(tmp2);
                stk.push(tmp2);
            }
            long dc=Long.parseLong(sb.toString());
            if(dc>=x&&dc<=y) cnt++;
            while(!stk.isEmpty()) que.addFirst(stk.pop());
        }
        bw.write(cnt+"\n");
    }
}

그만 알아보자…
그냥 새로 짜자

설계


간단한 문제다.
연속으로 M개 숫자를 뽑아 합쳐서
X와 Y 사이에 있는지 확인한다.
여기에 해당되는 경우의 수를 출력한다.

구현


T = int(input())

for _ in range(T):
    N, M = map(int, input().split())

    X = int(''.join(input().split()))
    Y = int(''.join(input().split()))

    wheel = list(map(int, input().split()))

    count = 0

    for i in range(N):
        idx = i
        num = 0

        for j in range(M):
            num *= 10
            num += wheel[idx]
            idx = (idx + 1) % N

        if X <= num <= Y:
            count += 1

    print(count)

채점


img02

반성


브루트포스 문제라서 깡으로 다 돌렸는데
사실 앞 자리수부터 확인하는 식으로 하면 시간이 훨씬 줄어들 것 같다.

코드 확인


Link to GitHub

Updated: