본문 바로가기

분류 전체보기502

2. Array(배열) - Bubble Sort(버블정렬) 1. 버블정렬 - 가장 직관적이지만, 사용을 추천하지 않는 정렬 알고리즘 a) 버블이란? - 배열의 2개 요소를 묶은 단위를 의미한다. b) 버블 스왑(swap)이란? - 버블로 묶인 배열 요소 2개의 index 값을 서로 바꾸는 것을 말한다. array[1], array[2] = array[2], array[1] 2. 버블정렬의 동작방식 - 버블정렬은 배열의 요소를 정리하는 정렬 알고리즘 중 하나다. - 배열의 요소를 2개씩 비교해서, 서로의 위치(index)를 교환(swap)하여 정리하는 방식이다. a) 예제를 통한 버블정렬의 이해 - 위의 예제는 오름차순으로 배열의 요소를 정리하는 버블정렬이다. - 요소 2개씩 비교를 진행한다. - 요소의 크기를 비교하여 작은 수를 앞으로, 큰수를 뒤로 가도록 위치.. 2021. 8. 21.
1. Array(배열) - 기본 개념 1. Array(배열) - 배열은 가장 기본적이면서, 많이 사용되는 자료구조다. a) 배열의 형태 - 배열은 동일한 자료형을 가진 데이터의 연속적인 나열로 이루어져 있다. - 배열의 요소는 연속적인 메모리 주소를 할당받는다. - 배열은 index를 사용하여 해당 요소의 메모리에 직접 접근이 가능하다. b) 배열은 정렬(Sorting)과 이어진다. - 정렬에는 다양한 알고리즘이 있는데, 배열을 효율적으로 사용하기 위함이다. - 대부분의 정렬 알고리즘은 O(n log n)의 시간복잡도를 갖는다. - 정렬 알고리즘은 안정적(stable)인가, 불안정적(unstable)인가로 분류된다. c) 배열은 탐색(Search)과 이어진다. - 배열을 이용한 알고리즘 문제를 풀다보면, 배열의 특정 요소를 찾는 경우가 있다.. 2021. 8. 20.
22. 컴퓨터구조 - 파이프라인과 병렬처리 0. 시작하기 전에 - 이전 포스팅까지 프로그램과 소프트웨어의 정의에 대해서 배우면서, - 프로그래밍 언어의 발전과 종류, 이를 이용한 프로그램 구조설계(아키텍처)에 대해서 배웠다. - 듀얼코어, 쿼드코어 등 하드웨어의 발전에 맞춰 하드웨어를 더욱 잘 활용하기 위해 다양한 프로그래밍 기법이 개발되었다. - 이번 포스팅에서는 기존의 순차적 프로그래밍이 발전된 형태로, - 하드웨어를 더욱 효율적으로 사용할 수 있게 만드는 병렬처리와 파이프라인에 대해서 배워보자. 1. Flynn의 컴퓨터 분류 - 컴퓨터 내부적으로 명령어와 데이터를 처리하는 흐름의 개수에 따라 분류하는 방식 - 다음과 같이 분류된다. ▶ SISD(Single Instruction Stream Single Data Stream) - 단일 사용자.. 2021. 8. 19.
Brute-Force 알고리즘(완전탐색) 1. Brute-Force 알고리즘이란? - 브루트 포스 알고리즘은 이름의 뜻 처럼, 무식하게 푸는 방법이다. - 브루트 포스 알고리즘은 모든 경우의 수를 파악하여 문제를 푸는 방법이다. 이를 완전탐색이라고 부르기도 한다. - 예를 들어, 4자리 비밀번호를 푸는 문제가 있다면 0000부터 시작해서 비밀번호가 맞을 때까지 모든 조합을 확인해보는 방법이다. 2. Brute-Force(완전탐색)을 푸는 방법 - 완전탐색 문제를 푸는 알고리즘은 다음과 같다. ▶ 순열 ▶ 백트래킹 ▶ BFS - 문제의 접근 방법에 따라 활용할 수 있는 방법이 위의 3가지로 나뉜다. 3. 완전탐색을 구현하기 전에 - 완전탐색을 구현할 때는, 다음의 요소들을 주의해야 한다. ▶ 입력과 출력의 제한을 파악하자. - 모든 경우의 수를 .. 2021. 8. 18.
21. 컴퓨터 구조 - 소프트웨어 구조 0. 시작하기 전에 - 이전 포스팅에서 프로그램과 SW의 개념에 대해서 배웠다. - 그리고 SW / 프로그램을 구성하는 프로그래밍 언어에 대해서 알아보았다. - 이번 포스팅에서는 SW가 어떤 구조를 갖는지에 대해서 배워보자. 1. SW Architecture (소프트웨어의 구조) - 구조란 무엇을 의미할까? - 구조는 어떤 결과물의 구성요소간의 관계 또는 그 관계의 형태를 의미한다. - 그렇다면 SW는 구성요소간의 어떤 관계를 형성하고 있는지 알아보자. a) SW의 구성요소 - SW는 다음과 같은 구성요소를 갖는다. ▶ 모듈 - 기능의 집합 - 특정한 작업 또는 기능을 수행하는 최소 단위의 프로그램들의 집합 ▶ 컴포넌트 - 모듈의 집합 ▶ 라이브러리 - 컴포넌트의 집합 - 이와 같은 구성요소를 어떻게 배.. 2021. 8. 17.
백준 11729 파이썬 - 하노이 탑 이동 순서 1. 문제 링크 https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 2. 나는 어떻게 생각했는가? - 문제도 이해했고, 손으로 직접 그려가면서 풀이도 해보았다. - 그러나 규칙성을 찾고, 규칙을 코드로 구현하는 능력이 많이 부족하다는 것을 다시한번 깨닫게 하였다. - 사실 해답코드를 읽고도, 저런 규칙성으로 이 문제가 풀린다는 것이 완벽하게 이해가 가지 않는다. 3. 정답 코드 n = int(input()) def hanoi(n, st.. 2021. 8. 17.
백준 2447 파이썬 - 별 찍기 10 1. 문제 링크 https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 2. 나는 어떻게 생각했는가? - 문제는 이해했지만, 풀이가 잘 이해가 안간다. - 수학적 사고력이 많이 부족하다는 것을 느끼게하는 문제 - 지금 당장 이해가 안가는 문제를 붙잡고 있으려니, 시간이 아깝다고 생각해서 패스한다. 3. 정답 코드 def draw_star(n) : global Map if n == 3 : Map[0][:3] = Map[2][:.. 2021. 8. 17.
백준 10870 파이썬 - 피보나치 5 1. 문제 링크 https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 2. 나는 어떻게 생각했는가? def fibonacci(n): if n 2021. 8. 17.
백준 10872 파이썬 - 팩토리얼 1. 문제 링크 https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 2. 나는 어떻게 생각했는가? def factorial(n): result = 1 while n > 0: result *= n n -= 1 factorial(n) return result n = int(input()) print(factorial(n)) - 내가 작성한 코드는 재귀적이다 라는 느낌이 없다. - 재귀적이기 보다는 콜백의 느낌이 가까운 것 같다. 3. 정답 코드 def factorial(n): if n == 0: return 1 else: return n * factori.. 2021. 8. 17.