가끔 생각을 해요 ʕتʔ

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

문제

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

 

  • 제한사항
    문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
    첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
  • 입출력 예
s return
"try hello world" "TrY HeLlO WoRlD"

 

풀이

def solution(s):
    answer = ''
    words = s.split(" ")
    for word in words:
        for idx in range(len(word)):
            if idx % 2 == 0:
                answer += word[idx].upper()
            else:
                answer += word[idx].lower()
        answer += " "
    return answer[:-1]

# 주어진 문자열을 공백을 기준으로 나누어 리스트로 만들기
# 이중for문 사용
# 첫 번째 for문: 리스트의 요소만큼 반복
# 두 번째 for문: 문자열 개수만큼 반복
# 해당 문자열의 인덱스가 짝수라면(0부터니까) 대문자로 변환해서 answer에 추가
# 아니라면 소문자로 변환해서 answer에 추가
# 두 번째 for문이 끝나고 answer에 단어 하나가 완성되면 공백 추가
# 이중for문 끝나면 "TrY HeLlO WoRlD " 마지막 공백이 추가되어있을 것임. 마지막 공백 제거하고 리턴

 

🍒 프로그래머스 - 하샤드 수

문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

  • 제한사항
    x는 1 이상, 10000 이하인 정수입니다.
  • 입출력 예
x return
10 true
12 true
11 false
13 false

 

풀이

def solution(x):
    num = 0
    for i in str(x):
        num += int(i)
    if x % num != 0:
        return False
    return True

# 자릿수의 합을 저장할 변수 num
# x를 str로 변환 후 for문으로 각 자릿수를 num에 더함
# x를 num으로 나누었을 때 나누어 떨어지지 않으면 False, 그렇지 않으면 True

다른 사람의 풀이

def Harshad(n):
    return n%sum(int(x) for x in str(n)) == 0

 

🍒 TIL

 

  • '이상한 문자 만들기' 문제를 풀 때 한 번 문제를 겪었다. 코드 실행 시 예시 정답은 맞추었고, 제출 시 다른 테스트 케이스에서 실패가 나와서 알아보니 split()과 split(" ") 공백처리의 문제였다. split()이 기본적으로 공백을 기준으로 문자열을 나눈다고 알고 있어서 split(" ")과 동일한 줄 알았는데, 분명한 차이가 있었다. 문제를 자세히 보면 '각 단어는 <하나 이상>의 공백문자로 구분되어 있습니다.'라고 적혀있다. split()은 기본적으로 공백을 기준으로 리스트를 생성하지만, 모든 공백을 삭제하며 리스트를 생성하는 것이다. 즉 단어 사이의 공백이 여러 개일 경우에도 그 여러 개의 공백을 전부 삭제해버려서 정답에 오류가 생긴다. split(” ”)은 하나의 공백만 처리하므로, 단어 사이에 공백이 여러 개일 때 하나의 공백만 기준으로 리스트를 생성한다. 즉 나머지 공백은 그대로 리스트 요소로 만들어진다. 문제도 잘 읽고 split(), split(" ") 차이도 알아두자!
  • '하샤드 수' 문제는 비교적 쉽게 풀었는데, 다른 사람 풀이와 비교하면 너무 길어보여서 자괴감을 느낄 때가 있다. 그래도 다른 사람 풀이와 비교하며 배워가는 것이 나쁘지 않다고 생각한다. 내가 잘 작성했다고 생각하는 코드도 꾸준히 다른 코드를 참고하고 문법도 더 익혀서 나중에는 더 효율적인 코드를 작성할 수 있어야겠다.
  • 적절한 자료구조를 선택해서 코드를 잘 정리하는 역량을 가졌으면 좋겠다는 클럽장님 말씀처럼 나도 코테를 풀면서 자료구조를 함께 공부해서 나중에는 어떤 식으로 풀어나가야할지 파악할 수 있는 단계까지 갔으면 좋겠다.

공유하기

facebook twitter kakaoTalk kakaostory naver band