Hi, There!
안녕하세요, 바오밥입니다.
목차
- 문제
- 풀이
문제
문제 내용
정수로 이루어진 두 리스트 arrA와 arrB가 주어질 때, arrA를 회전해 arrB로 만들 수 있는지 알아보려 합니다. 리스트의 회전이란 모든 원소를 오른쪽으로 한 칸씩 이동시키고, 마지막 원소는 리스트의 맨 앞에 넣는 것을 말합니다.
이를 위해 다음과 같이 프로그램 구조를 작성했습니다.
1. arrA와 arrB의 길이가 다르면 false를 return 합니다.
2. 두 리스트의 구성 성분이 달라 회전했을 때 같아질 가능성이 없다면 false를 return 합니다.
3. arrA 리스트를 두 번 이어 붙여 길이가 2배인 리스트로 만듭니다.
4. arrA의 부분 리스트 중 arrB와 같은 리스트가 있으면 true를, 그렇지 않으면 false를 return 합니다.
두 리스트 arrA와 arrB가 매개변수로 주어질 때, arrA를 회전해 arrB로 만들 수 있으면 true를, 그렇지 않으면 false를 return 하도록 solution 함수를 작성하려 합니다.
위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.
매개변수 설명
두 리스트 arrA와 arrB가 solution 함수의 매개변수로 주어집니다.
- arrA의 길이는 1 이상 1,000 이하입니다.
- arrA의 원소는 0 이상 1,000 이하의 정수입니다.
- arrB의 길이는 1 이상 1,000 이하입니다.
- arrB의 원소는 0 이상 1,000 이하의 정수입니다.
return 값 설명
arrA를 회전해 arrB로 만들 수 있으면 true를, 그렇지 않으면 false를 return 해주세요.
예시
예시 설명
예시 #1
arrA 리스트를 오른쪽으로 2칸 회전하면 arrB와 같아집니다.
예시 #2
arrA 리스트는 회전해도 arrB와 같아질 수 없습니다.
풀이
풀이 코드 및 해설
def func_a(arr):
ret = arr + arr # 리스트를 2배로 불림
return ret # 2배로 불린 리스트 반환
def func_b(first, second):
MAX_NUMBER = 1001
counter = [0 for _ in range(MAX_NUMBER)] # 0 ~ 1001 리스트 생성
for f, s in zip(first, second): # counter에 first second 값 누적
counter[f] += 1
counter[s] -= 1
for c in counter: # counter 리스트 순회
if c != 0: # counter의 리스트들이 0 이라는 것은 [f] [s]가 동일하게 arrA와 arrB에 존재한다는 것
return False # 만약 하나라도 0이 아니라면 겹치지 않는 부분이 있다는 뜻으로 False 반환
return True # 다 0인 경우 모든 요소의 구성 성분이 같다는 것으로 True 반환
def func_c(first, second):
length = len(second) # arrB의 리스트의 길이를 저장
for i in range(length): # arrB 리스트 길이만큼 반복
if first[i : i + length] == second:
# 만약 arrA의 부분 리스트 중 arrB와 동일한 부분이 있다면
return True # True 반환
return False # 아닌 경우 False 반환
def solution(arrA, arrB):
if len(arrA) != len(arrB): # 1. 길이가 다른 경우
return False # False 반환
if func_b(arrA,arrB): # 2. 두 배열의 구성 성분이 같은 경우
arrA_temp = func_a(arrA) # 3. arrA 배열을 2배로 이어 붙임
if func_c(arrA_temp, arrB): # 4. 2배로 늘린 arrA 안에 arrB가 부분 배열로 있는 경우
return True # 배열을 회전 시킬 경우 똑같아질 수 있기 때문에 True 반환
return False # 배열을 회전 시켜도 똑같아질 수 없기 때문에 False 반환
'Certificate > Cert - Cos Pro 1급' 카테고리의 다른 글
[Cos Pro 1급] 기출문제 3회차, 비숍으로부터 도망쳐 (0) | 2021.07.15 |
---|---|
[Cos Pro 1급] 기출문제 3회차, 팰린드롬 문제 (0) | 2021.07.15 |
[Cos Pro 1급] 기출문제 2회차, 0들을 0으로 만들기 (0) | 2021.07.14 |
[Cos Pro 1급] 기출문제 2회차, 비밀번호 검사 (0) | 2021.07.14 |
[Cos Pro 1급] 기출문제 2회차, 규칙에 맞는 배열 구하기 (0) | 2021.07.14 |