[백준] q3568 iSharp
문제
입력으로 주어진 변수 선언문을 문제의 조건에 맞게 변형한 뒤, 한 줄에 하나씩 출력하라. 변수 선언문의 형태는 다음과 같다. 여기서 추가적인 변수형은 없을 수도 있다. 그리고 기본 변수형과 변수명은 알파벳 소문자/대문자로만 구성된다.
[기본 변수형][추가적인 변수형] [변수 선언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()))
댓글남기기