Ruby와 Python으로 풀 수 있는 AtCoder ABC 243D

5538 단어 RubyAtCoderPython
개시하다
AtCoder Problems의 Recommondation을 이용하여 과거의 문제를 해결하다.
감사합니다, AtCoder Problems씨.
이번 제목.
이번 주제, 비트 컴퓨팅
이 문제는 처리 수치가 커서 계산하기가 어려워 보인다.
하지만 수치(십진수)를 자세히 보면 이진수로 표시하면...
  • S의 i번째 문자가 U인 경우 현재 정점의 부모 끝으로 이동
    -> 바이너리 오른쪽에 있는 문자 삭제
  • S의 i번째 문자가 L일 때 현재 정점의 왼쪽에 있는 하위 문자로 이동
    -> 바이너리 오른쪽에 추가0
  • S의 i번째 문자가 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)
    총결산
    노하우를 알았다면 별 문제 없었겠지만 경기 내내 힘들었죠.

    좋은 웹페이지 즐겨찾기