알고리즘 315

[백준, 파이썬, 2644번] 촌수계산

풀이처음 접근한 방식은 단순히 자식에서 부모를 찾으면 된다는 것 하나로간단하게 접근하여 제시된 예제는 모두 통과 했지만 계속해서 12%에서 틀렸다고 나오기에 어떤 이유인지 조사했을 때 발견한 것으로첫 번째는 조사해야하는 a,b가 있을 때 a가 b의 부모이던지, 그 반대의 경우에 대한 조건을 찾을 수 있었으며두 번째로는 사실 계속 고민했을 때 찾지 못해 다른 게시글로 알게 된 정말 간단한 것으로더 높은 숫자가 부모가 되는 조건으로어떤 방식으로 해결해야 좋을지 고민한 결과그냥 단순히 부모에 연결된 자식 li를 하나씩 탐색하는 방법을 택하였으며여기에 bfs를 적용하여 각 노드에서 하나씩 모두 탐색하여a와b 모두 연결된 것 중, 가장 적은 촌수를 가진 값을 도출하여 해결할 수 있도록 함. import sysfr..

알고리즘 2024.05.01

[백준, 파이썬, 1406번] 에디터

풀이 처음 접근한 방식은 그래도 최대한 계산을 덜하도록 하기 위해 인덱스와 길이를 계산하면서 조건 분기후 처리하려 했지만 역시나 시간초과가 발생하여 아래에 있던 힌트에 스택을 활용하여 해결 좌우에 각각의 배열을 만들어 해결했는데 우선 초기 문자열을 좌측 l 배열에 넣고 L문자가 주어지면 l배열의 가장 마지막 값을 r배열 가장 왼쪽에 추가하고 D는 l배열 가장 마지막 문자를 지우는 형식으로 B와 P 또한 각 조건 분기에 맞게 처리하여 마지막엔 각각의 배열을 합쳐 출력하여 해결 여기서 deque는 간단하게 배열 좌우에서 추가 제거가 가능하도록 하기 위해 사용 첫 번째 풀이가 정답 코드이며, 두 번째 풀이가 시간 초과 코드 첫 번째 풀이(정답) import sys from collections import d..

알고리즘 2024.04.23

[파이썬] numpy

알고리즘 문제를 풀다가 1차원 배열을 n길이의 2차원 배열로 만드는 문제가 있어 이전에 학습한 numpy를 활용한 reshape()을 사용해서 해결했는데 여기서 다른 해결 코드를 확인하다가 reshape() 인자값으로 -1을 넣은 것을 확인하여 어떤 의미인지 확인하다가 다른 메서드들에 대해 관심을 가지게 되어 다시 포스팅하기로 생각함... ㅎㅎ 우선 reshape()의 인자값으로 -1을 넣는 건 자동으로 해당 크기에 맞게 맞춰줄 때 사용하는 것으로 예를 들어 크기가 12인 배열을 2행 6열로 할당하고자 할 경우 n이 2로 입력이 주어진다면 간단하게 아래와 같이 작성하면 됨. 여기서 tolist()를 하는 이유는 tolist()를 사용하기 이전에는 Numpy 배열이기에 배열로 출력하고자 한다면 tolist..

알고리즘 2024.04.05

벡터 vector

numpy를 사용하다가 단위 벡터, 선형 독립이라는 용어와 수학적인 것이 나오길래 궁금하기도 하고, 근래에 자바스크립트로 나왔던 알고리즘 문제로 레이더 관련해서도 수학적인 것이 종종 나오는 것 같아서 궁금한 수학 관련 용어나 이론이 있다면 공부하고 싶어서 포스팅하기로 함. 아! 그리고 오늘 알고리즘 문제로 나왔던 n개의 공이 있는 곳에서 순서 없이 m개를 선택하는 방법에 대한 개수를 구하는 문제로 조합을 활용하는 건데 전에 포스팅한 것처럼 itertools나 math, 재귀, 반복문 등으로 해결 가능하지만 간단한 이론으로 해결하는 방법은 아래와 같고 n! ---------- (n-m)!*m! 순열 또한 아래와 같이 간단하게 수학적으로 접근하면 된다. n! ---------- (n-m)! 이제 벡터에 대해..

알고리즘 2024.04.04

[파이썬] math, numpy

알고리즘 문제를 풀던 중 배열에 있는 모든 정수 간의 곱을 구하는 문제가 있어서 한 줄 코드로 해결하고 싶은 마음에 찾아보니 math, numpy로 해결하는 방법이 있어서 두 가지 모두 해결해보고 어떤 방법으로 푸는 것이 더 시간 효율적인지 알아 본 결과 차이점으로는 아래와 같다고 한다. NumPy: NumPy는 대규모 다차원 배열과 행렬을 처리하는 데 최적화되어 있습니다. 벡터화된 연산을 지원하여 배열의 요소별 연산이 매우 빠르게 수행됩니다. C 언어로 구현되어 있어서 매우 빠른 속도를 제공합니다. NumPy는 배열의 요소를 효율적으로 다룰 수 있는 많은 함수와 메서드를 제공합니다. math 모듈: math 모듈은 수학적인 함수들을 제공하며, 주로 단일 숫자나 작은 리스트 등 간단한 데이터에 사용됩니다..

알고리즘 2024.04.04

[파이썬] 순열,조합

지금까지 순열과 조합을 구할 때 요소가 무엇인지 알 필요가 없을 경우에도 from itertools import permutations or combinations로 적용 후 len으로 개수를 카운팅 하거나 아니면 재귀를 활용하여 해결하도록 했는데 알고보니 간단하게 math로도 사용가능한 순열, 조합이 있었다. import math print(math.perm(5,3)) print(math.comb(5,3)) 그래서 순열과 조합을 사용할 때 요소를 확인하고자 한다면 itertools로 사용하거나 재귀를 돌리고 카운팅만 하고 싶다면 math를 사용하면 될 것 같다.

알고리즘 2024.04.04

[프로그래머스, 파이썬] 등수 매기기

풀이 첫 번째 풀이는 2중 for문을 사용해서 특정 값과 비교 값을 비교하며 조건에 따라 특정 값의 인덱스에 따른 result의 값을 차감했는데 O(n2)으로 시간 효율성이 좋지 않기에 두 번째 풀이와 같이 index로 접근하게 되면 시간 효율성을 좀 더 높일 수 있다. 첫 번째 풀이 def solution(score): li = [sum(i)/2 for i in score] result = [len(score)]*len(score) for i in range(len(li)): for j in range(len(li)): if i!=j and li[i] >= li[j]: result[i]-=1 return result 두 번째 풀이 def solution(score): li = [sum(i)/2 for ..

알고리즘 2024.03.29

[프로그래머스, 자바스크립트] 삼각형의 완성조건 (1)

풀이 자바처럼 간단한 문제부터 해결하면서 메서드와 구현 방식을 유연하게 적용시키기 위해 풀기로 함. 해당 문제는 간단한 문제이지만 배열을 잘 사용하기 위해 가변 배열을 생각하여 해결하고자 함. 그래서 slice와 reduce를 사용하여 해결. function solution(sides) { let li = sides.sort((a,b)=>a-b) return (li.slice(0,li.length-1).reduce((hap,val)=>hap+val,0) > li[li.length-1])?1:2; }

알고리즘 2024.03.25