[백준] BOJ 11399, ATM Python
·
IT, Computer
서론지난번에는 평범하지 않은 배낭 문제에 대해서 풀어보았다. 해당 문제가 궁금하다면 여기로 가면 된다. 이번에는 BOJ 11399 ATM 문제를 풀어보도록 하겠다. 이번 포스팅 역시 처음에는 문제 푸는 과정을 알려주고 아래에는 코드를 작성해놓을 예정이다. 추가 설명이 필요하다면 그에 따른 설명도 첨언하겠다. 해당 문제는 아래로 가면 된다. https://www.acmicpc.net/problem/11399 BOJ 11399 문제풀이 과정우선 브루트포스로 접근을 해보자. 사람들이 기다리는 시간 리스트를 순서와 상관 있게 나열하고 O(n!), 그 때의 각 경우를 시간 계산 O(n) 하면 O(n!)이 나오는데 이렇게 하면 시작하기도 전에 이미 시간이 초과됨을 알 수 있다. 그래서 이 시간을 줄이고자한다. 그래..
[백준] BOJ 12865, 평범한 배낭 파이썬 Python
·
IT, Computer
서론지난 포스팅에서는 다이나믹 프로그래밍을 이용한 문제풀이를 했다. 이번에도 dp를 이용한 문제를 풀 것이다. 원래 그리디를 이용해서 풀어야 되는데, 아무리 생각해도 그리디는 방법이 떠오르지 않는다. 하루를 이걸로 보낸 거 같다. 물론 책상에서 이거만 처다본건 아니지만 말이다. 이번 포스팅에서는 dp를 이용해 평범한 배낭(안 평범 하잖슴~) 문제를 파이썬을 이용해 풀어보도록 하겠다. BOJ 12865 문제는 여기로 가면 된다. BOJ12865 풀이 과정일단 문제 이해는 쉽다. 각 물품마다 가치와 무게가 있는데 k무게 안에서 가치가 가장 큰 물품들의 가치 총합을 알아내는 것이다. 주의해야 할 것은 우리가 가치가 큰 순서대로 넣는다거나, 혹은 무게가 작은 순서대로 정렬을 하는 것은 쓸모가 업다는 것이다. 문..
[백준] BOJ1463, 1로 만들기
·
IT, Computer
서론 지난 코딩 포스팅에서는 백준 2566을 풀었다. 이번 포스팅에서는 다이나믹 프로그래밍(DP)을 이용한 1로 만들기를 풀어보고자 한다. 난이도는 백준 실버3에 해당한다. 풀이 과정에 대해서 설명을 하고 하단에는 BOJ 1463 코드를 첨부하겠다. 다이나믹 프로그래밍에 대한 포스팅을 보려면 아래 포스팅으로 가면 된다. 다이나믹 프로그래밍 DP 알고리즘 파이썬 코딩테스트 (11)목차  서론지난 포스팅에서는 그리디 Greedy 문제인 로프 문제를 포스팅했다. 풀긴 풀었지만 고전했기에 아쉬웠던 문제였다. 아무튼 오늘은 DP 문제를 풀어보고자 한다. DP는 다이나믹 프로그래quiseol.com 백준1463, 1로 만들기 풀이 과정비슷한 문제로는 피보나치 문제가 있다. 피보나치는 단순 재귀로도 구현 가능하다. ..
[백준] BOJ2566, 최댓값
·
IT, Computer
서론지난 포스팅에서는 백준 1316을 풀어보았다. 해당 포스팅이 궁금하다면 여기로 가면 된다. 이번에는 그거보다는 쉬운 백준 2566 문제를 풀어보고자 한다. 브론즈3에 해당한다. 이번 포스팅 역시 지난 포스팅과 같이 처음에는 문제에 대한 설명과 접근 방식을 얘기하고, 이후에는 접근 방식을 구현한 코드를 작성할 예정이다.백준 2566 풀이 과정9*9 격자판에 0 혹은 자연수가 등장한다고 한다. 최댓값을 찾고 몇 행 몇 열에 위치한 수 인지 구하라고 한다. 딱 문제를 보자마자 든 생각은 최대값을 업데이트해주면서, 갱신될 때마다 해당 행, 열을 따로 저장하면 된다는 생각이다. 인풋의 꼬라지를 보면,3 23 85 34 17 74 25 52 6510 7 39 42 88 52 14 72 6387 42 18 78 ..
[백준] BOJ1316, 그룹 단어 체커
·
IT, Computer
서론오늘부터 차근차근 백준 문제를 풀어보고자 한다. 오늘 풀어볼 문제는 백준 1316이다. 이 문제는 실버 5에 해당하고 정답률은 현재 기준 58.855%다. 리스트를 사용한 문제로 리스트 관련 포스팅은 여기로 가면 되며, 문제를 직접 보고 싶다면 여기로 가면 된다. 백준 링크를 걸어 놓았다. 이번 포스팅에서는 어떻게 접근했고, 코드는 어떻게 했는지 적을 예정이다.  백준 1316 풀이과정 연속해서 나타나는 경우에서 연속의 정의가 애매해서 처음에 뭐지 싶었는데 여기서 연속이라함은 a,b,c와 같은 알파벳의 연속이 아니라(하지만 이 역시 문제로 충분히 나올법하다.) 기존에 사용된 알파벳이 있는지에 대한 연속 여부다. 그래서 abd인 경우는 연속, aaza는 불연속이다. 아무튼 난 이 문제를 보고 크게 세가..
리스트 컴프리헨션 List Comprehension
·
IT, Computer
서론이번 포스팅에서는 리스트 컴프리핸션에 대해서 알아보고자 한다. 배열이면 배열이지 뒤에 컴프리핸션은 뭐냐? 할텐데, 리스트 컴프리핸션은 단순히 선언하는 것이 아니라 계산식, if문 등을 넣어서 새로운 리스트를 만드는 방법이다. 대표적으로 ㅇ가지가 있는데 거기에 대해서 설명하고자 한다.1. 단순 리스트 컴프리헨션단순 리스트 컴프리헨션은 arr = [ 표현식 for 변수 in ]이다. 표현식에는 식이나, 간단한 함수를 넣을 수 있다. 예를들어 arr= [int(input() for _ in range (5)] 가 있다. iteration만큼 input을 받아 리스트를 만드는 것이다. int(input()) 대신에 x**2 같은 함수를 넣을 수도 있다.2. if문을 활용한 리스트 컴프리헨션if문을 활용하는 ..
Retrieval Augmented Generation(RAG) 복습 (6) 사전을 사용해서 질문 바꾸기
·
IT, Computer
서론우리가 제대로 LLM을 만들었음에도, 대답이 썩 만족스럽지 않은 경우가 있다. 물론 제대로의 제대로가 진정한 의미에서의 제대로가 아닐수도 있지만, 어느정도 검증된 모델을 향연으로 코드가 제대로 돌아가는 걸 확인한 이상 가장 떠오르는 변수는 바로 '사용자의 질문'이다. 개떡같이 물어도 찰떡같이 알아듣는다는 속담이 괜히 있는게 아니다. 그만큼 개떡같이 물어보는 사람이 많다는 것이고, 대답하는 사람은 그걸 알아듣고 찰떡같이 대답해야된다. 특히 대답해야되는 사람이 을의 입장이라면... 사용자가 개떡같이 말했을 때 잘 알아들어야된다. 이번 포스팅에서는 이러한 상황때 잘 알아들을 수 있게 dictionary를 작성하는 과정을 가질 것이다.어떤식으로 문제가 발생하는가서론에서 얘기하는 상황에 대해서 알아보도록 하자..