ex[0]은 x의 맨 앞자리 수
ey[0]은 y의 맨 앞자리 수
new_array를 만들어서 idx 에러 방지함
사실 index를 어떤식으로 처리해야 하나 고민했음.
예제1)
array가 [3 7 8 3 1 9 2 7]라고 생각해본다.
m = 3
x= 200
y=311
z가 x보다 크면서 같고, y보다 작으면서 같을 경우에만
카운트를 진행한다.
따라서 x의 맨 앞자리 수 2와
y의 맨 앞자리수 3을 이용하면
손쉽게 값을 구할 수 있다.
리스트에서 2의 위치를 전부 찾는다.
6번째 위치에서부터 시작해서
총 3번의 이동을 통해 z를 만들어야한다.
그리하여 z의 값은
2 7 3
7이 리스트의 맨끝이니까
앞으로 다시 돌아가야하는데
이 과정을 코드로 작성하니 좀 지저분해서
new_array를 만들었다.
array + array[:m-1]을 해주면
딱 필요한 만큼만 array의 길이를 늘릴 수 있다.
m-1개만큼 뒤로 가져오는 이유는
7에서부터 시작해야할 경우를 생각해줘야하기 때문이다.
new array = [3 7 8 3 1 9 2 7 3 7]
이 문제를 풀면서 난감했던 점
1. 해당 value의 모든 idx값을 찾아내는 것
-> enumerate을 이용
idx=[i for i,value in enumerate(array) if value==k]
k와 value의 값이 같은 경우 i를 idx 리스트에 삽입
2. 입력값으로 받은 값을 int형으로 합쳐서 변수에 집어넣는 것
-> join 연산 사용
x=int(''.join([i for i in ex])
ex의 변수들을 문자열로 붙여서 int형으로 만드는 과정
ex=[1,2,3]이면
int형 123을 x에 집어넣는 것!
t = int(input())
for i in range(t):
n, m = map(int, input().split())
ex = input().split()
x = int(''.join([i for i in ex]))
ey = input().split()
y = int(''.join([i for i in ey]))
array = input().split()
new_array = array + array[:m - 1]
result = 0
for k in range(int(ex[0]), int(ey[0]) + 1):
idx = [i for i, value in enumerate(array) if int(value) == k]
for j in idx:
now = int(''.join(new_array[j:j + m]))
if x <= now <= y:
result += 1
print(result)
index 상관 없이 모든 경우를 for문으로 돌린 코드
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
x = int(''.join(input().split()))
y = int(''.join(input().split()))
array = input().split()
new_array = array + array[:m - 1]
result = 0
cnt = 0
for i in range(n):
result = int(''.join(new_array[i:i + m]))
if x <= result <= y:
cnt += 1
print(cnt)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n9461] 파도반 수열 in python (0) | 2021.10.09 |
---|---|
[n1063] 킹 in python (0) | 2021.10.08 |
[n14620] 꽃길 in python (0) | 2021.09.30 |
[n1411] 비슷한 단어 in python (0) | 2021.09.29 |
[n13900] 순서쌍의 곱의 합 in python (0) | 2021.09.28 |