[Python] 백준 1865 : 웜홀 (Bellman Ford)
·
Algorithm
https://www.acmicpc.net/problem/1865 머리말 문제를 보고, 아 negative cycle 찾는 문제이구나 싶었다. 그래프에서 최단 경로를 탐색하는 방법 중 다익스트라와 벨만 포드가 있는데, 다익스트라는 Greedy 알고리즘이기 때문에 반드시 간선들이 non-negative weights을 만족해야 한다. 한편, 벨만 포드는 Dynamic Programming 알고리즘으로 negative weights를 가져도 정상적으로 동작한다! 접근 방법 edge relaxation을 N-1번 수행한다. 그때 만들어진 distance 배열은 최단 경로이다. edge relaxation을 N번째 수행했을 때, 더 짧은 경로를 발견한다면 negative weight cycle이 존재한다는 결론..
2022년 7월 ~ 8월 월간 일지
·
Study log
키워드 일기 7월 # 토익: 다음 달에 있을 토익 공부를 위해 단어, ets 기출 1권을 풀었다. 꾸준히 하자고 다짐했지만 건너뛴 날도 있다 😇 7월 말까지만 해도 LC 귀가 뚫렸다고 생각했었다. (과거형) # 정보처리기사: 대학 동기들이 다 따길래 나도 따라 쳐봤다. 외우는 게 너무 귀찮았지만 필기 합격! 실기 시험은 언제더라 # 제주도 여행(8日-15日): 교회 친구들과 다녀왔는데 스쿠버 다이빙도 처음 해보고,, 이것저것 별거 다해서 행복했다ㅋㅋ 다음에도 모일 수 있겠지? 8월 # 토익: 시험 결과가 나왔는데,, 저번보다 RC는 75점 올랐는데 LC는 35점 떨어졌다 ㅋㅋ. 졸업을 위해서 땄지만 공부한 게 아쉬워서 한 번 더 시험 칠까 고민 중이다. LC 진짜 자신 있었는데 점수 폭망 # 스미싱: 여..
[오브젝트] 역할, 책임, 협력
·
Books
"오브젝트: 코드로 이해하는 객체지향 설계" 책의 기록입니다. 협력 협력이란, 어떤 객체가 다른 객체에게 무엇인가를 요청하는 것 메시지 전송: 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단 메시지를 수신한 객체는 메서드를 실행해 요청에 응답 객체가 메시지를 처리할 방법을 스스로 선택! → 자신의 일을 스스로 처리하는 자율적인 존재 객체를 자율적으로 만드는 기본적인 방법은 내부 구현을 캡슐화하는 것 협력이 설계를 위한 문맥을 결정 객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력 객체의 상태를 결정하는 것은 행동 결론적으로, 협력이 객체를 구성하는 행동과 상태를 모두 결정 → 객체 설계에 필요한 문맥을 제공 책임 협력에 참여하기 위해 객체가 수행하는 행동 무엇을 알고 있는가(kno..
[Python] 백준 16500 : 문자열 판별 (dp)
·
Algorithm
https://www.acmicpc.net/problem/16500 머리말 완전 탐색인 줄 알고 왜 시간 초과가 나지 쩔쩔 맺던.. (테스트케이스 완전 불친절하다 😇) 이 문제는 dp 문제이다. 가만 생각해보면 중복 연산이 많으니 메모이제이션을 당연히 해야 한다. 처음 참고한 블로그도 좋은 풀이법이지만, 다른 분(cozyyg)의 풀이가 더 직관적이어서 그 풀이로 다시 공부하였다. 접근 방법 dp 배열에는 해당 인덱스까지 A에 포함된 문자열로 표현할 수 있는지 여부를 0, 1로 저장한다. 초기값 dp[0]은 1(True)로 두고, 우리의 목표는 dp[len(s)]값이 무엇인지 찾는 것이다. 계산 편의를 위해 +1 위치에 결괏값을 저장한다. 추가 테스트 케이스 1 [input] aaaaaaaaaa 2 aaa..
[Python] 백준 12865 : 평범한 배낭 (0/1 knapsack problem)
·
Algorithm
https://acmicpc.net/problem/12865 머리말 0/1 Knapsack 문제 DP로 유명한 문제이자 NP-hard 문제로 유명한 문제.. 작년 알고리즘 수업시간 때 배웠던 부분이 기억이 잘 나지 않아 첨부하였다. 수업 노트 코드 n, k = map(int, input().split()) weights = [-1] values = [-1] for i in range(n): w, v = map(int, input().split()) weights.append(w) values.append(v) dp = [[0] * (k + 1) for _ in range(n + 1)] for i in range(1, n + 1): for w in range(1, k + 1): if weights[i]
[Python] 프로그래머스 : 뉴스 클러스터링
·
Algorithm
2020 KAKAO BLIND RECRUITMENT https://school.programmers.co.kr/learn/courses/30/lessons/17677 머리말 풀이 시간 40분 다중집합의 교집합과 차집합을 어떻게 구할지 몰라 검색해서 알아보았다. 그런데 문제를 다시 보니 해당 부분 어떻게 처리할지 알려줬더라 ㅎㅎ;; 다른 풀이 방법을 보니 엄청 깔끔하니 이것도 참고해보자. 접근 방법 문제의 요구사항을 차근차근 적용하여 풀었다. 다중집합의 합집합과 교집합을 구하는 방법은 [더 알아보기]를 참조하길 바란다. 🐥 이건 얻어가자 str.upper(): 문자열을 모두 대문자로 변경 str.isalpha(): 문자열이 알파벳인지 확인 코드 def solution(str1, str2): answer =..
[Python] 프로그래머스 : 괄호 변환
·
Algorithm
2020 KAKAO BLIND RECRUITMENT https://school.programmers.co.kr/learn/courses/30/lessons/60058 머리말 풀이 시간 50분 컴파일러 수업을 잘 들었다면 수월하게 풀었을 것 같다는 느낌.. 카카오에서 컴파일러 관련 문제도 내는구나 싶었다. 접근 방법 정말 다행인 것은 문제에서 접근 방법을 친절히 설명해준다;; 재귀 함수 쓰는 방법도 다 알려줘서 그거 따라서 하면 쭉 하면 문제없이 풀이할 수 있다. 균형 잡힌 괄호 문자열은 다음과 같이 판별했다. left와 right변수를 선언한다. 문자열을 앞에서부터 탐색하면서 (가 나오면 left를 증가시키고 )가 나오면 right를 증가시키는데 그 갯수가 같아지는 그 시점에서 문자열을 u와 v로 분리하..
[Python] 프로그래머스 : 메뉴 리뉴얼 (구현)
·
Algorithm
2021 카카오 블라인드 채용https://school.programmers.co.kr/learn/courses/30/lessons/72411머리말풀이 시간 1시간 5분처음 생각한 로직을 쭉 풀어쓰다가 문제에서 이해하지 못한 부분 때문에 코드가 난잡해졌다.접근 방법2번 예제에서 왜 AB는 답에 포함되지 않을까 고민을 많이 했다.하지만 문제에서 가장 많이 함께 주문한 단품 메뉴들을 코스요리 메뉴로 구성 이라는 말을 잘 생각해야 한다.AB도 2번 이상 포함되기는 하지만, AD, CD가 3번씩 포함되므로 이것만 답에 포함시켜야 한다.나는 다음과 같은 로직으로 문제를 풀었다.단품 메뉴 가장 많이 주문한 사람의 개수를 maxLen에 저장한다.그 개수가 course 보다 작다면 확인할 필요가 없..
squareyun
'분류 전체보기' 카테고리의 글 목록 (2 Page)