해리의 데브로그

SWEA 1240 - 단순 2진 암호코드

|

문제

  • SWEA 1240 - 단순 2진 암호 코드
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

decryption = {'0001101': 0, '0011001': 1, '0010011': 2, '0111101': 3, '0100011': 4,
         '0110001': 5, '0101111': 6, '0111011': 7, '0110111': 8, '0001011': 9}

def Data_Extraction(Scanner):
    global N, M, Data
    for y in range(N):
        for x in range(M-1, -1, -1):
            if Scanner[y][x] == '1':
                Data = Scanner[y][x-55:x+1]
                return Data

TC = int(input())
for tc in range(1, TC+1):
    N, M = map(int, input().split())
    Scanner = [input() for _ in range(N)]
    Data = ''
    Data_Extraction(Scanner)

    result = []
    start_i = 0
    end_i = 6
    for _ in range(8):
        result.append(decryption[Data[start_i:end_i+1]])
        start_i += 7
        end_i += 7

    value = (result[0] + result[2] + result[4] + result[6])*3 + \
            (result[1]+result[3]+result[5]) + result[7]

    if not value % 10:
        print('#%d %d'%(tc, sum(result)))
    else:
        print('#%d %d'%(tc, 0))

진수 변환

|

문제

  • 10진수를 N진수로 변환하는 알고리즘을 짜보았음.
  • 두가지의 방법으로 알고리즘을 작성하였는데, 첫 번째 방법이 여전히 나에게는 익숙하다.

나의 코드

def num_conversion(x, y):
    global result
    mok, nam = 0, 0
    while True:
        mok = x // y
        nam = x % y
        result = str(nam) + result
        x = mok
        if mok <= 0:
            return

num = 123
result = ''
num_conversion(123, 7)
print(result)


def GetSome(n,k):
    if n< k:
        print(n, end = '')
        return

    else:
        GetSome(n//k, k)
        print(n%k, end='')

GetSome(123,7)

(SW 문제해결 응용 구현 - 시작하기) SWEA 5186 - 이진수2

|

문제

  • SWEA 5186 - [파이썬 S/W 문제해결 구현 1일차] 시작하기 - 이진수2
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

def Binary(num):
    global result, cnt
    while True:
        next_num = num * 2
        result += str(int(next_num))
        num = next_num - int(next_num)
        cnt += 1
        if num == 0.0:
            return

        if cnt > 13:
            return

TC = int(int(input()))
for tc in range(1, TC+1):
    num = float(input())
    result = ''
    cnt = 0
    Binary(num)

    if cnt > 13:
        print('#%d'%(tc), 'overflow')

    else:
        print('#%d %s'%(tc, result))

(SW 문제해결 응용 구현 - 시작하기) SWEA 5185 - 이진수

|

문제

  • SWEA 5185 - [파이썬 S/W 문제해결 구현 1일차] 시작하기 - 이진수
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

Conversion = {'0':0,'1':1, '2':2, '3':3, '4':4,'5':5,'6':6,'7':7,'8':8, '9':9,
        'A':10,'B':11,'C':12, 'D':13,'E':14,'F':15}

def Binary(num):
    global result
    mok, nam = 0, 0
    for i in range(4):
        mok = num // 2
        nam = num % 2
        result = str(nam) + result
        num = mok
    return

TC = int(input())
for tc in range(1, TC+1):
    N, decimal_num = map(str, input().split())

    final_result = ''
    for i in decimal_num:
        result = ''
        Binary(Conversion[i])
        final_result += result
    print('#%d %s'%(tc, final_result))

SWEA 1221 - GNS

|

문제

  • SWEA 1221 - GNS
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

TC = int(input())
for tc in range(1, TC+1):
    num = ['ZRO', 'ONE', 'TWO', 'THR', 'FOR', 'FIV', 'SIX', 'SVN', 'EGT', 'NIN']
    Base = {'ZRO': 0, 'ONE': 0, 'TWO': 0, 'THR': 0, 'FOR': 0, 'FIV': 0, 'SIX': 0, 'SVN': 0, 'EGT': 0, 'NIN': 0}
    tc_lst = list(input().split())
    for i in input().split():
        Base[i] += 1

    print('#%s'%(tc))
    for i in range(10):
        print('%s'%((num[i]+ ' ')*Base[num[i]]), end=" ")
    print()

    print("#%d %s"%(tc, result))
#아래의 방법으로도 풀 수 있다.
Base = {'ZRO':0, 'ONE':1, 'TWO':2, 'THR':3, 'FOR':4, 'FIV':5, 'SIX':6, 'SVN':7, 'EGT':8, 'NIN':9}
Base2 = {0:'ZRO', 1:'ONE', 2:'TWO', 3:'THR', 4:'FOR', 5:'FIV', 6:'SIX', 7:'SVN', 8:'EGT',9:'NIN'}

for tc in range(1, TC+1):
    tc_lst = list(input().split())
    Data = list(input().split())
    N = len(Data)

    for i in range(N):
        Data[i] = Base[Data[i]]

    Data.sort()

    for j in range(N):
        Data[j] = Base2[Data[j]]

    print('%s %s'%(tc_lst[0],' '.join(Data)))