번호가 1인 경우는 카멜 표기법, 2인 경우는 스네이크 표기법, 3인 경우는 파스칼 표기법
입력으로 주어지는 변수명의 길이는 100을 넘지 않음
카멜 표기법, 파스칼 표기법을 사용한 변수명은 알파벳 소문자와 대문자로만 이루어져 있고, 스네이크 표기법을 사용한 변수명은 알파벳 소문자와 언더바(_)로만 이루어져 있음
또, 스네이크 표기법을 사용한 변수명의 첫 글자와 마지막 글자는 언더바가 아니고, 언더바가 연속해서 두 개 이상 사용하는 경우는 없음
출력
첫째 줄에 카멜 표기법을 사용한 경우, 둘째 줄에 스네이크 표기법을 사용한 경우, 셋째 줄에 파스칼 표기법을 사용한 경우를 출력
시간 제한: 2초
메모리 제한: 512 MB
"""
입출력 예시)
(예제 입력 1)
2 variable_n
-> variableN
variable_n
VariableN
(예제 입력 2)
1 camelCase
-> camelCase
camel_case
CamelCase
(예제 입력 3)
3 HowToSolveThisProblem
-> howToSolveThisProblem
how_to_solve_this_problem
HowToSolveThisProblem
(예제 입력 4)
2 good
-> good
good
Good
"""
## 의사코드 ##
# 카멜, 파스칼 표기법 -> 대문자를 기준으로 자르기
# import re
# re.findall('[A-Z][a-z]*', string)
# 스네이크 표기법 -> 언더바를 기준으로 자르기
# string.split('_')
첫 번째 시도
import re
n, string = input().split()
# 표기법 번호에 따라 단어 나누기
# 카멜 표기법
if n == '1':
variables = re.findall('[A-Z][a-z]*', string)
# 스네이크 표기법
elif n == '2':
variables = string.split('_')
# 파스칼 표기법
else:
variables = re.findall('[A-Z][a-z]*', string)
# 다른 표기법으로 변환
# 파스칼 표기법: 가장 첫 글자도 대문자, 나머지도 각 단어의 첫 글자를 대문자로
for v in variables:
v = v.title()
pascal = ''.join(variables)
# 카멜 표기법: 첫 번째 단어의 가장 첫 글자는 소문자, 나머지는 각 단어의 첫 글자를 대문자로
variables[0] = variables[0].lower()
camel = ''.join(variables)
# 스네이크 표기법: 소문자만 사용, 각 단어 사이에 언더바
for i in range(1, len(variables)):
variables[i] = variables[i].lower()
snake = '_'.join(variables)
print(camel)
print(snake)
print(pascal)
(틀림)
'title()'을 사용한 부분에서 리스트 요소가 변경되지 않아서 틀림
+ 카멜 표기법인 경우 틀림
두 번째 시도
import re
import sys
n, string = sys.stdin.readline().split()
# 표기법 번호에 따라 단어 나누기
# 카멜 표기법
if n == '1':
variables = re.findall('[A-Z][a-z]*', string)
# 스네이크 표기법
elif n == '2':
variables = string.split('_')
# 파스칼 표기법
else:
variables = re.findall('[A-Z][a-z]*', string)
# 다른 표기법으로 변환
# 파스칼 표기법: 가장 첫 글자도 대문자, 나머지도 각 단어의 첫 글자를 대문자로
for i in range(len(variables)):
variables[i] = variables[i].title()
pascal = ''.join(variables)
# 카멜 표기법: 첫 번째 단어의 가장 첫 글자는 소문자, 나머지는 각 단어의 첫 글자를 대문자로
variables[0] = variables[0].lower()
camel = ''.join(variables)
# 스네이크 표기법: 소문자만 사용, 각 단어 사이에 언더바
for i in range(1, len(variables)):
variables[i] = variables[i].lower()
snake = '_'.join(variables)
print(camel)
print(snake)
print(pascal)
(해결)
'title()'을 사용한 부분에서 리스트 요소가 변경되지 않아서 틀림
-> 인덱스로 리스트 요소 값 변경
(틀림)
런타임 에러
+ 카멜 표기법인 경우 틀림
통과한 코드
import re
import sys
n, string = sys.stdin.readline().split()
# 첫 번째 단어의 가장 첫 글자
firstWord = [string[0]]
# 표기법 번호에 따라 단어 나누기
# 카멜 표기법
if n == '1':
variables = re.findall('[A-Z][a-z]*', string)
# 소문자로 이뤄진 단어 하나 분리
for i in range(1,len(string)):
if string[i].isupper():
break
else:
firstWord[-1] += string[i]
variables = firstWord + variables
# 스네이크 표기법
elif n == '2':
variables = string.split('_')
# 파스칼 표기법
elif n == '3':
variables = re.findall('[A-Z][a-z]*', string)
# 다른 표기법으로 변환
# 파스칼 표기법: 가장 첫 글자도 대문자, 나머지도 각 단어의 첫 글자를 대문자로
for i in range(len(variables)):
variables[i] = variables[i].title()
pascal = ''.join(variables)
# 카멜 표기법: 첫 번째 단어의 가장 첫 글자는 소문자, 나머지는 각 단어의 첫 글자를 대문자로
variables[0] = variables[0].lower()
camel = ''.join(variables)
# 스네이크 표기법: 소문자만 사용, 각 단어 사이에 언더바
for i in range(1, len(variables)):
variables[i] = variables[i].lower()
snake = '_'.join(variables)
print(camel)
print(snake)
print(pascal)
(해결)
카멜 표기법인 경우 틀림
're.findall('[A-Z][a-z]*', string)' 은 대문자, 소문자의 순서로 분리하기 때문에 첫 번째 단어가 variables에 들어가지 않음.