본문 바로가기
*Algorithm/Programmers_Level1

[programmers] 프로그래머스 Level1 이상한 문자 만들기(파이썬 Python)

by codinguser 2020. 10. 5.

프로그래머스
(주)그렙

 

[programmers] 프로그래머스 Level1 이상한 문자 만들기

(파이썬 Python)

 

* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제

 

 

 

프로그래머스 Level1 이상한 문자 만들기


1) 문제

 

프로그래머스 이상한 문자 만들기

 

코딩테스트 연습 - 이상한 문자 만들기

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을

programmers.co.kr


2) 풀이 과정

 

1.문자열의 개수만큼 반복

 

2. 제한 조건 "먼저" 기술

ㄴ1) 초기화 해줄 것

 

3. 카운트의 값을 기준으로 짝수이면 대문자

 

4. 카운트의 값이 홀수이면 소문자

 

아래의 풀이를 직접 손으로 적어나가다 보면 이해가 된다.

 


 

i=0

count=0

 answer = "T"

 count = 1

  i=1

  answer = "Tr"

  count = 2

   i=2

    answer = "TrY"

    count = 3

     i=3

      count = 0

      answer = "TrY "

       i=4

        answer = "TrY H"

        count = 1

 

(.. 나머지는 알아서)

   


3) 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(s):
    answer = ""
    count = 0
    
    for i in range(len(s)):
        if(s[i]==" "):
            count = 0
            answer += " "
            
        elif(count % 2 == 0):
            answer += s[i].upper()
            count += 1
            
        elif(count % 2 == 1):
            answer += s[i].lower()
            count += 1
            
    return answer
cs

4) 정리 노트

 

< 처음 풀었을 때 오 답 >

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(s):
    answer = ""
    count = 0
    
    for i in range(len(s)):
        
        if(count % 2 == 0):
            answer += s[i].upper()
            count += 1
            
        elif(count % 2 == 1):
            answer += s[i].lower()
            count += 1
            
        elif(s[i] == " "):
            count = 0
            answer += " "
            
               
    return answer
cs

 

: 처음에 쓴 코드는 순서를 달리했다.

 

: 제한 조건을 무시하고, 문제에서 주어진 예시만으로 해석한 결과다.(우선 고려해야 하는 건 맞지만, 주어진 예시만으로 판단하게 된다면 이처럼 잘못 생각할 수 있다.)

 

ㄴ> 1. 공백을 먼저 고려하지 않게 된다면, count % 2 == 1인데, 빈칸인 경우가 있게 된다면? 오답이 돼버리기 때문이다.

Ex)

s = "a book"의 경우

 

elif(count % 2 ==1)의 경우와 elif(s[i] == " "):

모두 해당이 돼버린다.

 

위에서 아래로 실행이 되기 때문에 두 번째 란에 걸려버리기 때문에 오답이 돼버린다.

 

 

ㄴ> 2. 또한 문제에서 주어진 말대로, "문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준) 별로 짝/홀수 인덱스를 판단해야 합니다. "라는 조건에도 위배가 되기 때문이다.

 

: 문제를 풀 때, 제한조건을 "먼저" 고려해주면 좋다.

 

: 기초에 의거한 풀이가 제일 좋은 것 같다. 일단 기준을 잡기 위해 기초에 의거한 풀이로 기준을 잡고, 나중에 필요한 내장 함수들을 이용해서 푸는 게 좋은 것 같다.

 

: 스스로 학습해 나갈 함수(타인의 풀이와 나의 풀이를 비교 및 필요한 함수들을 내걸로 만드는 작업)

 

1. 문자열 split()함수

 


* 소스 코드 및 정리한 내용의 저작권은 글쓴이에게 있습니다.

 

 

댓글