목록Study/Algorithm (8)
NY's 개발일기
문제 설명 지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다. 이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다. 어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다. 어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오. 소스 코드 def ..
문제 설명 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. 소스 코드 def solution(s): stack = [] for i in s: if(i == "("): stack.append(i) else: if(stack == []): return False else: stack.pop() return le..
문제 설명 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 경과 시간 다리를 지난 트럭 다리를 건너는 트럭 대기 트럭 0 [] [] [7,4,5,6] 1~2 [] [7] [4,5,6] 3 [7] [4] [5,6] 4 [7] [4,5..
문제 입력 출력 소스 코드 #include #include #include using namespace std; vector v[102]; queue q; int visited[102]; int dist[102]; void bfs(int cur) { q.push(cur); visited[cur] = 1; while(!q.empty()) { for(int i=0;i> n; int p1, p2; cin >> p1 >> p2; int m; cin >> m; for(int i=0;i> a >> b; v[a].push_back(b); v[b].push_back(a); } bfs(p1); if(dist[p2] != 0) { cout
문제 입력 출력 소스 코드 #include #include using namespace std; vector v[102]; int visited[102]; int total; void dfs(int cur) { visited[cur] = 1; total += 1; for(int i=0;i> n >> m; for(int i=0;i> a >> b; v[a].push_back(b); v[b].push_back(a); } dfs(1); cout
문제 입력 출력 소스 코드 #include #include using namespace std; int main() { int n; cin >> n; stack s; for(int i=0;i> command; if(command == "push") { int num; cin >> num; s.push(num); } else if(command == "pop") { if(s.empty()) cout
문제 입력 출력 소스 코드 #include #include using namespace std; int main() { int n; cin >> n; queue q; for(int i=0;i> command; if(command == "push") { int num; cin >> num; q.push(num); } else if(command == "pop") { if(q.empty()) cout
문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수입니다. 입출력 예 n result 45 7 125 229 즉, n (10진법) n (3진법) 앞뒤 반전 (3진법) 10진법으로 표현 45 1200 0021 7 다음과 같은 순서로 답을 도출해내는 문제입니다. 필자의 경우, 해당 문제를 조금 복잡하게 풀었는데 해당 문제를 간단하게 풀어낸 좋은 코드를 발견하여 이를 기록하고자 합니다. def solution(n): answer = 0 arr = [] while True: arr.append(str(n % 3)) n = n//..