전체 글

서버는 꺼지지 않아요
링크드 리스트의 구현 (Node, __init__, __str__) 링크드 리스트를 구현하기 위해선, 각각의 데이터와 다음 데이터에 대한 주소(레퍼런스)를 저장할 '노드' 객체가 필요하다. class Node: def __init__(self, data): self.data = data # 파라미터로 받은 데이터를 저장 self.next = None # 기본값은 None으로 지정 후 추후 다른 노드들과 연결 node_1 = Node(2) node_2 = Node(3) node_3 = Node(5) node_4 = Node(7) 노드 클래스를 생성 후, 데이터가 각각 2, 3, 5, 7인 네 개의 링크드 리스트 노드를 생성해주었다. node_1.next = node_2 node_2.next = node_3..
링크드 리스트는 일련의 데이터들을 연결시켜 각 데이터에 대한 접근과 추가, 삭제 및 여러 연산을 가능케하는 리스트를 말한다. 그것의 기능적 측면이 배열과 매우 유사하기 때문에 두 자료구조의 차이를 묻는 기술면접 질문들이 종종 나온다고 한다. 링크드 리스트와 배열의 차이? -> 메모리상에 데이터를 저장하는 방식이 다르다! 링크드 리스트와 배열의 가장 큰 차이점은 그 둘이 리스트 안에 담길 데이터를 메모리 상에서 어떻게 저장하는지에 있다. 배열은 데이터들을 메모리 상에 연속적으로 저장한다. 즉, 예를들면 메모리상에서 1 ~ 10까지의 영역을 맡아놓고 그 영역 내에서 데이터를 저장한다. 반면에, 링크드 리스트는 데이터를 공간적으로 붙여놓는 것이 아닌 각 데이터에 다음 데이터의 주소에 대한 정보를 갖게 함으로써..
배열은 가장 기본적인 자료구조 중 하나로, 복수의 데이터들을 목적을 위해 하나로 묶어 사용하기 위해 사용된다. 배열에는 저장된 데이터를 추가하거나 삭제하는데 자유로운 동적배열과 그렇지 않은 정적배열이 있다. 정적배열 (Static array) 일반적으로 배열이라고 하면 정적배열을 의미하는 거라고 생각하면 된다. 배열은 실제 데이터(원소)를 저장하기 전에 현재 사용중이지 않은 연속적인 메모리들을 미리 예약해두고 시작한다. 즉, 데이터 저장 전에 "어떤 데이터를 몇 개 저장할 배열을 사용할거야" 라고 배열을 먼저 선언한 후 사용한다. int numArray[4]; 위 코드는 정수형 데이터를 4개 저장할 배열을 만들겠다는 말이다. 이렇게 배열을 선언하면 정수 하나당 4바이트씩 총 16바이트만큼의 연속적인 메모..
컴퓨터가 01101010... 등 이진수만으로 이루어진 정보들(머신코드)을 기반으로 작동한다는 사실은 이미 잘 알려져있다. 하지만, 우리가 프로그래밍 언어를 통해 개발을 하는 과정에서 이러한 이진수들을 작성한 일은 아마 없을 것이며, 그렇게 하라고 해도 하지 못할 것이다. 이말은 즉, 우리의 프로그래밍 언어를 컴퓨터 머신코드로 바꾸어주는 번역기가 존재한다고 이해할 수 있다. 바로 이 번역기가 컴파일러와 인터프리터가 되시겠다. 1) 컴파일러 개발자에 의해 작성된 코드가 컴파일러로 번역되어 프로그램의 실제 사용자에게까지 도달하는 과정은 다음과 같다. 코드 작성완료(프로그래밍 언어) -> 컴파일러로 번역(머신코드) -> 실제 사용자의 컴퓨터에 다운로드(머신코드) -> 작동 컴파일러를 통해 머신코드로 번역이 완..
프로그래밍을 위해 수 많은 언어들이 사용되고 있다. 언어의 종류가 다양한 것에는 소 잡는데 소 잡는 칼을 쓰고, 닭 잡는데 닭 잡는 칼을 쓰기 위해서이다. 무엇을 개발하고자 하는지에 따라 적합한 언어가 다르다는 뜻이다. 그리고 다양한 언어를 나누는 기준 중 한 가지가 동적타이핑 정적타이핑이다. 1) 동적타이핑 (Dynamic typing) 동적타이핑은 코드를 작성하는데 있어서 컴퓨터적 구조를 생략한다. 따라서 변수를 지정할 때 해당 변수의 데이터 타입 등을 명시하지 않아도 컴퓨터가 알아서 해석하도록 냅둔다. 예컨대 파이썬에서 a = 15 라는 식으로 변수를 지정할 때 a가 숫자라고 명시 하지 않더라도 컴퓨터는 이를 스스로 숫자라 해석한다. 이러한 방식은 코드를 보다 간결하게 해주며 코드의 로직을 보다 명..
파이썬에서 반복문을 이용할 때는 상황에 맞게 while문과 for문을 이용한다. 하지만 반복문이 돌아가는 와중에, 특정 조건에서는 해당 반복문이 제어되길 바라는 상황이 있을 수 있다. 그 때 알아둬야할 것들이 continue, pass, break 이다. 1) continue continue는 특정 조건이 올때 반복문을 한 회 건너뛴다. 특정 조건 즉, i ==5 일때 한 회만 for문이 건너뛰어진 것을 확인할 수 있다. 2) pass 파이썬의 함수나 표현들이 영어 표현과 매우 비슷하다는 점에서, continue와 pass가 처음엔 약간 헷갈릴 수도 있다. 하지만 pass와 continue는 사용목적 자체가 다르다. continue의 경우 특정 조건 시 반복문을 건너뛰기 위한 것이라면, pass는 개발 ..
개발자를 지망하는 사람들이 꼭 거쳐가는 사이트가 있다. 바로 '백준'이다. 백준에서는 취업에 필요한 코딩테스트를 연습할 수 있는 수 많은 알고리즘 문제를 풀어볼 수 있다. 그리고 대게 알고리즘 문제는 주어진 상황에 맞게 특정 입력값을 받고, 알맞은 값을 출력하여야 한다. 나는 바로 여기에서 큰 문제를 겪었다. 코드를 어떻게 짜야할지는 바로 떠올랐는데, 막상 코드를 적는 페이지로 들어가니 문제에서 주는 입력값을 어떻게 받아야 하는지 몰랐다. 그 동안은 이 문제를 해결하기가 귀찮아 입력을 굳이 신경 쓸 필요 없는 다른 알고리즘 사이트들을 이용해왔는데, 본격적으로 코딩테스트를 준비하다보니 백준을 이용하지 않을 수가 없었다. 그래서 이번 기회를 통해 입력에 대한 다양한 방법들을 알아보았다. 입력 (input) ..
유튜브, SNS, 광고 등 인터넷 서비스 등에서 종종 접할 수 있는 알고리즘은 일반인들에게도 꽤 친숙한 개념이 됐다. 알고리즘이란 간단히 말해 어떠한 문제를 해결하기 위해 필요한 논리기반의 방식이라고 할 수 있는데, 실제로 우리는 일상생활 속에서도 우리도 모르게 많은 알고리즘을 만들고 수행하고 있다고 할 수 있다. 요리를 할 때, 여자친구와의 데이트 코스를 짤 때, 집안일을 할 때 우리가 정하는 나름대로의 순서와 행동의 이유가 모두 알고리즘에 기반되어 있다고 할 수 있다. 사실상 넓은 의미에서 우리가 하는 모든 행동은 우리만의 내제적인 알고리즘에 기반하여 이루어 지고 있다고 해도 과언이 아닐 것이다. 개발자에게 알고리즘이란? 개인의 행동을 결정하기 위한 알고리즘은 가끔 조금 효율적이지 못하더라도 잠시 후..
SeongOnion
조무래기 코딩