uju's Tech

[Baekjoon] 변수명 : 16205 본문

Baekjoon

[Baekjoon] 변수명 : 16205

ujusy 2020. 7. 29. 01:04

변수명 : 16205


사용언어: python

문제

변수명을 정하는 표기법은 여러 가지가 있다.

  • 카멜 표기법 (Camel Case): 각 단어의 첫 글자를 대문자로 적는다. 단, 가장 첫 글자는 소문자를 사용한다.
    • 예시: camelCase,variableN,thisIsCamelCase,howToSolveThisProblem
  • 스네이크 표기법 (Snake Case): 소문자만 사용하고, 각 단어의 사이에 언더바(_)를 넣어서 적는다.
    • 예시:snake_case,variable_n,this_is_snake_case,how_to_solve_this_problem
  • 파스칼 표기법 (Pascal Case): 카멜 표기법과 같지만, 가장 첫 글자도 대문자를 사용한다.
    • 예시:PascalCase,VariableN,ThisIsPascalCase,HowToSolveThisProblem

한 표기법을 사용한 변수명이 주어졌을 때, 이를 다른 표기법으로 변환하는 프로그램을 작성하시오.

입력

첫째 줄에 사용한 표기법의 번호와 변수명이 주어진다. 번호가 1인 경우는 카멜 표기법, 2인 경우는 스네이크 표기법, 3인 경우는 파스칼 표기법이다.

입력으로 주어지는 변수명의 길이는 100을 넘지 않는다.

카멜 표기법, 파스칼 표기법을 사용한 변수명은 알파벳 소문자와 대문자로만 이루어져 있고, 스네이크 표기법을 사용한 변수명은 알파벳 소문자와 언더바(_)로만 이루어져 있다. 또, 스네이크 표기법을 사용한 변수명의 첫 글자와 마지막 글자는 언더바가 아니고, 언더바가 연속해서 두 개 이상 사용하는 경우는 없다.

출력

첫째 줄에 카멜 표기법을 사용한 경우, 둘째 줄에 스네이크 표기법을 사용한 경우, 셋째 줄에 파스칼 표기법을 사용한 경우를 출력한다.

정리

  • 1: camel 은 소문자 + 대문자
  • 2: snake 는 소문자 + '_' -> 첫글자와 마지막 글자에는 _가 들어가면 안된다. 한꺼번에 두 개 이상의 _ 불가
  • 3: pascal 은 소문자 + 대문자

Think

딕셔너리를 이용하여 1,2,3 유형에 맞게 지정해주었다.

각각의 표기법으로 변환해 주는것은 함수를 만들어 지정해주자.

upper(), lower()등을 사용해보자.

dic을 이용해서 입력받는 유형에 따라 조건문을 사용해 들어온 문자를 그대로 출력해주자.

Code

import sys


def camel(case1):
    result = []
    flag = 1
    flag2 = 0
    for item in case1:
        if flag2 == 0:
            result.append(item.lower())
            flag2 =1
            continue
        else:
            if flag == 0:
                result.append(item.upper())
                flag = 1
                continue
            if item == '_':
                flag = 0
                continue
            result.append(item)
    return result


def snake(case1):
    result = []
    result.append(case1[0].lower())
    for i in range(len(case1) - 1):
        if case1[i + 1].isupper():
            result.append('_')
            case1[i+1] =case1[i+1].lower()
        result.append(case1[i + 1])
    return result


def pascal(case1):
    result = []
    flag = 1
    for item in case1:
        if flag == 1:
            result.append(item.upper())
            flag = 0
            continue
        if item == '_':
            flag = 1
            continue
        result.append(item)
    return result


caseDic = {'camel': 1, 'snake': 2, 'pascal': 3}

N, case = sys.stdin.readline().split()
N = int(N)
case1 = list(case)
case2 = list(case)
if N == caseDic['snake']:
    print(''.join(camel(case1)))
    print(case)
    print(''.join(pascal(case1)))
elif N == caseDic['camel']:
    print(case)
    print(''.join(snake(case1)))
    print(''.join(pascal(case2)))
elif N == caseDic['pascal']:
    print(''.join(camel(case1)))
    print(''.join(snake(case1)))
    print(case)

'Baekjoon' 카테고리의 다른 글

[Baekjoon : Python] 늑대와 양 : 16956  (0) 2020.07.31
[Baekjoon] 노래악보 : 1392  (0) 2020.07.30
[Baekjoon] 기타줄 : 1049  (0) 2020.07.29
[Baekjoon] 수 찾기: 1920  (0) 2020.07.18
[Baekjoon] 보너스 점수 : 17389  (0) 2020.07.18
Comments