금일은 프로그래머스에 관련된 0단계 문제들을 풀기 시작했다.
오늘 20문제 풀게되었는데 각각의 문제 정보를 공유해봐야겠다.
1. 머쓱이보다 키 큰사람
def solution(array, height):
answer = 0
for i in array:
if i > height:
answer += 1
return answer
다른문제들도 비슷한게 많지만 거의 for문으로 해결되었다.
2. 배열 두배 만들기
def solution(numbers):
answer = [num*2 for num in numbers]
return answer
간단하게 num에 *2를 생각하다 짜보았는데 의외로 성공이었다..
3. 편지
def solution(message):
answer = len(message)*2
return answer
위와 비슷한 맥락이다.
4. 자릿수더하기
def solution(n):
answer = sum(int(digit) for digit in str(n))
return answer
n이 1234면 1+2+3+4를 해주는 식이었는데 sum을 이용해 해결했다.
5. 점의 위치 구하기
def solution(dot):
if dot[0] > 0 and dot[1] > 0:
return 1
elif dot[0] < 0 and dot[1] > 0:
return 2
elif dot[0] < 0 and dot[1] < 0:
return 3
elif dot[0] > 0 and dot[1] < 0:
return 4
팀원분들이 if문으로 작성했다는 이야기를 들었고, 다른 방법은 없을까 고심했지만
역시 if문으로 풀게되었다.
유사문제를 보게되었는데 두줄로 끝나는걸 보고 좌절했다.
6. 문자열안에 문자열
def solution(str1, str2):
if str2 in str1:
result = 1
else:
result = 2
return result
if문으로 속하면 1, 속하지않으면 2로 출력하게 짤 수 있다.
7. 특정 문자열 제거하기
def solution(my_string, letter):
result = ""
for char in my_string:
if char != letter:
result += char
return result
8. 중앙값 구하기
def solution(array):
sort_array = sorted(array)
md_list = len(sort_array) // 2
md_value = sort_array[md_list]
return md_value
len을 //2 로 나누어 풀이했는데, 유사문제를 보니 한줄로도 충분히 가능하다.
def solution(array):
return sorted(array)[len(array) // 2]
9. 세균증식
def solution(s1, s2):
count = 0
for s1_char in s1:
for s2_char in s2:
if s1_char == s2_char:
count += 1
return count
n값의 시간에 증가에 따라 이중for문으로 작성했다.
def solution(s1, s2):
return len(set(s1)&set(s2))
유사풀이에 좀더 간단하게 set함수를 사용하는 예가 있어서 시간이되면 공부해봐야겠다.
10. 최대값만들기
def solution(numbers):
st_nums = sorted(numbers, reverse=True)
lst_nums = st_nums[:2]
result = lst_nums[0] * lst_nums[1]
return result
약간의 꼼수처럼 st_nums[:2]라고 주었다
def solution(numbers):
numbers.sort()
return numbers[-2] * numbers[-1]
11. 피자나눠먹기(1)
def solution(n):
pizzas = 1
slices = 7
while slices < n:
pizzas += 1
slices += 7
return pizzas
피자는 혼자먹어야 제맛이다.
12.피자나눠먹기(3)
def solution(slice, n):
pizzas = 1
while slice * pizzas < n:
pizzas += 1
return pizzas
주말에 아내와 피자를 시켜먹었는데 너무 매워서 화가났다.
13. 양꼬치
def solution(n, k):
yang_price = 12000
drink = 2000
order_yang_price = n * yang_price
order_drink_price = k * drink
discount = min(n // 10 , k) * drink
total = order_drink_price + order_yang_price - discount
return total
난관이었다. 적용할 수학문제가 떠오르지않아 discount부분은 검색해서 찾아냈고 다른부분을 어떻게 줄여야할지
고민이되었다. 약 40분간 풀었던것같은데 ..
def solution(n, k):
return 12000 * n + 2000 * (k - n // 10)
print(solution(10, 3))
유사문제를 보고 참 대단한 사람이 많구나 생각했다.
14. 순서쌍의 개수
def solution(n):
count = 0
for i in range(1, n + 1):
if n % i == 0:
count += 1
return count
n값에 대입한 수의 순서쌍 개수를 세어준다. n값을 20을 대입했고 6이 출력되었다.
15. 옷가게 할인받기
def solution(price):
discount = 0
result = 0
if price >= 500000:
discount = price*0.2
result = price
elif price >= 300000:
discount = price*0.1
result = price
elif price >= 100000:
discount = price*0.05
result = price
else:
result = price
result = price - discount
return int(result)
작은수부터 배열하니 오류가 났다. 연산자기호를 > 만 사용했더니 런타임 오류가 발생해서 >=로 수정해주었다.
16.배열자르기
def solution(numbers, num1, num2):
return numbers[num1:num2+1]
10번 문제와 좀 비슷했는데 문제가 문자열 3개라서 꼼수처럼 사용할 수 있더라...
17. 짝수개수 출력하기
def solution(num_list):
answer = [0, 0]
for num in num_list:
if num % 2 == 0:
answer[0] += 1
else:
answer[1] += 1
return answer
for문으로 몫이 0이면 짝수를, 1이면 홀수를 출력하게 해주고 answer에 대입해줬다.
18. 문자반복 출력하기
def solution(my_string, n):
answer = ''
for i in my_string:
answer += i * n
return answer
for문에 i * n을 해주니 헤에에엘로오오오가 나왔다.
19. 모음제거
def solution(my_string):
answer = ''
mo = ["a", "e", "i", "o", "u"]
for i in my_string:
if i not in mo:
answer += i
return answer
for문으로 모음을 속하지않게 해줬다.
금일 문제풀면서 크게 느낀점은 분명히 지난날들보다 성장을 하고있는것같은데...
문제를 접하면 접할수록 한계를 시험하는 느낌이 온다.
오늘 세션문제로 백준의 숫자야구, 그리디알고리즘과 완전탐색알고리즘 외 등등 몇가지 출제되었는데, 개념은 이해가되나 어떻게 풀어야할까에 대해 막막함이 앞섰던것같다.
숫자야구 한번 더 복습해보고싶긴한데, 노션이 잠겨있는거같다
옛날 설계할때 통곡의 벽을 느껴갔던적이있는데, 그 벽을 지나가면 엄청 이해가 쉬워진다. 삼각법으로 아무리 돌려보고해도 안보이던 도면들이었는데, 숙달되면 머릿속에 3차원으로 그려진다. 거기까지 2년이 넘게 걸렸다.
이번 알고리즘을 풀며 다가오는 수학적 난제들이나, 문제를 풀어가는 과정에서의 중요한부분을 캐치해서 이용하는 능력 등 여러가지 요소들이 참 중요하다고 느껴지는데...알고리즘은 통곡의벽이 맞는거같다.
저만치 달려나가고있는 다른 수강생분들이 대단하다 생각된다.
통곡의벽 뚫는중...🧱🧱🧱🧱🧱🧱🧱