일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- #코딩독학 #코딩인강 #코딩배우기 #개발자 #코딩이란 #코딩교육 #프론트엔드부트캠프 #백엔드부트캠프 #국비지원부트캠프 #개발자 #백엔드 #AI부트캠프 #개발자국비지원 #백엔드개발자
- 파이썬 #python #기초 #기본
- #프론트엔드개발자
- Today
- Total
아자아자 화이팅이닷 !
231014 프로그래머스 문제풀기 본문
사실 어제 올리려고 했는데 오늘 올림 ^^ ....
오랜만에 글을 써본댜,,
다시 아자아자 화이팅을 해봐야게따 ..!
다른 일들을 하느라 좀 까먹은듯하지만 힘내서 해봐야쥥 ,,
힘내자 나 자신아 ^^ !

* 문자 개수 세기 문제에서
어떻게 문제를 풀어야할지 감이 잘안와서 구글링을 해보았돠 ㅋ.ㅋ ..
제일 직관적으로 푸는 방법은
def solution(my_string):
answer = [0] * 52
chars = { "A": 0, "B": 1, "C": 2, "D": 3, "E": 4, "F": 5, "G": 6, "H": 7, "I": 8, "J": 9, "K": 10, "L": 11, "M": 12, "N": 13, "O": 14, "P": 15, "Q": 16, "R": 17, "S": 18, "T": 19, "U": 20, "V": 21, "W": 22, "X": 23, "Y": 24, "Z": 25, "a": 26, "b": 27, "c": 28, "d": 29, "e": 30, "f": 31, "g": 32, "h": 33, "i": 34, "j": 35, "k": 36, "l": 37, "m": 38, "n": 39, "o": 40, "p": 41, "q": 42, "r": 43, "s": 44, "t": 45, "u": 46, "v": 47, "w": 48, "x": 49, "y": 50, "z": 51 }
for i in my_string:
cnt = my_string.count(i)
answer[chars[i]] = cnt
return answer
이렇게 푸는 건데 ,,
더 깔끔하고 간결한 코드는
def solution(my_string):
answer = [0] * 52
for i in my_string:
if i.isupper():
answer[ord(i) - 65] += 1
else:
answer[ord(i) - 71] += 1
return answer
이렇게 푸는 것이다 !
여기에서
알파벳 A의 아스키 코드 → 65 / a 의 아스키 코드 → 97
대문자 A~Z의 배열 인덱스가 0~25이 되고 a~z의 배열 인덱스가 26~52
따라서 대문자의 경우 아스키 코드에서 65를 빼줘야하고 소문자의 경우 71을 빼줘야한다 !
그리고 ord함수는 문자의 순서 위치값을 의미한다.
ord(A) #65
ord(B) #66
이런식으로 !
마지막 코드가 제일 좋은 코드인 것 같다 !
* 배열 만들기 4 문제에서
처음에
def solution(arr):
stk = []
for i in range(len(arr)):
if len(stk) == 0:
stk.append(arr[i])
elif stk[-1] < arr[i]:
stk.append(arr[i])
elif stk[-1] >= arr[i]:
stk.pop()
stk.append(arr[i])
return stk
이렇게 코드를 짰는데, 테스트 케이스는 통과했는데 채점 결과는 하나도 통과하지 못했다 ^^ ...
힌트를 얻은건 for문으로 돌리는게 아니라 while문으로 돌려야하는건가 ? 싶은 점 !
그렇게 짠 코드는
def solution(arr):
stk,i = [],0
while i < len(arr):
if not len(stk):
stk.append(arr[i])
i += 1
elif len(stk):
if stk[-1] < arr[i]:
stk.append(arr[i])
i += 1
elif stk[-1] >= arr[i]:
stk.pop()
return stk
요것이다 !
근데 더 간결한 코드를 발견해똬
def solution(arr):
stk = []
for i in range(len(arr)):
while stk and stk[-1] >= arr[i]:
stk.pop()
stk.append(arr[i])
return stk
맨 마지막 조건 빼고는 조건이 같다는 점을 이용해서 간결하게 코드를 짠 것 같다 ,,
와웅 ..

* 문자열 계산하기 문제에서
처음에
def solution(my_string):
a,b,c = my_string.split(" ")
while b == "+":
return int(a) + int(c)
return int(a) - int(c)
이렇게 코드를 짰는데 채점 결과가 하나도 통과하지 못해서 뭐가 문제지 ..? 하고 있었는데
연산자가 하나가 아닐수도 있다는 말을 보고 OMG했돠 ..
왜 그걸 생각을 안하고 있었쥐 ㅋ ..
그래서
def solution(my_string):
answer = 0
if "+" in my_string:
a = my_string.split(" + ")
answer += int(a)
elif "-" in my_string:
a = my_string.split(" - ")
answer -= int(a)
return answer
이렇게 코드를 짜봤는데
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list' 이런 오류가 나왔다 ㅋ.ㅋ ..
이 문제는 처음값을 일단 저장하고, 그다음 + ~ 나 - ~ 의 규칙을 찾아서 코드를 짜면 해결되는 문제였다 !
그렇게 짠 코드는
def solution(my_string):
a = my_string.split()
answer = int(a[0])
for i in range(1,len(a)):
if a[i] == "+":
answer += int(a[i+1])
elif a[i] == "-":
answer -= int(a[i+1])
return answer
이렇다 !
이 문제를 가장 간단하게 해결할 수 있는 방법은 eval 함수를 사용하는 것이었다 !
eval 함수는 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환하는 함수이다 !
>>> result = eval("(3 + 5) * 7")
>>> print(result)
56
이런식으로 말이당
그래서 그냥
def solution(my_string):
return eval(my_string)
이렇게 해주는 정답라는고 ,,
와웅 ,,

마지막으로 굉장히 신선했던 코드가 있는데,
def solution(my_string):
return sum(int(i) for i in my_string.replace(' - ', ' + -').split(' + '))
바로 이 코드이다 !
여기에서 replace함수를 쓸거라고는 생각을 못했는데 발상이 좋은 것 같다 !

하..... 임시저장 계속 하고있었는데 왜 새로고침하니까 중간 다 날라갔죠 ..? ^^ .....
화가나요 .....

* 문자열 밀기 문제에서는
find함수를 사용하면 아주 간단하게 문제를 해결할 수 있었다 !
def solution(A,B):
return (B*2).find(A)
여기에서 find() 함수는 인자로 받은 문자열의 처음 인덱스를 리턴하고, 만약 찾지 못하면 -1을 리턴하는 것을 이용하여 풀면 된다 !
그리고 직관적으로 푼 코드는
def solution(A,B):
for i in range(len(A)):
if A == B:
return i
else:
A = A[-1] + A[:-1]
return -1
이렇다 !
* 특이한 정렬 문제에서는
어떻게 풀어야할지 감이 안와서 구글링을 했다 !
이 문제에서는 lambda함수를 사용하면 비교적 간단하게 문제를 해결할 수 있었다 !
lambda함수는
파이썬 마스터하기 : 람다(Lambda) 함수
람다(lambda) 함수는 함수형 프로그래밍에서 중요한 개념 중 하나로, 익명 함수(anonymous function)라고도 부릅니다.
velog.io
를 참조하면 좋을 것 같다 !
그래서
def solution(numlist,n):
result = sorted(numlist, key = lambda x : (abs(x-n), -x))
return result
이렇게 문제를 해결 할 수 있다 !
이 문제는 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 필요로 하는데,
어떠한 기준을 삼아 정렬을 하는 문제는 lambda로 해결할 수 있다.
따라서 매개변수 x가 numlist 배열을 돌면서, 각 요소와의 차이를 절댓값 method인 abs로 구한다.
이때 내림차순으로 구현하기 위해 -x 로 부여한다.
오늘은 여기까지 !
빨리 끝내자고 ,,
'TIL' 카테고리의 다른 글
231023 프로그래머스 문제풀기 (0) | 2023.10.23 |
---|---|
231016 프로그래머스 문제풀기 (0) | 2023.10.16 |
230831 프로그래머스 문제풀기 (0) | 2023.08.31 |
230830 프로그래머스 문제풀기 & 1대1 코칭 (0) | 2023.08.30 |
230828 프로그래머스 문제풀기 (0) | 2023.08.29 |