알고리즘

(프로그래머스) 41. 이상한 문자 만들기

이소금 2024. 2. 28. 16:27
반응형

정답 및 풀이

def solution(s):
    index = 0 # loop이 하나씩 돌때마다 count, 공백인 경우 초기화
    answer = ""
    for i in range(len(s)):
        if s[i] == " ":
            answer += s[i] # 공백인 경우 answer 문자열에 그대로 붙이기
            index = 0 # 공백인 경우 index 초기화
        else:
            # 짝수
            if index == 0 or index % 2 == 0:
                answer += s[i].upper()
                index += 1 # 공백이 아닌 경우 1씩 카운트
            # 홀수
            else:
                answer += s[i].lower() # test case가 대문자로 입력되는 경우도 존재
                index += 1 # 공백이 아닌 경우 1씩 카운트
    return answer

 

개선안

풀 때는 이런게 잘 안보인다ㅎ

0을 2로 나눈 나머지는 0인데.. 굳이 indeox == 0 or index % 2 == 0로 두번 조건을 걸어줄 필요가 없기 때문에 그냥 index % 2 == 0만 작성해도 동일하게 작동한다..ㅎ

 

def solution(s):
    index = 0 # loop이 하나씩 돌때마다 count, 공백인 경우 초기화
    answer = ""
    for i in range(len(s)):
        if s[i] == " ":
            answer += s[i] # 공백인 경우 answer 문자열에 그대로 붙이기
            index = 0 # 공백인 경우 index 초기화
        else:
            # 짝수
            if index % 2 == 0:
                answer += s[i].upper()
                index += 1 # 공백이 아닌 경우 1씩 카운트
            # 홀수
            else:
                answer += s[i].lower() # test case가 대문자로 입력되는 경우도 존재
                index += 1 # 공백이 아닌 경우 1씩 카운트
    return answer

 

 

#시간복잡도

공백 기준으로 단어 단위, 알파벳 단위로 loop을 두번 돌 수도 있으나 시간복잡도 관계상 loop을 한번만 도는 것이 효율적이므로 loop은 한번만 사용
- O(N)

헤멘 이유

1. 테스트 케이스가 소문자 문자열만 주어져서 소문자 문자열 기준으로만 처리되도록 작업
2. 다른 테스트 케이스는 모두 실패했는데 어떤 테스트 케이스가 입력되었는지 몰라서 다른 방식으로 해결해 보려다가 해당 문제에 대한 테스트 케이스에 대해 구글 검색
3. 대문자가 섞여있다거나, 대문자로만 이루어진 스트링도 테스트 케이스로 입력되는 경우 케이스 비통과 (upper만 입력, lower은 처리하지 않음)
4. lower 케이스를 처리해 줌으로써 테스트 케이스 통과

피드백

주어진 테스트 케이스 외에도 다른 테스트 케이스가 있을 수도 있다는 것을 유념하며 풀기!

반응형