본문 바로가기
  • 머킹이의 머신로그
오늘부터 코딩테스트

[오늘부터 코딩테스트]프로그래머스 코딩 기초 프로그램 풀기

by 머킹 2023. 9. 27.
728x90

프로그래머스 Lv0. 문자 개수 세기, 배열 만들기, 글자 지우기

 

안녕하세요 머킹입니다.

추석 때 계속 코테를 풀고 싶은데 노트북이 없어서ㅠㅠ

아무래도 몰아서 할 것 같습니다.

그래도 추석 때 읽으려고 딥러닝 책들을 많이 빌려놨으니까 이론공부를 열심히 해야겠네요!

 


문자 개수 세기

 

문제 설명

알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, 

my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., 

my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.

 

제한사항

1 ≤ my_string의 길이 ≤ 1,000

 

단순히 생각해 보고 코드를 짜봤습니다.

def solution(my_string):
    answer = []
    if my_string in a~z:
        return '1'
    else:
        return 0
    return answer
def solution(my_string):
    answer = [0] * 52
    for char in my_string:
        if 'A' <= char <= 'Z':
            answer[ord(char) - ord('A')] += 1
        elif 'a' <= char <= 'z':
            answer[ord(char) - ord('a') + 26] += 1
    return answer

 

다른 사람의 풀이를 보니까 

isupper를 쓰는 방법이 있네요!

def solution(my_string):
    answer=[0]*52
    for x in my_string:
        if x.isupper():
            answer[ord(x)-65]+=1
        else:
            answer[ord(x)-71]+=1
    return answer

배열 만들기 

 

문제 설명

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

 

제한사항

1 ≤ n ≤ 1,000,000

1 ≤ k ≤ min(1,000, n)

 

단순하게 생각해 보면 upper를 쓰면 될 것 같았는데 

아무래도 그런 건 없다고 합니다.

def solution(n, k):
    answer = []
    if 1 < n:
        upper(k+1) 
    return answer

sort를 쓰면 되지 않을까?!라는 생각으로 바뀌었는데요.

아무래도 그런 건 안되나 봅니다..

 

def solution(n, k):
    answer = []
    if i in range(1, n + 1):
        if i % k == 0:
            answer.append(i)
    return answer

틀렸습니다..ㅎㅎ

 

def solution(n, k):
    answer = []
    for i in range(1, n + 1):
        if i % k == 0:
            answer.append(i)
    return answer

와 for를 if로 쓰고 있었네요

왜 이게 안보일까요??

def solution(n, k):
    return [i for i in range(k,n+1,k)]

이런 방법도 있네요

역시 컴프리헨션을 잘해야 한다고 생각이 듭니다.

 


글자 지우기

 

문제 설명

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 

제한사항

1 ≤ indices의 길이 < my_string의 길이 ≤ 100

my_string은 영소문자로만 이루어져 있습니다

0 ≤ indices의 원소 < my_string의 길이

indices의 원소는 모두 서로 다릅니다.

def solution(my_string, indices):
    substrings = [my_string[i] for i in range(len(my_string)) if i not in indices]
    answer = ''.join(substrings)
    return answer

리스트 컴프리헨션은 써도 써도 어렵네요.