-
[프로그래머스 스쿨] 코딩테스트 연습 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보다 크게 해도 상관없이 잘 출력된다.
'[프로그래머스]' 카테고리의 다른 글
[프로그래머스 스쿨] 코딩테스트 연습 Lv.0 - 230103 (0) 2023.01.03 [프로그래머스 스쿨] 파이썬을 파이썬답게 - Part 2 (0) 2023.01.03 [코딩테스트 스터디 Week2] 코딩테스트 연습 (0) 2023.01.02 [프로그래머스 스쿨] 코딩테스트 연습 Lv.0 - 221228 (1) 2022.12.27 [코딩테스트 스터디 Week1] 코딩테스트 입문 (0) 2022.12.27