파이썬 160

[프로그래머스, 파이썬] 푸드 파이터 대회

풀이 칼로리에 따른 음식의 수를 담은 food를 순회하면서 li라는 배열에 음식의 수//2를 한 몫의 수 만큼 인덱스를 곱한 문자를 추가 이후 s에 배열에 담긴 문자들을 합친 다음 물인 0을 추가하고 이후 s를 거꾸로 추가하여 해결 def solution(food): li = [] for i in range(1,len(food)): if food[i]//2: li.append(str(i)*(food[i]//2)) s = "".join(li) return s+"0"+s[::-1]

알고리즘 2024.03.14

[프로그래머스, 파이썬] 문자열 내 마음대로 정렬하기

풀이 해당 문제는 특정 규칙에 따른 정렬하는 것으로 인덱스 n에 따른 정렬과 같은 문자의 경우엔 해당 문자에 대한 앞순서로 정렬하는 문제이기에 lambda를 사용하여 첫 번째로는 x의 n번째에 해당하는 인덱스 규칙 적용 후 같다면 문자 x 순서에 따라 정렬한 것으로 해결 def solution(strings, n): return sorted(strings, key= lambda x:(x[n],x))

알고리즘 2024.03.14

Crawling[Crawling, Basic] 네이버 주식 크롤링

이전 포스팅을 통해 가상환경 설치와 간단한 크롤링 하는 코드를 작성했음. 또한 해당 포스팅은 나도 코딩님의 강의를 통해 학습한 내용을 포스팅 함. 본격적인 크롤링을 위해 가상환경에 pandas, selenium, lxml 설치하기 pip install pandas selenium lxml 우선 각각의 라이브러리가 어떤 것인지에 대한 간단한 설명으로 아래와 같다. Pandas - 데이터 조작과 분석을 위한 파이썬 라이브러리 - 주로 표 형식의 데이터를 다루는 데 사용되며, 데이터를 읽고 쓰는 기능을 포함 Selenium - 웹 애플리케이션을 테스트하기 위한 도구로 시작되어 - 웹 브라우저 자동화를 위한 강력한 라이브러리로 널리 사용됨. - 웹 페이지를 제어하고 데이터를 스크래핑하는 데 사용됨. Xml - ..

Crawling 2024.03.13

[프로그래머스, 파이썬] 땅따먹기

풀이 해당 문제는 DP를 활용한 문제로 해당 유형의 DP는 자주 사용하는 방식이기에 꼭 기억하고 있으면 좋다. for을 활용하여 1번째 인덱스의 land 위치에서 이전 값에서 현재 j의 인덱스 위치가 아닌 값들 중 가장 큰 값을 현재 값에 누적합하여 최종적으로 마지막 land의 배열 중 가장 큰 값을 전달하여 해결하는 방법 def solution(land): for i in range(1,len(land)): for j in range(4): land[i][j] += max(land[i-1][:j]+land[i-1][j+1:]) return max(land[-1])

알고리즘 2024.03.13

[프로그래머스, 파이썬] 명예의 전당 (1)

풀이 해당 문제는 명예의 전당에 있는 점수 중 최저점을 결과로 출력하는 것이기에 heapq를 사용하면 좋을 것 같다는 생각을 했다. 그래서 li를 초기값으로 -1로 준 다음 heapq로 변경한 다음 score 길이 만큼 반복하여 현재의 점수가 li에 있는 최소값 보다 클 경우 추가하고 heapq에 최소값을 빼고 현재 점수를 추가하는 형식으로 했으며 여기서 num은 i가 k보다 작을 경우 초기값인 -1로 계속 들어올 것이기에 num을 넣어 해결 해당 문제에서 이상하게 9,11번이 런타입 에러가 발생해서 어떤 문제일까 고민을 했는데 k가 score의 길이보다 큰 경우에 대해서 처음에 생각하지 못했던 것이었다. import heapq def solution(k, score): result = [0]*len(s..

알고리즘 2024.03.13

[프로그래머스, 파이썬] 주식가격

풀이 단순하게 접근해본 풀이와 스택을 활용한 풀이 두 가지 유형의 풀이 중 첫 번째 풀이는 단순하게 접근한 풀이로 li에는 현재 위치로 부터 앞으로 있을 거리에 대한 배열 이후 반복문을 활용하여 해당 값보다 작은 값이 있을 경우 카운팅한 것을 배열에 추가 후 탈출하여 해결 당연하지만 시간 복잡도가 상대적으로 올라갈 수 밖에 없으며, 다른 문제에선 이런 풀이는 통과되지 않을 듯하다. 그래서 두 번째 풀이로 스택으로 접근한 풀이인데 해당 풀이는 종종 나오는 것으로 이후의 값과 비교하려 할 경우 stack이라는 배열에 값이 있을 경우 마지막 값과 비교한 후 그에 따른 결과를 result에 적용하여 해결 다만 여기서 while문 또한 stack에 값이 있을 경우에 동작해야한다는 것을 기억하기. 첫 번째 풀이 d..

알고리즘 2024.03.12

[프로그래머스, 파이썬] 카드 뭉치

풀이 처음에는 goal과 cards의 요소가 같으면 goal과 cards에 해당 하는 문자를 모두 지우려 했는데 생각해보니 goal은 통과만 시키고 cards만 제거하면 되는 것 같아 코드가 간결해져 간단하게 해결 def solution(cards1, cards2, goal): for g in goal: if cards1 and g == cards1[0]: del cards1[0] elif cards2 and g == cards2[0]: del cards2[0] else: return "No" else: return "Yes"

알고리즘 2024.03.12

[프로그래머스, 파이썬] 2016년

풀이 2016년도의 특정 일에 대한 요일을 구하는 문제라서 1월1일이 금요일이라고 하여 찾아보니 실제로 맞는 요일이었다. 만약 다를 경우 연산을 조금 더 추가해서 적용하면 되는 것이기에 큰 문제는 없지만 같기에 수월했다. 그래서 파이썬 함수인 datetime을 가져온 다음 int 타입인 연도, 월, 일을 넣어주고 .weekday()+1 함수를 적용하게 되면 현재 요일에 대한 숫자가 return되기에 요일에 대한 배열을 만들어 출력하여 해결 from datetime import datetime def solution(a, b): weekend = ["SUN","MON","TUE","WED","THU","FRI","SAT"] return weekend[(datetime(2016,a,b).weekday()+1..

알고리즘 2024.03.12