Ruby와 Python으로 풀 수 있는 AtCoder ABC 243D
AtCoder Problems의 Recommondation을 이용하여 과거의 문제를 해결하다.
감사합니다, AtCoder Problems씨.
이번 제목.
이번 주제, 비트 컴퓨팅
이 문제는 처리 수치가 커서 계산하기가 어려워 보인다.
하지만 수치(십진수)를 자세히 보면 이진수로 표시하면...
U
인 경우 현재 정점의 부모 끝으로 이동-> 바이너리 오른쪽에 있는 문자 삭제
L
일 때 현재 정점의 왼쪽에 있는 하위 문자로 이동-> 바이너리 오른쪽에 추가
0
R
일 때 현재 정점의 오른쪽으로 이동하는 문자-> 바이너리 오른쪽에 추가
1
Ruby
n, x = gets.split.map(&:to_i)
s = gets.chomp.chars
y = x.to_s(2).chars
n.times do |i|
case s[i]
when 'U'
y.pop if y.size > 1
when 'R'
y << '1'
when 'L'
y << '0'
end
end
puts y.join('').to_i(2)
10진수->2진수10진수->2진수
xxxx.to_s(2)
'xxxx'.to_i(2)
Python
n, x = map(int, input().split())
s = input()
y = list(format(x, 'b'))
for i in range(n):
if s[i] == 'U':
if len(y) > 1:
y.pop()
elif s[i] == 'R':
y.append('1')
elif s[i] == 'L':
y.append('0')
print(int(''.join(y), 2))
10진수->2진수10진수->2진수
format(xxxx, 'b')
int('xxxx', 2)
총결산
노하우를 알았다면 별 문제 없었겠지만 경기 내내 힘들었죠.
Reference
이 문제에 관하여(Ruby와 Python으로 풀 수 있는 AtCoder ABC 243D), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/superrino130/items/949e11bb2630dda16cc0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)