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)
채점
반성
브루트포스 문제라서 깡으로 다 돌렸는데
사실 앞 자리수부터 확인하는 식으로 하면 시간이 훨씬 줄어들 것 같다.
코드 확인