728x90

코딩테스트 103

백준 16506번 CPU 풀이/코드 (파이썬) 간단한 구현문제

해설 코드만 궁금한 분은 깃허브링크 눌러주세요! 문제 설명 위 그림만 보면 뭘까? 싶지만 논리회로?공부를 해본 사람은 금방 감이 올 것 같다. 문제에서 주어지는건 어떤 새로운 언어인데, 그 언어는 opcode, rD, rA, rB로 구성돼있다. 그리고 이것들은 어떤 규칙에 따라서 이진법으로 바꿀 수 있는데 그 규칙에 따라서 10101111.. 이런식의 이진법으로 바꾸면 된다. 감이 안오면 예제를 보면 쉽다. 위에 설명보다 예제를 보는게 더 빠를때가 있다. 다만 세세한 조건은 예제만으로 알긴 힘드니 예제를 보고 다시 문제 읽는 습관을 들여야한다.,, 아무튼ㅋㅋㅋ 그냥 저냥 살짝 까다로운 구현문제라고 보면 된다. 문제 해결 논리 잘 보면 'C'가 있고 없고에 따라서 뒤에 0인지 1인지, 맨 뒤에 rB가 3자..

백준 2281번 데스노트 풀이/코드 (파이썬) 꽤 어려운 다이나믹 프로그래밍 문제

코드만 궁금한 분은 깃허브 링크 눌러주세요! 문제 설명ㄱㄱ 간단히 얘기하자면, 열의 갯수만 지정된 어떤 리스트가 있고 각 칸에 *을 넣는데 이 때 주어진 숫자만큼만 이어서 *을 넣을 수 있고 그 이후에는 한칸만 띠고 다시 *을 넣던가 혹은 다음 행으로 넘어가서 다시 *을 넣어야 한다. 이 때 각 행은 오른쪽 끝에 무조건적으로 0칸 혹은 몇개의 칸이 남게 되는데, 각 칸의 제곱의 합이 최소가 되는 경우를 찾아 그 최소값을 반환하는 문제이다. 이 때 마지막 행의 빈칸은 포함하지 않는다. 문제 해결 논리 1. 우선 dp라는 리스트를 선언하는데, 가로=열의 총 갯수, 세로=숫자의 총갯수이다. 2. n번째 숫자에 해당하는 별을 넣을 때에는 n-1번째의 별의 다음 행에 새로 시작할 수 있고, n-1째 별의 마지막에..

프로그래머스 10주차 교점에 별 만들기 풀이/코드 (파이썬)

코드만 궁금한 분은 깃허브링크 눌러주세요! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제는 간단하다. ax+by+c = 0 꼴의 방정식을 이루는 a,b,c 쌍들이 주어지고 모든 방정식의 교점을 구해 그 중 정수의 x좌표 y좌표를 갖는 경우에 한해서 * 처리를 하고 나머지 범위는 모두 '.' 을 입력한다. 이 때, 모든 별을 포함하는 가장 작은 직사각형 만큼은 '.'을 찍어야하고, 이 때 위와같이 문자열 리스트를 만들어서 리턴해야한다. 요새 백준만 풀다보니까 리턴하는게 어색했달까 아무튼 문제 해결 논리 1. for문을 통..

백준 12865 평범한 배낭 해설/코드 (파이썬) 다이나믹 프로그래밍!

문제 해결 코드만 궁금한 분은 깃허브링크 눌러주세요. 풀이가 2개니까 잘 보고 둘 다 실행 해보세요~ GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 다이나믹 프로그래밍이란걸 배운다면 가장 처음 배우게되는 배낭 문제. 나도 사실 이 문제는 파이썬 알고리즘 인터뷰에서 봣던 문제라 크게 어렵지 않게 풀었다. 문제 해설이 총 2개인데, 나는 파이썬 알고리즘 인터뷰에서 나온 방식대로 우선 한번 풀어봤다. 문제 해결 논리 1 1. N개의 행, K+1개의 열로 구성된 행렬을 하나 만든다. 2. 1행은 첫번째 물건만 넣었을 때를 의미하고,..

백준 11058번 크리보드 파이썬 풀이/코드 (다이나믹 프로그래밍)

코드만 궁금한 분은 깃허브링크 눌러주세요! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제 해결 논리 우선 출력-선택-복사-붙여넣기 이 과정만 해도 4번은 눌러야하고 극초반에는 그렇게 해봣자 효율이 안 좋기때문에 5까지는 그냥 A를 출력하는게 최대값이다. 이 이후에는 각 값에서의 최댓값을 계산할때마다 맨 앞부터, 현재 버튼 누르는 횟수 - 3 째 까지 모두 훑으며 이전의 갯수-전체선택-복사-(남은 횟수는 모두)붙여넣기를 하면서 그중 가장 큰 값을 현재의 최댓값으로 하면 된다. -3째까지만 훑는 이유는 그렇게 해야 최소 한..

백준 12026번 BOJ거리 풀이/코드 (파이썬, 156ms) 다이나믹 프로그래밍!

코드만 궁금한 분은 깃허브링크 눌러주세요! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제 해결 논리 다이나믹 프로그래밍이 항상 그렇듯, 변수 리스트 몇개 설정하고 적당히 잘 ..섞어서 풀면 된다. 나같은 경우에는 0. 처음문자부터 끝문자까지 각각 방문하는데에 필요한 최소에너지를 저장하는 리스트를 생성한다. 1. 우선 BOJ순서대로만 점프할 수 있으므로 딕셔너리에 J->O, O->B, B->J를 호출할 수 있게 키/값으로 저장해둔다. 2. 어떤 문자를 호출하는 경우 앞쪽의 모든 경우를 다 호출해야 하므로 B, O, J각각..

백준 15486 퇴사 2 풀이/코드 (파이썬) 다이나믹 프로그래밍

코드 복사해보실 분은 깃허브링크 눌러주세요! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제 해결 논리 1. 입력받는 값의 갯수가 N개라고 할때 N번째부터 시작한다. 2. 뒤에서부터 매번의 최대값을 갱신하는데, 임의의 시점을 n이라 하고 그때 걸리는 시간을 t라고 하면 n에서의 최대값은 [n+1 값(바로 직전값)]과 [n+t 값(t시간 전의 값) + 현재값]을 비교한 최대값이다. 3. 0일째까지 2를 반복해서 0일째에 나오는 값을 출력 후 끝낸다. 간단히 얘기하자면, 만약 t번째 전 값과 현재 값을 더한 것보다 이전 값이..

프로그래머스 단어 변환 문제 해설/코드 (파이썬), BFS활용문제

코드만 궁금한 분은 깃허브링크 눌러주세요! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제 해결 논리 1. 주어진 단어들을 키로 하고 값은 False를 갖는 딕셔너리를 만든다. 2. 입력받은 단어들 중 시작 단어와 문자가 1개만 차이나는 단어를 모두 찾아내서 3. 아까 딕셔너리에서 지금 찾은 단어들의 값을 True로 바꾸고 4. 큐에 넣는데, 이 때 지금 찾은 단어만 넣는게 아니라 지금 몇번째 단계인지를 같이 입력한다. 5. 큐에서 단어를 새로 빼고 2~4를 반복한다. 이 때 아직 한번도 나오지 않은 단어들만 (딕셔너리에..

백준 1495번 기타리스트 해설/코드 (파이썬) 좋은 다이나믹 프로그래밍 문제

문제 해설 코드만 궁금한 분은 깃허브링크 눌러주세요..!! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 문제 해결 논리 얼핏 보면 bfs문제같은데 시간초과로 bfs는 안된다. 생각해보면 계속 갯수가 2씩 곱해지고 최대 100번 반복해야하니까 최악으로는 가장 마지막 경우에 2^N개의 값을 계산해야될 수도 있다(O(2^(N^2))). 따라서 매 곡 순서마다 가능한 음량을 체크하는 리스트를 만들어서 가능한 음량을 체크하는 형식으로 계산하면 반복문을 활용, O(NM)으로 문제를 풀 수 있다. 1. 음량은 0부터 입력된 값 M까지 ..

백준 15989번 1,2,3 더하기 4 해설/코드(파이썬) 다이나믹 프로그래밍 문제

풀이 코드만 궁금한 분은 깃허브링크 눌러주세요..! GitHub - Rhyankwon/algorithms Contribute to Rhyankwon/algorithms development by creating an account on GitHub. github.com 문제 설명 결국 1, 2, 3을 적당히 잘 섞어서 어떤 수를 만드는데 그게 가능한 경우의 수를 모두 찾아야 한다. 문제 해결 논리 : 1. N이라는 값이 있을 때 그 값의 가능한 경우의 갯수를 dp[N]이라고 하자. 2. 이 때 dp[N]은 dp[N-1] + dp[N-2] + dp[N-3]이다. 그 이유는 N-1째에서 1을 더하고, N-2째에서 2를 더하고, N-3째에서 3을 더하는 것 모두 N을 만족하기 때문에 세 경우의 수를 모두 더해..

728x90