Dalam artikel ini, kita akan membahas tebakkan domino yang memungkinkan kita untuk mengetahui keadaan akhir setelah beberapa domino telah ditebarkan. Proses ini mirip dengan permainan domino tradisional, namun dengan adanya aturan dan keterlibatan mental.
Masalah
Diberikanlah sebuah array dominoes
yang berisi simbol 'L'
, 'R'
, atau '.'
. Simbol 'L'
menunjukkan bahwa dominonya telah ditebarkan ke kiri, 'R'
menunjukkan bahwa dominonya telah ditebarkan ke kanan, dan '.'
menunjukkan bahwa dominonya belum ditebarkan.
Tugas
Buatlah sebuah fungsi yang menerima array dominoes
sebagai input dan mengembalikan string yang merepresentasikan keadaan akhir setelah beberapa domino telah ditebarkan.
Penerapan
Kita dapat memulai dengan memeriksa dominonya secara berurutan. Jika dominonya adalah '.'
, maka kita tidak perlu melakukan apapun, karena belum ditebarkan. Jika dominonya adalah 'L'
, maka kita harus mengetahui apakah dominonya sebelumnya telah ditebarkan ke kiri atau kanan.
Jika dominonya sebelumnya telah ditebarkan ke kiri, maka kita dapat menulis 'L'
sebanyak jumlah dominonya yang belum ditebarkan. Jika domino sebelumnya telah ditebarkan ke kanan, maka kita harus memutuskan apakah dominonya sekarang akan ditebarkan ke kiri atau kanan.
Jika dominonya sekarang adalah 'R'
, maka kita harus mengetahui apakah dominonya sebelumnya telah ditebarkan ke kiri atau kanan. Jika domino sebelumnya telah ditebarkan ke kiri, maka kita dapat menulis 'R'
sebanyak jumlah dominonya yang belum ditebarkan. Jika domino sebelumnya telah ditebarkan ke kanan, maka kita tidak perlu melakukan apapun.
Kode
Berikut adalah kode dalam bahasa Python yang menerapkan aturan di atas:
class Solution:
def pushDominoes(self, dominoes: str) -> str:
ans = []
count = 0
for domino in dominoes:
if domino == '.':
count += 1
continue
elif domino == 'L':
if not ans or ans[-1] == 'L':
ans += ['L'*count]
elif ans and ans[-1] == 'R':
ans += ['R'*(count//2) + ('.' if count%2!=0 else '') + 'L'*(count//2)]
elif domino == 'R':
if ans and ans[-1] == 'R':
ans += ['R'*count]
elif not ans or (ans and ans[-1] == 'L'):
ans += ['.'*count]
ans.append(domino)
count = 0
if ans and ans[-1] == 'R':
ans += ['R'*count]
if (ans and ans[-1] == 'L') or not ans:
ans += ['.'*count]
return ''.join(ans)
Contoh
Misalkan kita memiliki array dominoes
sebagai berikut: ['.', 'L', '.', 'R', 'L']
. Maka, fungsi di atas akan mengembalikan string sebagai berikut: 'LL.R'
.
Dengan demikian, tebakkan domino memungkinkan kita untuk mengetahui keadaan akhir setelah beberapa domino telah ditebarkan. Proses ini memerlukan keterlibatan mental dan pemahaman aturan yang tepat.