알고리즘의 정의

컴퓨터가 계산이나 기타 문제 해결 작업을 수행할 때 따라야 하는 프로세스 또는 일련의 규칙

문제 풀이에 필요한 계산 절차 또는 처리 과정의 순서를 뜻함

 

알고리즘 문제는 답을 찾는 것도 중요하지만 효율적인 방식으로 푸는 것도 중요하다.

문제의 효율을 따질때는 보통 시간복잡도와 공간복잡도를 고려한다.

 

공간복잡도

 

공간 복잡도란 프로그램 실행과 완료에 얼마나 많은 공간(메모리)가 필요한지를 나타낸다.

알고리즘을 실행시키기 위해 필요한 공간(space)는 두 가지로 나눌 수 있다.

  1. 알고리즘과 무관한 공간, 즉 고정 공간
    • 코드가 저장되는 공간, 알고리즘 실행을 위해 시스템이 필요로 하는 공간 등
  2. 알고리즘과 밀접한 공간, 즉 가변 공간
    • 문제를 해결하기 위해 알고리즘이 필요로 하는 공간.
    • 변수를 저장하는 공간, 순환 프로그램일 경우 순환 스택(recursion stack) 등

 

시간복잡도

시간복잡도란 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼마만큼 걸리는지를 나타낸다.

그리고 시간복잡도는 여러가지 표기법이 있지만 주로 Big-O 표기법을 통해 표현한다.

 

  • Big-O(빅-오) ⇒ 상한 점근
  • Big-Ω(빅-오메가) ⇒ 하한 점근
  • Big-θ(빅-세타) ⇒ 그 둘의 평균
  • 위 세 가지 표기법은 시간 복잡도를 각각 최악, 최선, 중간(평균)의 경우에 대하여 나타내는 방법이다.

한마디로 Big-O 표기법은 최악의 상황을 가정하여 "최대 이정도 시간까지 걸릴 수 있다"고 하는 것이다.

기본적으로 최악의 상황을 바라지않고 시간복잡도를 계산하는 것보다

최악의 상황을 대비하여 알고리즘을 구현하는 것이 바람직한 것 같다.

 

Big-O 표기법의 종류

 

O(1)

  • O(1)는 일정한 복잡도(constant complexity)라고 하며, 입력값이 증가하더라도 시간이 늘어나지 않는다.

O(n)

  • O(n)은 선형 복잡도(linear complexity)라고 부르며, 입력값이 증가함에 따라 시간 또한 같은 비율로 증가하는 것을 의미한다.

O(log n)

  • O(log n)은 로그 복잡도(logarithmic complexity)라고 부르며, Big-O표기법중 O(1) 다음으로 빠른 시간 복잡도를 가진다.

O(n^2)

  • O(n^2)은 2차 복잡도(quadratic complexity)라고 부르며, 입력값이 증가함에 따라 시간이 n의 제곱수의 비율로 증가하는 것을 의미한다.
  1.  

O(2n)

  • O(2n)은 기하급수적 복잡도(exponential complexity)라고 부르며, Big-O 표기법 중 가장 느린 시간 복잡도를 가진다.

 

 

오른쪽으로 갈수록 성능이 나빠진다 다시말해 시간복잡도가 좋지않다

 

시간복잡도를 시각화한 그래프와 자료구조, 정렬알고리즘에 따른 시간복잡도가 정리된 표도 있으니 참고하면 좋을 것 같다.

각 Big-O의 시간복잡도를 시각화한 그래프

 

 

자료구조의 접근,검색,추가,삭제 등의 과정의 시간복잡도를 정리해놓은 표

 

 

정렬 알고리즘의 시간복잡도

 

 

시간 복잡도 vs 공간 복잡도

시간 복잡도는 얼마나 빠르게 실행되는지, 공간 복잡도는 얼마나 많은 자원(메모리 공간)이 필요한지를 판단한다.

시간 복잡도와 공간 복잡도는 반비례하는 경향이 있어, 보통 알고리즘의 성능을 판단할 때는 시간 복잡도를 위주로 판단한다.

하지만 많은 데이터를 다루는 경우 공간 복잡도가 커지게 되고 프로그램이 메모리에 올라가지 않아 실행할 수 없게 될 수도 있다.
따라서 알고리즘 작성 시 공간 복잡도도 어느 정도 신경 써서 작성하는 것이 좋다.

 

참고자료

[알고리즘] Time Complexity (시간 복잡도)

복잡도(Complexity): 시간 복잡도와 공간 복잡도, 그리고 빅오(Big-O) 표기법

'알고리즘공부' 카테고리의 다른 글

[자료구조] B+ tree  (0) 2025.01.17
[LIST] LinkedList 구현해보기  (0) 2025.01.16
[Stack] Stack 구현해보기  (0) 2025.01.16
[자료구조] 스택(Stack)  (0) 2024.11.28
[자료구조] 큐(Queue)  (0) 2024.11.28

1. VMware 설치

Linux는 윈도우같은 운영체제의 일종이다. 

따라서 윈도우환경에서 Linux를 사용하고 싶다면 가상머신을 이용해야한다.

가상머신은 기존 컴퓨터의 자원을 조금씩 떼서 하나의 가상컴퓨터를 만들어서 사용하는데,

그냥 메모리, cpu, 코어 등을 십시일반해서 미니컴퓨터를 만든다 생각하면 이해가 쉬운것 같다.

 

여기서는 개인용으로 사용하면 무료인 VMware Workstation Pro for PC 를 설치할 것이다.

 

VMware Workstation Pro 다운로드

 

오른쪽 아래 DOWNLOAD NOW를 누르고 BROADCOM에 회원가입을 한다.

 

My Downloads 로 들어가서 workstation을 검색하고 VMware Workstation Pro 17.0 for Windows 의 원하는 버전을 다운받으면 된다.

 

 

 

2. Ubuntu 설치

Ubuntu 24.04.1 LTS 

 

VMware를 성공적으로 설치했다면 위 링크로 들어가서 24.04.1 LTS 버전을 다운받아야한다.

정상적으로 다운받았으면 ubuntu-24.04.1-live-server-amd64.iso 파일이 생겼을 것이다.

 

 

Create a New Virtual Machine을 누르고 custom으로 할 정도면 이 글을 안볼것같으니 Typical로 하는것을 추천드린다.

 

 

 

 

 

다운받은 iso 파일을 선택하고 가상머신에 원하는 이름을 설정해준다.

 

 

 

 

마지막으로 가상머신의 사양을 설정해주면 되는데 기본 HDD 20GB, RAM 4GB, 2 CPU cores가 설정되어있다.

가상머신을 많이 쓸거면 메모리랑 코어를 조금 줄여주는게 좋다.

다 설정하고 Finish를 누르면된다.

드디어 가상머신 하나를 생성했다!

 

다음은 이 가상머신에 Linux 기반운영체제인 Ubuntu를 깔아야한다...!

*주의 여기서부턴 마우스가 안되니까 키보드로 조작해야한다 

 

밑에 뜨는건 신경쓸 필요없고 Try or Install Ubuntu Server을 선택하면 된다.

 

 

English 선택해주고

 

계속 Done 누르며 진행해주면된다.

 

 

첫번째 세번째 칸에는 사용할 ID를 입력하고 

두번째 칸에는 server의 이름을 입력하고

마지막으로 비밀번호를 두번 입력해주면 된다.

 

이어서 따로 설정 건드리지 않고 Done을 눌러주며 설치를 진행해주면 된다.

 

 

설치가 완료되면 Reboot now를 누르면 Ubuntu 설치가 끝난다!

Ubuntu가 다시 시작되면 로그인하라고 뜨는데 아까 입력했던 ID랑 password를 입력하면 된다.

password는 따로 *로 치환되서 나오진 않고 아무것도 안 보이지만 입력은 되고 있는거니까 그냥 하면된다.

 

끝!

 

 

 

 

 

 

'Linux' 카테고리의 다른 글

[Linux] 가상머신의 IP 설정  (0) 2024.11.27
[Linux] 기본 명령어 정리  (0) 2024.11.26

20일 개강으로 시작한 한화 BEYOND SWCAMP가 어느새 1주 차가 되었다...!

첫날부터 지하철을 잘못 타서 지각을 해버렸지만ㅠㅠ

그래도 소요시간과 경로를 확실히 알았으니 앞으로는 늦지 않을 수 있을 것 같다.

 

 

 

1주 차 수업을 들어봤을 때 느꼈던 건 역시 진도가 정말 빠르다는 것이었다.

하긴 대학에서 3-4개월 동안 배우는 강의 하나를 여기선

챕터 하나로 진행하니 어쩔 수 없는 것 같긴 하다. 

그래도 아직까진 초반이라 그런지 따라갈만하다.

옛날에 배웠던 것도 생각나고...

 

 

 

 

강사님은 심준보강사님이었는데, 설명을 너무 깔끔하게 잘해주시고

모르는 것도 친절하게 알려주셔서 좋았다. 

그리고 뭔가 코딩을 잘하고 좋아하는 친구가 있는데

그 친구와 강사님이 외모랑 성격이 굉장히 닮아서 내적친밀감이 들었다..ㅎ

심지어 게임 좋아해서 코딩까지 섭렵한 것까지 똑같아서 당황;; 관상이란 게 있는 건가;

 

 

 

하여튼 강의 얘기로 돌아가보면

1주 차에 배운 건 앞으로의 진행방향, Linux, 네트워크통신 등을 배웠다.

가장 중요하게 기억할 거!!

서버 : 서비스를 제공하는 프로그램

클라이언트 : 서비스를 이용하는 프로그램

 

요건 바탕화면 설정해 놓으라고 할 정도로 아주 중요한 개념이라고 했다 기억하자..!

배운 건 다른 카테고리를 만들어서 자세히 정리해 볼 계획이다.

 

 

 

그리고 필요한 수강생에게는 노트북 대여도 해주고 공부 관련 책도 빌려준다.

강의 끝나고도 22시까지 개방해서 원하면 남아서 공부하는 것도 장점인 것 같다.

BEYOND SWCAMP를 신청하게 된 이유도 다른 비대면 부트캠프를 하면

공부를 안 할 것 같아서...라는 이유도 있었는데 이렇게 남아서 공부할 수 있는 게 좋았다.

매니저님들도 수강생들이 많음에도 불구하고 열정적으로 케어해주셔서 감동했다.

 

 

 

 

 

마지막으로 코딩테스트 일정도 올라왔길래

누가 스터디 모집 안 하나... 눈치 보고 있었는데 올라오지 않아서... 내가 모집했다... 

극 I로써 쉽지않은 결정이었는데 목마른 사람이 우물 파는 거니까.. 

나름 진행계획도 짜고 다음 주 월요일부터 진행하기로 했다. 다들 열심히 했으면 좋겠다..!

겨우 1주 차 할만하다고 방심하지 말고 앞으로 남은 일정도 열심히 해보자~!

 

+ Recent posts