ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 스쿨] 코딩테스트 연습 Lv.0 - 221229
    [프로그래머스] 2022. 12. 29. 17:32

    1) 7의 개수 https://school.programmers.co.kr/learn/courses/30/lessons/120912

     

    문제 설명

    머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.


    제한사항
    • 1 ≤ array의 길이 ≤ 100
    • 0 ≤ array의 원소 ≤ 100,000

    입출력 예
    array result
    [7, 77, 17] 4
    [10, 29] 0
    ########## 나의 풀이 ##########
    def solution(array):
        answer = 0
        for i in array:
            for j in str(i):
                if j == '7':
                    answer+=1
        return answer
    ########## 다른 사람의 풀이 ###########
    def solution(array):
        return ''.join(map(str, array)).count('7')
        
    # array 리스트의 각 요소를 str로 바꿔주고, 
    # ''.join을 이용해 모두 하나의 string으로 합쳐준 후
    # 그 stirng의 '7'을 count를 이용해 세어준다
    
    def solution(array):
        return str(array).count('7')
        
    # array에 str을 씌우면 "[7, 77, 17]"와 같이 array에 입력된 값을 그대로 str로 받아온다
    # "[7, 77, 17]"에서 7을 세어도 간단하다

     

    2) 잘라서 배열로 저장하기 https://school.programmers.co.kr/learn/courses/30/lessons/120913

     

    문제 설명

    문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.


    제한사항
    • 1 ≤ my_str의 길이 ≤ 100
    • 1 ≤ n  my_str의 길이
    • my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.

    입출력 예

    my_str n result
    "abc1Addfggg4556b" 6 ["abc1Ad", "dfggg4", "556b"]
    "abcdef123" 3 ["abc", "def", "123"]

    더보기

    ########## 나의 알고리즘 ##########

    1. 문자열이 주어지고 n 만큼 잘라야하니까, 문자열 슬라이싱을 활용하자.

    2. my_str[0:n]만큼 하면 첫번째 슬라이싱(0~n-1까지, 길이=n). 예를 들면, my_str[0:6]이면 0,1,2,3,4,5 자리수까지.

    3. 두번째 슬라이싱은 my_str[n:(n+n)], 세번째는 my_str[(n+n):(n+n+n)].

    4. 규칙적으로 n을 더해주는 거니까 for문을 사용하자.

    5. tmp_li라는 리스트에 my_str의 길이에 따라 슬라이싱할 위치 값을 리스트화해서 넣어볼까?

    >>> tmp_li = [i for i in range(0,len(my_str),n)] # 0에서 len(my_str)까지, 즉 my_str의 처음부터 끝까지, n의 단위로

    >>> print(tmp_li, len(my_str))

    6. len(my_str)이 9인 경우 리스트에 [0,3,6]이 담기는구나. len(my_str)이 9이면 i가 0,1,2,3,4,5,6,7,8 안에서 0, 0+3=3, 0+3+3=6이고, +3을 더하면 9가 돼서 범위가 넘어가니까.

     

    7. *** 나의 코드에서는 tmp_li를 활용했지만, tmp_li를 굳이 활용하지 않고, tmp_li에 들어갈 숫자를 바로 my_str 슬라이싱에 활용하면 된다. ***

    8. 다른 사람의 풀이에 있는 1줄 for문을 다시 풀어서 쓰자면 아래와 같다.

    def solution(my_str, n):
      answer = []
      for i in range(0,len(my_str),n):
        answer.append(my_str[i:i+n])
      return answer

    ########## 나의 코드 ##########
    
    def solution(my_str, n):
        answer = []
        tmp_li = [0]+[i for i in range(n,len(my_str),n)]
        # print(tmp_li, len(my_str))
        for i in tmp_li:
            if i == tmp_li[-1]:
                answer.append(my_str[i:])   
            else:
                answer.append(my_str[i:i+n])
        return answer
    ########## 다른 사람의 풀이 ##########
    
    def solution(my_str, n):
        return [my_str[i: i + n] for i in range(0, len(my_str), n)]

    ❓ 왜 범위가 넘어가도 가능하지...?

    my_str = "abc1Addfggg4556b"
    my_str[12:18]
    
    >>> '556b'
    
    # len(my_str)은 16이지만, 슬라이싱 할 때 end 값을 16보다 크게 해도 상관없이 잘 출력된다.

    댓글

Designed by Tistory.