개발조각

[파이썬 실습] 심화 문제_차이만 저장하기 본문

엘리스 AI 트랙🐇/[AI 5기] 연습 문제집_파이썬 실습

[파이썬 실습] 심화 문제_차이만 저장하기

개발조각 2022. 6. 7. 13:54
728x90
반응형

차이만 저장하기

영상이나 음악 같은 연속적인 데이터를 압축할 때, 같은 값이 연속으로 등장한다면 우리는 이 데이터를 효율적으로 압축할 수 있습니다.

이번에는 압축의 효율이 좋도록 전처리하는 프로그램을 만들려고 합니다.

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

위와 같은 데이터를 압축한다고 가정하겠습니다.

이 데이터는 값이 모두 다르지만 다음값=전값+1의 일정한 규칙이 존재하네요

그럼 표현방식을 아래처럼 1번째값, 2번째값- 1번째값, 3번째값-2번째값, ....이렇게 바꿔보겠습니다.

1,1,1,1,1,1,1,1,1,1

표현방식을 바꾸니 모두 1이 되었네요. 이러면 1,2,3,4 ... 10 이 아니라 1이 10개 이렇게 압축할 수 있겠네요.

이것을 지시사항을 보고 코드를 완성하세요.

 

지시사항

  1. 사용자로부터 숫자들을 입력받습니다.
1,2,3,5,6,8,9,7,5,6
  1. 이것을 정수 리스트로 변환합니다.
[1,2,3,5,6,8,9,7,5,6]
  1. 두번째 값부터 숫자들의 표현방식을 ({2번째}-{1번째}), ({3번째}-{2번째}),....({n번째}-{n-1번째}) 이렇게 바꿔봅니다.
1,1,1,2,1,2,1,-2,-2,1
  1. 이 리스트에서 1이 몇번 등장하는지 계산합니다. 여기는 6번 등장하네요.
  2. 원본 데이터에서 1이 몇번 등장하는지 비교해서 더 많이 등장하는 리스트를 출력하세요. 예시에는 바꾼 데이터에 1이 더 많이 등장하니 바꾼 형식으로 출력합니다.
  3. 만약 1이 등장하는 수가같다면 0을 출력하세요

주의사항

입출력 형식에 주의하세요. 출력의 형식이 다르면 오답처리 될 수 있습니다.


정답

input_data = input()
input_list = [] # 입력값을 정수의 리스트로 변환 (각 요소는 정수)
resid_list = [] # 지시사항에 따라 처리한 리스트 (각 요소는 정수)

input_list = list(map(int, input_data.split(',')))

i = 0
while i < len(input_list):
    if i==0:resid_list.append(input_list[i])
    else: resid_list.append(input_list[i]-input_list[i-1])
    i+=1
    
inputList = input_list.count(1)
residList = resid_list.count(1)


# 원본이 1이 많으면
if inputList > residList: print(input_list)
# 바뀐 형식이 1이 많으면
elif inputList < residList: print(resid_list)
# 1의 수가 같으면
else : print(0)

이 문제는 8번 9번 문제에 비해 아~~~~~주 쉬웠습니다.

엘리스 파이썬 연습문제 중에서 9번이 제일 어려웠습니다.😥

솔직히 9번문제 빼고는 하루 안에 다 풀 수 있을 정도로 풀기 쉬웠는데 9번이 빌런이네요😭

그래도 끝까지 다 풀어서 뿌듯합니다.

728x90
반응형
Comments