Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 원거리 바코드

<시간/>

창고에 바코드 행이 있다고 가정합니다. i번째 바코드는 바코드[i]입니다. 인접한 두 바코드가 동일하지 않도록 바코드를 재배열해야 합니다. 따라서 입력이 [1,1,1,2,2,2]이면 출력은 [2,1,2,1,2,1]입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • d라는 이름의 지도 하나 만들기
  • 바코드 배열에 있는 숫자의 빈도를 d에 저장
  • x :=빈 목록
  • 모든 키-값 쌍을 x에 삽입
  • i :=0
  • res :=바코드와 길이가 같은 목록을 만들고 [0]을 채우십시오.
  • 빈도에 따라 x 정렬
  • 동안 i <결과의 길이
    • result[i] :=x의 마지막 항목 요소
    • x의 마지막 항목의 빈도 값 감소
    • x의 마지막 요소의 빈도가 0이면 x에서 해당 항목을 삭제합니다.
    • i를 2 증가
  • i :=1
  • 동안 i <결과의 길이
    • result[i] :=x의 마지막 항목 요소
    • x의 마지막 항목의 빈도 값 감소
    • x의 마지막 요소의 빈도가 0이면 x에서 해당 항목을 삭제합니다.
    • i를 2 증가
  • 반환 결과

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution(object):
   def rearrangeBarcodes(self, barcodes):
      d = {}
      for i in barcodes:
         if i not in d:
            d[i] = 1
         else:
            d[i]+=1
      x = []
      for a,b in d.items():
         x.append([a,b])
      i = 0
      result = [0]*len(barcodes)
      x = sorted(x,key=lambda v:v[1])
      while i <len(result):
         result[i] = x[-1][0]
         x[-1][1]-=1
         if x[-1][1]==0:
            x.pop()
         i+=2
      i=1
      while i <len(result):
         result[i] = x[-1][0]
         x[-1][1]-=1
         if x[-1][1]==0:
            x.pop()
         i+=2
      return result
ob = Solution()
print(ob.rearrangeBarcodes([1,1,1,2,2,2]))

입력

[1,1,1,2,2,2]

출력

[2, 1, 2, 1, 2, 1]