4개의 가능한 문자 "1", "2", "3" 및 "?"가 있는 문자열이 있다고 가정합니다. "?" 대신 "1", "2", "3" 중 하나를 배치할 수 있습니다. 인접한 두 자리가 같지 않도록 만들 수 있는 가장 작은 수를 찾아야 합니다.
따라서 입력이 s ="2??3?"과 같으면 출력은 21231
이 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- i :=0
- s :=s의 요소 목록
- 크기가 s <2이면
- s[i]가 "?"와 같으면
- "1" 반환
- s[i]가 "?"와 같으면
- 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"와 같을 때
- s[i + 1]이 "2"와 같으면
- [i] :="3"
- 그렇지 않으면
- s[i] :="1"
- s[i + 1]이 "2"와 같으면
- 그렇지 않으면 s[i - 1]이 "3"과 같을 때
- s[i + 1]이 "2"와 같으면
- s[i] :="2"
- 그렇지 않으면
- s[i] :="1"
- s[i + 1]이 "2"와 같으면
- s[i - 1]이 "1"과 같으면
- 그렇지 않으면
- s[i] :=s[i - 1]이 "1"이 아니면 "2"일 때 "1"
- 나는 :=나는 + 1
- s[i]가 "?"와 같으면
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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