[자료구조] 큐(Queue)
·
자료구조&알고리즘/자료구조
정의한쪽 끝에서 데이터를 넣고 다른 한쪽 끝에서 데이터를 뺄 수 있는 자료구조 특징먼저 들어온 데이터가 가장 먼저 처리되는 FIFO(선입선출) 구조이다.요소를 추가하거나 제거하는 데 O(1)의 시간이 걸린다.무조건 맨 뒤에 요소를 넣고 맨 앞에서 빼기 때문에맨 앞(또는 맨 뒤)의 요소를 확인하는 데 O(1)의 시간이 걸린다.원칙적으로 맨 앞(또는 맨 뒤)의 요소만 확인이 가능하다.
[자료구조] 스택(Stack)
·
자료구조&알고리즘/자료구조
정의한쪽 끝에서만 데이터를 넣고 뺄 수 있는 자료구조 특징먼저 들어온 데이터가 가장 늦게 나갈 수 있는 FILO(선입후출) 구조이다.요소를 추가하거나 제거하는 데 O(1)의 시간이 걸린다.무조건 맨 뒤에서 요소를 넣고 빼야 하기 때문에맨 뒤(최상단)의 요소를 확인하는 데 O(1)의 시간이 걸린다.원칙적으로 맨 뒤의 요소만 확인이 가능하다.다만, 배열로 스택을 구현하면 스택 중간의 원소도 확인이 가능하게 구현할 수 있다.
[자료구조] 연결 리스트(Linked List)
·
자료구조&알고리즘/자료구조
정의메모리의 불연속적인 위치에 각각의 데이터와 함께 다음 데이터의 주소를 저장하는 자료구조 연결 리스트에는 단순하게 하나의 노드에 데이터와 함께 다음 데이터의 주소만 포함하는 단일 연결 리스트, 다음 데이터의 주소와 이전 데이터의 주소까지 포함하는 이중 연결 리스트, 그리고 리스트 끝과 처음이 연결되어 있는 원형 연결 리스트가 있다. 특징임의의 위치에 있는 노드의 데이터를 확인/변경하는 데 O(N)의 시간이 걸린다처음 노드에서부터 확인/변경할 노드까지 순차적으로 접근해야 한다임의의 위치에 노드를 추가 / 제거하는 데 O(1)의 시간이 걸린다단, 임의의 위치에 대한 주소를 알고 있어야 한다 (해당 위치 주소를 모르면 처음 노드부터 O(N)의 시간으로 접근해야 함)단순히 노드가 가리키는 다음 주소(또는 이전..
[자료구조] 배열(Array)
·
자료구조&알고리즘/자료구조
정의메모리에 데이터들을 연속적으로 배치한 자료구조 특징임의의 위치에 있는 데이터를 확인/변경하는 데 O(1)의 시간이 걸린다배열 끝에 데이터를 추가 / 배열 끝의 데이터를 삭제하는 데 O(1)의 시간이 걸린다임의의 위치에 데이터를 추가 / 삭제하는 데 O(N)의 시간이 걸린다해당 위치 이후의 데이터들을 전부 한 칸씩 밀어내거나, 당겨와야 한다추가로 소모되는 메모리가 거의 없다캐시 적중률이 높다데이터들이 연속적으로 배치되어 있어 참조 지역성(공간적 지역성)을 잘 활용할 수 있다메모리에 연속적으로 배치해야 하기 때문에 할당에 제약이 있다
[백준/파이썬] 9079번: 동전 게임 핵심 정리
·
자료구조&알고리즘/알고리즘
문제 보기 : https://www.acmicpc.net/problem/9079 동전 게임 문제의 핵심 아이디어3 x 3 보드의 각 칸에 동전들이 놓여져 있는 상태를 받은 다음 특정 행, 열 또는 대각선의 칸을 뒤집어 모든 칸의 동전을 앞면 혹은 뒷면으로 만들어야 합니다. 이 문제를 해결하는 단순한 방법은 그저 계속 뒤집어서 모든 면을 앞면(또는 뒷면)으로 만드는 것인데요. 이때 한 상태에서 뒤집는 경우의 수는 총 8가지가 나옵니다.즉, 각 칸을 0~8 까지로 정의했을 때 한 행을 뒤집는 경우 - (0,1,2),(3,4,5),(6,7,8), 한 열을 뒤집는 경우 - (0,3,6), (1,4,7), (2,5,8), 한 대각선을 뒤집는 경우 - (0,4,8), (2,4,6) 8가지 경우의 수가 존재합니다. ..
[백준/파이썬] 1967번: 트리의 지름 핵심 정리
·
자료구조&알고리즘/알고리즘
문제 보기 : https://www.acmicpc.net/problem/1967 트리의 지름 문제의 핵심 아이디어사이클이 없는 무방향 그래프인 트리가 존재하고, 이 때 어떤 두 노드를 선택해도 둘 사이의 경로는 오직 하나만 존재하는데요. 이 때 임의의 두 노드를 선택해 양쪽으로 당길 때 가장 길게 늘어나는 경우, 이 두 노드 사이 경로의 길이를 '트리의 지름'이라고 합니다. 즉 임의의 두 노드 간의 가장 긴 경로 합을 구하는 것이 이 문제의 요구사항입니다. 그러고 나서 문제는 트리의 지름을 이루는 두 노드와 그 안에 있는 나머지 노드들로 이루어진 원 형태의 그림을 보여주는데요, 이 그림이 바로 문제를 푸는 핵심이라고 할 수 있습니다.  그림을 보면 트리의 모든 노드는 이 원 안에 위치합니다. 다시말해 어..
[프로그래머스/파이썬] 실패율 풀이
·
자료구조&알고리즘/알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 분석하기(1) 주어진 입력N : 전체 스테이지 개수stages : 게임 이용자가 멈춰있는 스테이지 배열(2) 주어진 조건N은 1~500의 자연수stages의 length는 1~200,000각 stage 는 1~N+1의 자연수자연수는 현재 도전중인 스테이지. 즉 이전 스테이지까지 다 깼음을 의미예를 들어 N+1은 마지막 스테이지(N)까지 클리어한 사용자 (3) 구하는 것 : 각 스테이지의 실패율(해당 스테이지에 머무르고 있는 이용자 수 / ..
알고리즘 문제를 잘 푸는 방법
·
자료구조&알고리즘/알고리즘
알고리즘 문제를 잘 푸는 방법이 따로 있을까?알고리즘 문제를 어떻게든 빨리 풀어보려고 요구 사항을 대충 슥 읽고 코딩에 들어가본 적이 있으신가요? 그 결과는 어떠셨나요?정말로 그렇게 해서 성과를 거둔 상황보다는, 내가 짠 알고리즘에 대해 스스로도 이해하지 못한 채 코드로 옮기다 중간에 턱 막히거나 어찌저찌 완성하더라도 핵심 요구 사항을 빼먹는 경우가 대부분일 것이라고 생각합니다. 그러고 나면 왜 안되는 거지? 머리를 싸매다가 정답을 보고 여기 고치고 저기 고치고 해서 찜찜하게 마무리되고 맙니다. 실제 제가 겪었던 경험을 토대로 상황을 설명했지만, 이런 경험을 한 번이라도 해 본 적이 있다면 알고리즘 문제를 해결하는 데 있어 그저 마구잡이로 코딩에 들어가서는 안된다는 것에 대해 충분히 공감하실 것이라 생각..