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

파이썬에서 두 개의 인접한 숫자가 같지 않은 가장 작은 숫자를 형성하는 프로그램

<시간/>

4개의 가능한 문자 "1", "2", "3" 및 "?"가 있는 문자열이 있다고 가정합니다. "?" 대신 "1", "2", "3" 중 하나를 배치할 수 있습니다. 인접한 두 자리가 같지 않도록 만들 수 있는 가장 작은 수를 찾아야 합니다.

따라서 입력이 s ="2??3?"과 같으면 출력은 21231

이 됩니다.

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

  • i :=0
  • s :=s의 요소 목록
  • 크기가 s <2이면
    • s[i]가 "?"와 같으면
      • "1" 반환
  • i
  • s[i]가 "?"와 같으면
    • i가 0과 같으면
      • s[i] :=s[i + 1]이 "1"이 아니면 "2"일 때 "1"
    • 그렇지 않으면 i> 0이고 i <=s - 2의 크기이면
      • s[i - 1]이 "1"과 같으면
        • s[i + 1]이 "2"와 같으면
          • [i] :="3"
        • 그렇지 않으면
          • s[i] :="2"
      • 그렇지 않으면 s[i - 1]이 "2"와 같을 때
        • s[i + 1]이 "2"와 같으면
          • [i] :="3"
        • 그렇지 않으면
          • s[i] :="1"
      • 그렇지 않으면 s[i - 1]이 "3"과 같을 때
        • s[i + 1]이 "2"와 같으면
          • s[i] :="2"
        • 그렇지 않으면
          • s[i] :="1"
    • 그렇지 않으면
      • s[i] :=s[i - 1]이 "1"이 아니면 "2"일 때 "1"
  • 나는 :=나는 + 1
  • s의 항목을 문자열로 결합하고 반환
  • 예시

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

    def solve(s):
       i = 0
       s = list(s)
       if len(s) < 2:
          if s[i] == "?":
             return "1"
       while i < len(s):
          if s[i] == "?":
             if i == 0:
                s[i] = "1" if s[i + 1] != "1" else "2"
             elif i > 0 and i <= len(s) - 2:
                if s[i - 1] == "1":
                   if s[i + 1] == "2":
                      s[i] = "3"
                   else:
                      s[i] = "2"
                elif s[i - 1] == "2":
                   if s[i + 1] == "1":
                      s[i] = "3"
                   else:
                      s[i] = "1"
                elif s[i - 1] == "3":
                   if s[i + 1] == "1":
                      s[i] = "2"
                   else:
                      s[i] = "1"
             else:
                s[i] = "1" if s[i - 1] != "1" else "2"
          i += 1
       return "".join(s)
    
    s = "2??3?"
    print(solve(s))

    입력

    "2??3?"
    

    출력

    21231