[Python] [SWEA] 정식이의 은행업무(4366)

긍정왕·2021년 6월 15일
2

Algorithm

목록 보기
25/69
post-thumbnail

💡 문제 해결

  1. 2진수로 저장된 수가 만들 수 있는 수를 set에 중복없이 추가
  2. 0번 idx의 수가 변할 일은 없기 때문에 0번 index일 경우는 제외
  3. 3진수로 저장된 수가 만들 수 있는 수를 변수에 저장
  4. 해당 변수가 set안에 존재한다면 해당 수가 정답

📌 하드코딩 해버린 느낌이 없지않아 있다..



🧾 문제 설명

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

삼성은행의 신입사원 정식이는 실수를 저질렀다.
은행 업무가 마감되기 직전인 지금, 송금할 금액을 까먹고 말았다.
하지만 다행스럽게도 정식이는 평소 금액을 2진수와 3진수의 두 가지 형태로 기억하고 다니며, 
기억이 명확하지 않은 지금조차 2진수와 3진수 각각의 수에서 
단 한 자리만을 잘못 기억하고 있다는 것만은 알고 있다. 
예를 들어 현재 기억이 2진수 1010과 3진수 212을 말해주고 있다면 
이는 14의 2진수인 1110와 14의 3진수인 112를 잘못 기억한 것이라고 추측할 수 있다.
정식이는 실수를 바로잡기 위해 당신에게 부탁을 하였다.
정식이가 송금액을 추측하는 프로그램을 만들어주자.
( 단, 2진수와 3진수의 값은 무조건 1자리씩 틀리다.  추측할 수 없는 경우는 주어지지 않는다. )

문제보기



🖨 입출력



📝 풀이

for tc in range(1, int(input()) + 1):
    binarys = input()
    trinarys = input()

    sub_set = set()
    for idx, binary in enumerate(binarys):
        if idx == 0: continue
        else:
            if binary == '1':
                tmp = int(binarys[:idx] + '0' + binarys[idx + 1:], 2)
            else:
                tmp = int(binarys[:idx] + '1' + binarys[idx + 1:], 2)
            sub_set.add(tmp)
    
    for idx, trinary in enumerate(trinarys):
        if trinary == '0':
            tmp1 = int(trinarys[:idx] + '1' + trinarys[idx + 1:], 3)
            tmp2 = int(trinarys[:idx] + '2' + trinarys[idx + 1:], 3)
        elif trinary == '1':
            tmp1 = int(trinarys[:idx] + '0' + trinarys[idx + 1:], 3)
            tmp2 = int(trinarys[:idx] + '2' + trinarys[idx + 1:], 3)
        else:
            tmp1 = int(trinarys[:idx] + '0' + trinarys[idx + 1:], 3)
            tmp2 = int(trinarys[:idx] + '1' + trinarys[idx + 1:], 3)
        if tmp1 in sub_set:
            answer = tmp1
            break
        elif tmp2 in sub_set:
            answer = tmp2
            break
    
    print(f'#{tc} {answer}')

profile
Impossible + 땀 한방울 == I'm possible

0개의 댓글