본문 바로가기
Problem Solving/백준

[백준|파이썬] 3568: iSharp (실버5)

by 청량리 물냉면 2023. 5. 5.
반응형
문제

https://www.acmicpc.net/problem/3568

 

3568번: iSharp

입력으로 주어진 변수 선언문을 문제의 조건에 맞게 변형한 뒤, 한 줄에 하나씩 출력한다. 변수형과 변수명 사이에는 공백이 하나 있어야 한다. 출력은 입력으로 주어진 변수 선언문에서 변수가

www.acmicpc.net

 

 

🐍파이썬
import sys
input=sys.stdin.readline

# 세 변수 입력받은 뒤 ";" 제외, 입력받은 문자열을 "  " 기준으로 슬라이싱
a = input().rstrip()[:-1].split(" ")
#변수의 갯수만큼 타입리스트 생성
type_list = [a[0]] * (len(a) - 1)

#첫번째 원소인 type 제거
a = a[1:]	
for i in range(len(a)):
    #문자열 뒤에서부터 탐색
    for j in a[i][::-1]:
        if j == ",":
            a[i] = a[i][:-1]	#a에서도 ","를 삭제
        elif j == "&":
            type_list[i] += "&"	#변수i 타입리스트의 문자열에 & 추가
            a[i] = a[i][:-1]
        elif j == "]":
            type_list[i] += "[]"
            a[i] = a[i][:-2]	#a에서 "[]"를 삭제
        elif j == "*":
            type_list[i] += "*"
            a[i] = a[i][:-1]
        elif j.isalpha():	#알파벳이 나오면 변수명이므로 for문 탈출
            break
for i, j in zip(type_list, a):
    print(str(i), str(j), end="")
    print(";")

if else를 사용하여 가능한 모든 경우의 수를 처리해 주었다.

 

 

다른 풀이 방법

vars = input().split()
base = vars.pop(0)	#기본type명

for var in vars:
    var = var.replace(',', '').replace(';', '')	#쓸데없는 문자 지우기
    print(base, end='')
    #타입 출력, 문자열 뒤에서부터 탐색
    for c in var[::-1]:
        if not c.isalpha():
            if c == ']':
                print('[', end='')
            elif c == '[':
                print(']', end='')
            else:
                print(c, end='')
    print(' ', end='')
    
    #변수명 출력
    for c in var:
        if c.isalpha(): print(c, end='')
    print(';')

리스트를 굳이 사용하지 않고 for문과 if문을 적절히 사용하여 답을 출력했다.

반응형