전체 글

문제 설명정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.제한사항1 ≤ arr의 길이 ≤ 1,000,0001 ≤ arr의 원소의 값 ≤ 100입출력 예arrresult[1, 2, 3, 100, 99, 98]5입출력 예 설명입출력 예 #1위 작업을 반복하면 다음과 같이..
🚨 발생한 문제와 상황header.tsx 컴포넌트에서 유저의 로그인 상태를 파악해 유저 정보를 로컬스토리지에 저장하고, 해당 값을 JSON.parse()로 가져오는 도중 에러가 발생했다. 아래는 문제가 발생한 부분이다. // header.tsxconst userCheck = () => { onAuthStateChanged(auth, async (user) => { if (user) { const uid = user.uid const q = query(collection(db, 'user'), where('uid', '==', uid)) const querySnapshot = await getDocs(q) const data = queryS..
· study/git
이번에 처음으로 Next.js 프로젝트 세팅하면서 husky를 다뤄보았다. 이번에 하면서 최신 자료들을 못찾아서 좀 어려웠어서... 미래의 나와 혹시 나처럼 헤메고 있을 누군가를 위해서 세팅 과정을 적어둘것이다. 나는 yarn create next app으로 미리 Next.js 프로젝트를 생성해두었다. TypeScript, ESLint, Tailwind CSS를 생성하면서 함께 설치했다. 그래서 Next.js 프로젝트를 설치하는건 따로 작성하지 않겠다. 사용된 버전들 { "dependencies": { "next": "14.2.2", "react": "^18", "react-dom": "^18" }, "devDependencies": { "@types/node": "^20", "@types/react":..
# 다익스트라 # a가 b에 의존함 => b에서 a로 갈 수 있다 from heapq import * import sys input = sys.stdin.readline t = int(input()) # 테스트 케이스 수 for _ in range(t): n, d, c = map(int, input().split()) # 컴퓨터 수, 의존성 개수, 해킹당한 컴퓨터 번호(시작점) graph = [[] for _ in range(n+1)] # 그래프 초기화 for _ in range(d): a, b, s = map(int, input().split()) # 컴퓨터a, 컴퓨터b, 감염되는데 걸리는 시간 graph[b].append([a, s]) # 의존하는 쪽으로 갈수있으니 b에 추가 time = [1e9] ..
""" 31120KB40ms """ # s를 t로 바꾸는게 가능한지. # 문자열의 뒤에 a 추가하기 # 문자열의 뒤에 b를 추가하고 뒤집기 # t에서 s만큼 될때까지 연산해서 s가 나오는지? s = list(input()) t = list(input()) def text_check(t): if t == s: # t와 s가 같다면 1 출력하고 종료 print(1) exit(0) if len(t) == 0: # t가 모두 삭제될 경우 return 0 if t[-1] == 'A': # A는 문자열의 뒤에 추가. -1에서 찾음 text_check(t[:-1]) if t[0] == 'B': # B는 문자열 뒤에 추가 + 뒤집기 = 앞에 와있음. 0에서 찾고 제거 후 뒤집기 text_check(t[1:][::-1]..
""" 53516KB276ms """ # 최소 여물. 다익스트라 from heapq import * import sys input = sys.stdin.readline n, m = map(int, input().split()) graph = [[] for _ in range(n+1)] for _ in range(m): a, b, c = map(int, input().split()) graph[a].append([b, c]) graph[b].append([a, c]) cost = [1e9 for _ in range(n + 1)] heap = [] cost[1] = 0 heappush(heap, [0, 1]) while heap: cur_cost, cur_node = heappop(heap) if cost[..
""" 31120KB44ms """ # 최종후보를 오름차순으로 출력 # 추천 시작 전에는 사진틀이 비어있음 # 추천하면 사진틀에 올라감 # 비어있는 사진틀이 없는 경우 - 추천횟수가 가장 작은거 삭제하고 추가함. 추천 횟수가 적은 학생이 두명 이상이면 오래된거 삭제함 # 게시된게 추천받으면 추천횟수간 증가 # 게시가 삭제되면 추천횟수는 초기화됨 import sys input = sys.stdin.readline n = int(input()) r = int(input()) student = list(map(int, input().split())) nominee = {} for i in student: # 빈 사진틀이 있을때 - 딕셔너리에 후보 : 추천수 로 추가 if len(nominee) < n: if ..
# 17점 # 제일 왼쪽(0)에서 제일 오른쪽(n-1)까지 가는 최소 비용. # 현재 가격이 다음 가격보다 비싸거나 같다면 - 필요한만큼만 사기 # 현재 가격이 다음 가격보다 싸다면 - 다음 길이까지 구매하기 n = int(input()) road = list(map(int, input().split())) oil = list(map(int, input().split())) cost = 0 for i in range(len(oil)-1): if i != 0 and oil[i-1] = oil[i+1]: cost += oil[i] * road[i] elif oil[i] < oil[i+1]: cost += (oil[i] * road[i]) + (oil[i]..
· study/TIL
DP (Dynamic Programming) 하나의 문제를 여러개의 작은 문제로 나누어 해결하고 그 결과를 종합하여 정답을 구하는 알고리즘. 접근 방법 상향식 접근법(Bottom-Up) 작은 하위문제부터 시작해 큰 문제까지 차근차근 해결하는 방식 작은 문제들을 해결하고 결과를 저장한 후 그 결과를 이용해 보다 큰 문제를 해결함 보통 반복문을 이용해 구현함 하향식 접근법(Top-Down) 큰 문제를 작은 하위 문제들로 재귀적으로 나누어 해결하는 방식 재귀적인 호출을 이용해 작은 문제를 해결하고 그 결과를 이용해 큰 문제를 해결함 일반적으로 메모이제이션(Memoization, 결과를 구하고 나중에 다시 활용함) 기법을 사용해 중복 계산을 피함 예시) 피보나치 1 재귀로 구현 def fibonacci(n): ..
· study/TIL
그리디(Greedy) 각 단계에서 최선의 선택을 하는 방식으로 문제를 해결하는 알고리즘. 각 단계에서 최선의 선택(부분 문제의 최적해)를 모두 합쳤을때 전체에서의 최선의 선택과 다르다면 풀이가 성립하지 않는다. 따라서 그리디하게 문제를 풀때는 풀이의 정당성을 증명해야한다. 보통 최적화 문제에서 사용된다. 특징 최적 부분 구조 (Optimal Substructure) 큰 문제를 작은 문제로 쪼개어 해결할 수 있는 문제 구조를 가진다. 그리디 알고리즘은 각 단계에서 부분 문제의 최적해를 찾는 방법으로 전체 문제의 최적해를 찾는다. 탐욕적 선택 속성 (Greedy Choice Property) 각 단계에서 최적해를 찾기 위해 가장 최선의 선택을 한다. 이 선택이 나중에 문제의 해결에 대한 최적해에 영향을 미치..
해리Harry
Harrylog