본문 바로가기

알고리즘/leetcode&프로그래머스15

[프로그래머스] 수식 최대화 - javascript 문제 [programmers.co.kr/learn/courses/30/lessons/67257] 문제 설명 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 같은 방식으로 결정하려고 합니다. 해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(+, -, *) 만으로 이루어진 연산 수식이 전달되며, 참가자의 미션은 전달받은 수식에 포함된 연산자의 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 숫자를 제출하는 것입니다. 단, 연산자의 우선순위를 새로 정의할 때, 같은 순위의 연산자는 없어야 합니다. 즉, + > - > * 또는 - > * > + 등과 .. 2021. 4. 15.
leetCode1315. Sum of Nodes with Even-Valued Grandparent - 문제: [Sum of Nodes with Even-Valued Grandparent](https://leetcode.com/problems/sum-of-nodes-with-even-valued-grandparent/) - 난이도: leetcode 기준 Medium 문제 해설 짝수조부모를 가진 노드의 합을 구하는 문제 였는데 Medium 치고 난이도가 높지는 않았다. 애초에 모든 노드를 checking을 했어야 해서 단순하게 BFS or DFS로 탐색을 하면 되는문제 였다. 난 DFS로 풀었다. root로 들어오는 트리노드는 아래와 같이 만들어졌다. ** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.. 2021. 2. 20.
빅오표기법 정리 - with JS 빅오표기법 빅오표기법이란 무엇인가? 일반적인 빅오 표기법 빅오표기법규칙 빅오표기법이란 무엇인가? 빅오표기법이란 알고리즘의 최악의 경우 복잡도를 측정하여 나타내는 것이다. 일반적인 빅오 표기법 빅오표기법에서 n은 입력의 개수를 나타낸다. O(1)은 입력공간에 대해 변하지 않는다. 따라서 O(1)을 상수시간이라 부른다. O(n)은 선형시간이며 최악의 경우에 n번 연산을 수행해야하는 알고리즘에 적용된다. O(log n) O(nlog n) O(n^2) O(n^3) O(2^n) 빅오표기법 규칙 빅오표기법의 규칙은 아래와 같고 아래의 법칙을 적용시켜 복잡도를 계산하면 된다. 계수법칙 합의법칙 곱의법칙 전이법칙 다항법칙 계수법칙 우선 계수법칙 부터 알아보자. 계수법칙은 단순히 입력 크기와 연관되어 있지 않은 상수를 .. 2021. 2. 12.
구현 알고리즘 - 왕실의나이트 지난 포스팅에서 풀었던 상하좌우 알고리즘을 기초하여 풀었습니다. 이동할 수 있는 범위를 정해 놓고 좌표를 이동하면서 경우의 수를 체크하는것 입니다. def move(p): row = int(p[1]) column = int(ord(p[0])+1)-int(ord(p[0])) steps = [(-2,-1),(-1,-2),(1,-2),(1,2),(2,-1),(2,1),(-1,2),(-2,1)] result = 0 for step in steps: next_row = row + step[0] next_column = column + step[1] if next_row >=1 and next_row = 1 and next_column 2020. 11. 26.
구현 알고리즘 - 상하좌우 문제설명 풀이 def trevel(a,move): move = list(move) x = 1 y = 1 for i in move: if i == 'R': if y != a: y+=1 if i == 'L': if y!=1: y-=1 if i == 'U': if x != 1: x-=1 if i == 'D': if x!= a: x+=1 return (x,y) def trevel(a,move): move = list(move) x = 1 y = 1 dx = [0,0,-1,1] dy = [-1,1,0,0] move_types = ['L','R','U','D'] for plan in move: for i in range(len(move_types)): if plan == move_types[i]: nx = x + .. 2020. 11. 26.
그리디 알고리즘 - 큰수의 법칙 예제 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다. 예를 들어 순서대로 3, 4, 3, 4, 3으로 이루어진 배열이 있을 때 M이 7이고, K가 2라고 가정하자. 이 경우.. 2020. 11. 25.