[프로그래머스 / Level 1] 이상한 문자 만들기 (파이썬)

2022. 5. 1. 10:44·🎲 알고리즘 공부/프로그래머스

📝 문제

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

 

제한 사항과 입출력 예시

 

 

https://programmers.co.kr/learn/courses/30/lessons/12930#​

 

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

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

programmers.co.kr

 

 

🎨 풀이

💡 첫 번째 시도 = 실패 코드 (테스트 2번만 맞은 경우)

 

def solution(s):
    answer = ''
    s = s.split(" ") 

    for i in range(len(s)) :
        for j in range(len(s[i])) :
            if j % 2 == 0:
                answer += s[i][j].upper()  
            else : answer += s[i][j]
        if i != (len(s) - 1) : 
              answer += ' '
    return answer

> (여기서 딱 한줄만 추가하면 되는 거였다...,,)

 

코드 딱 한 줄만 더 추가하면 되는 거여서 밑에 정답 코드와 함께 풀이를 써두었다. 제출하면 테스트 2번만 통과가 되길래 왜 안되는 거지..,, 하고 좀 도움을 받고자 질문하기 쪽에 들어가봤다. 거기 가니까 "문제에 s가 다 소문자라는 말이 없다" 라는 힌트가 있었다. 그 힌트를 보자마자 와 놓친게 이거구나 라는 생각이 들어서 바로 한 줄을 딱 추가해주었더니 문제가 풀렸다. 정말 공백 계산도 나름 다 했는데 이거를 체크 못한 게 아쉽기도 하면서, 그래도 풀었다는 게 기분이 좋기도 하면서 그렇다. 

 

 

💡 두 번째 시도 = 성공 코드

 

def solution(s):
    answer = ''
    s = s.lower()
    s = s.split(" ") 
    
    for i in range(len(s)) :
        for j in range(len(s[i])) :
            if j % 2 == 0:
                answer += s[i][j].upper()  
            else : answer += s[i][j]

        if i != (len(s) - 1) : 
              answer += ' '
    return answer

> 

1. s를 소문자로 통일시킨다. 

2. s를 공백 기준으로 나눠서 리스트에 담는다.

3. 리스트 안의 단어의 인덱스를 i로 하는 for문을 돌린다. (단어 개수만큼)

4. s[i], 즉 단어 안의 문자의 인덱스를 j로 두는 for문을 돌린다.

5. j가 2로 나누어진다면 upper을 이용해서 대문자로 만든 후 answer에 더해준다.

6. j가 2로 나누어지지 않는다면 그냥 answer에 바로 더해준다. (소문자인 상태)

7. 만약 i가 맨 마지막에 있는 단어의 인덱스가 아니라면, answer에 공백을 추가해준다.

8. for문을 다 돌린 후 answer을 return 해준다.

 

* 이 코드도 하나 이상의 공백문자 케이스 처리 가능함!

 => s.split(" ") 이후에 보면 s에는 단어 사이에 공백이 하나일때는 그 공백이 사라지지만, 공백이 둘 이상이면 하나를 제외한 나머지 공백들은 '' 이렇게 s에 들어가있다. 밑의 예시를 보면 이해하기가 더 쉽다. hello와 world 사이에 공백이 3개라서, 2개는 '','' 형태로 s에 들어와있다. 그래서 나중에 for문을 돌게 되니까 공백 추가도 되는 것이다.

 

예시

 

​끝~

 

 

⭐ 느낀점

 

> 뿌듯하다. 그동안 못풀던 문제였는데, 오늘 이렇게 풀어버리니까 마음이 시원하다. 딱 한 줄 추가하면 되는 거였다니 이게 참 허무.,,,?는 아니고 좀 아쉬운 느낌?! 내가 직접 찾아서 풀었으면 더 속이 시원하고 좋았을 것 같다. 하지만 지금도 좋다. 그래도 좀 성장한 기분이 든다. 다음에 문제 풀 때는 저런 말이 있는지 없는지 파악을 제대로 해야할 것 같다. 좋았다~!

 

'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 / Level 2] 최솟값 만들기 (파이썬)  (0) 2022.05.03
[프로그래머스 / Level 2] 최댓값과 최솟값 (파이썬)  (0) 2022.05.02
[프로그래머스 / Level 1] 약수의 합 (파이썬)  (0) 2022.04.30
[프로그래머스 / Level 1] 최대공약수와 최소공배수 (파이썬)  (0) 2022.04.29
[프로그래머스 / Level 1] 제일 작은 수 제거하기 (파이썬)  (0) 2022.04.28
'🎲 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / Level 2] 최솟값 만들기 (파이썬)
  • [프로그래머스 / Level 2] 최댓값과 최솟값 (파이썬)
  • [프로그래머스 / Level 1] 약수의 합 (파이썬)
  • [프로그래머스 / Level 1] 최대공약수와 최소공배수 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (280)
      • 📑 신입일기 (35)
      • 🍪 Web (1)
        • angular (1)
        • JavaScript (0)
      • 🧩 Node.js 공부 (2)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 🎨 Tistory Customizing (1)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 📗 spring boot 공부 (9)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    컨텐더스
    코드업
    신입일기
    스프링부트
    카카오
    티스토리챌린지
    정처기
    찬양추천
    50문답
    백준
    프로그래머스
    스프링 부트
    BOJ
    코테
    피보나치수
    til
    연습문제
    오버워치
    폰켓몬
    파이썬
    일기
    codeup
    nodejs
    6월 목표
    정보처리기사
    코민이
    코린이
    오블완
    충무로
    행렬덧셈
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[프로그래머스 / Level 1] 이상한 문자 만들기 (파이썬)
상단으로

티스토리툴바