본문 바로가기

알고리즘

(87)
자료 구조, Linked List 자료 구조, Linked List📌 Array 와 Linked ListArrayLinked List데이터 검색(index 접근)데이터 삽입 / 삭제(pointer접근)정적메모리동적메모리(Heap 영역)✏️ 자기 참조 구조체 // 자기 참조 구조체 // 포인터(주소)로 연결하는 데이터. 데이터 적재문제 해결? struct node { // data1, data2는 구조체에 담을 수 있는 데이터 예시 // 각각의 노드에 서로다른 유형의 여러 개 데이터를 저장할 수 있음 int data1; char data2; struct node * link; // 포인터부 }; data부와 포인터부로 나누어져 있는 노드 구조체를 만든다. 일종의 붕어빵틀! 붕어빵틀을 이용해 여러 노드들(붕어빵)을 만들 수 있다. data부..
재귀함수, 하노이의 탑 재귀함수, 하노이의 탑 📝 백준 1914번 큰 규칙은 가장 큰 원판을 시작 기둥에서 목표기둥으로 옮기는데 있다. 이는 하노이의 탑 규칙을 지키기위해 구상하다보니 생긴 원리! 규칙 1 : 한번에 하나의 원판만 움직입니다. 규칙 2 : 크기가 작은 원판 위에 큰 원판을 놓을 수 없다. 규칙 1,2를 만족하면서 원판들을 옮기기 위해서는 가장 큰 원판이 시작기둥에서 목표기둥으로 옮겨야 한다. 📝 선행작업, 후행작업 시작기둥, 중간기둥, 목표기둥을 1,2,3이라고 하면 시작기둥 + 중간기둥 + 목표기둥 = 6 이므로 중간기둥은 6-x-y로 표현할 수 있다. 최소 이동으로 원판들을 옮기려면, 1. 가장 큰 원판을 제외한 나머지 원판들이 크기 순으로 중간기둥으로 옮겨져 있어야 한다. → 이를 위해서는 가장 큰 원판을..
DFS 관련 연산 문제 DFS 관련 연산 문제 DFS def dfs(파라미터 값): if 종료조건: 출력해야할 파라미터값(없으면 생략) return # 계속 탐색 else: dfs(파라미터값) 📝 파라미터 값 현재 탐색위치 탐색 조건 탐색 후, 출력해야 하는 결과값 탐색 대상 📝 종료 조건 매우 중요한 설정! 언제까지 탐색할 껀지!! 📝 프로그래머스, 타겟넘버 https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # -------------------- dfs 풀이 ---..
백준 1260번 DFS, BFS 백준 1260번 DFS, BFS ✏️ BOJ 1260 ✏️ DFS : 하나의 노드만 몰아서 본다. 몰아서 탐색! 1. start_node를 방문, visited 배열에 방문 기록 남기기 2. start_node의 인접 노드 방문(current_node), visited배열에 방문 기록 남기기 3. 인접노드의 방문 기록이 있거나, 인접노드가 없으면 직전 노드로 돌아간다. 4. 모든 노드를 방문했다면, 더 이상 방문할 노드가 없으므로 탐색 종료 def dfs(c): # current node ans_dfs.append(c) # 방문 노드 추가 visited[c] = 1 # 방문 표시 for n in adj[c]: if not visited[n]: # 방문하지 않은 노드의 경우 dfs(n) ✏️ BFS : 여..
입출력 입출력 백준 10951 boj.kr/10951 무한반복 + Try-Except while True: try: a, b = map(int, input().split()) print(a + b) except: break 사용자 입력 sys.stdin.readline() import sys lines = sys.stdin.readlines() for line in lines: a,b = map(int, line.split()) print(a+b) 백준 10953 boj.kr/10953 import sys T = int(input()) for i in range(T): a, b = map(int, sys.stdin.readline().split(",")) print(a + b) 백준 11021번 boj.kr/1..
데일리 알고리즘 230120 데일리 알고리즘 230120 프로그래머스, 키패드 누르기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📄 나의 코드 def solution(numbers, hand): # 초기 세팅 오른쪽 3행 2열, 왼쪽 3행 0열 배치 cur_hand_R_x, cur_hand_R_y = 3, 2 cur_hand_L_x, cur_hand_L_y = 3, 0 answer = "" for num in numbers: if num == 0: num_x = 3 num_y = 1 else: num_x = (num - 1) // 3 num_y = (num - 1) % 3 mov..
데일리 알고리즘 230119 데일리 알고리즘 230119 프로그래머스, 삼총사 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📄 나의 코드 def solution(number): from itertools import combinations l = list(combinations(number, 3)) cnt = 0 for ls in l: if(sum(list(ls))==0): cnt+=1 return cnt combinations결과가 tuple이길래 sum안되는 줄 알고 list화.. 📄 공부할 만한 코드 def solution (number) : from itertools imp..
데일리 알고리즘 230118 데일리 알고리즘 230118 프로그래머스, 과일 장수 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📄 나의 코드 # score 내림차순 정렬 score.sort(reverse=True) # 몇 상자 만들 수 있는지 len(score) // m # 상자별 사과를 판매할 때 최대로 받을 수 있는 금액 answer def solution(k, m, score): answer = 0 score.sort(reverse=True) for i in range(len(score)//m): answer += min(score[m*i:m*(i+1)])*m return a..
DP, Dynaminc Programming DP, Dynaminc Programming 동적 계획법 피보나치 수열 Fibonacci numbers 모든 항은 바로 앞 두 항의 합인 수열 1, 1, 2, 3, 5, 8, ... 📄 피보나치 수열-재귀함수 input = 20 def fibo_recursion(n): if(n
데일리 알고리즘 230117 데일리 알고리즘 230117 프로그래머스, 푸드 파이트 대회 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📄 나의 코드1 def solution(food): answer = '' for i in range(0,len(food)): for j in range(food[i]//2): answer += str(i) answer += "0" for i in range(len(food)-1,0,-1): for j in range(food[i]//2): answer += str(i) return answer print("result : ", solution([1,..