[백준] q3568 iSharp

1 분 소요

문제

입력으로 주어진 변수 선언문을 문제의 조건에 맞게 변형한 뒤, 한 줄에 하나씩 출력하라. 변수 선언문의 형태는 다음과 같다. 여기서 추가적인 변수형은 없을 수도 있다. 그리고 기본 변수형과 변수명은 알파벳 소문자/대문자로만 구성된다.

[기본 변수형][추가적인 변수형] [변수 선언1(기본 변수명)(추가적인 변수형)], [변수 선언2(기본 변수명)(추가적인 변수형)], [변수 선언3(기본 변수명)(추가적인 변수형)];

어떻게 풀 것인가?

기본 변수형과 변수명은 알파벳 소문자/대문자로만 구성된다는 문제의 조건을 활용한다. 기본 변수명 뒤에 추가적인 변수형이 있는 경우에 아스키 코드표를 참고하면 변수명과 추가적인 변수형을 구분할 수 있다.

def solution(declaration):
    # 입력으로 주어진 변수 선언문을 공백을 기준으로 나누기
    declaration_split = declaration.split(' ')
    n = len(declaration_split)

    # 기본 변수형 저장
    dataType = declaration_split[0]

    # 선언문에 포함된 변수들 구분하기
    variable_list = []
    for i in range(1, n):
        if ';' in declaration_split[i]:
            variable_list.append(declaration_split[i].replace(';', ''))
        else:
            variable_list.append(declaration_split[i].replace(',', ''))

    temp = []
    for i in range(n - 1):
        if variable_list[i].isalpha():  # 변수 선언 시 추가적인 변수형이 없다면,
            temp.append(dataType + ' ' + variable_list[i])  # 기본 변수형 + 변수명
        else:  # 변수 선언 시 추가적인 변수형이 있다면,
            variable_cnt = 0
            alphabet = list(range(65, 91)) + list(range(97, 123))  # 소문자/대문자 아스키코드
            for x in alphabet:
                for j in range(len(variable_list[i])):
                    if variable_list[i][j].find(chr(x)) == 0:
                        variable_cnt += 1
            variable_name = variable_list[i][:variable_cnt]
            tmp = str(variable_list[i][:variable_cnt - 1:-1])
            if "][" in tmp:
                tmp = tmp.replace("][", "[]")
            temp.append(dataType + tmp + ' ' + variable_name)  # 기본 변수형 + 추가적인 변수형 + 변수명

    # 문제의 조건에 맞게 출력 형식 맞추기
    for i in range(len(temp)):
        temp[i] += ";\n"
    answer = ""
    for i in range(len(temp)):
        answer += temp[i]
    
    return answer

print(solution(input()))

카테고리:

업데이트:

댓글남기기