[알고리즘] 자료구조 총정리 : 배열, 연결 리스트, 스택, 큐, 트리, 그래프
·
Algorithm/이론
자료구조란 자료를 효율적으로 사용하기 위해 자료를 조직화한 것이다.구조 정의, 삽입 동작, 삭제 동작 등을 정의해야 한다. 자료구조의 종류선형 자료구조배열(array), 연결 리스트(linked list)스택(stack), 큐(queue)비선형 자료구조트리(tree), 그래프(graph) 순차 자료구조자료들의 논리적 순서와 물리적 순서가 일치한다.배열('같은 자료형'을 가진 자료들을 메모리에 연속적으로 저장하는 방식)의 삽입과 삭제를 사용한다. 연결 자료구조배열이 가지는 메모리 사용의 비효율성을 해결한다.연결 리스트(다음 자료의 위치를 자료가 가지고 있는 방식, 노드와 링크로 구성)를 사용한다.typedef struct _node { int key; // 정수형 key 필드를 사용하여 자료 관리 ..
알고리즘을 배우기 위한 준비
·
Algorithm/이론
알고리즘이란 문제를 해결하는 단계적 절차 또는 방법이다. 알고리즘에는 입력이 주어지고, 알고리즘은 수행한 결과인 해(또는 답)를 출력한다. 알고리즘의 특성 정확성: 알고리즘은 주어진 입력에 대해 올바른 해를 주어야 한다. (안정적 정확성) 수행성: 알고리즘의 각 단계는 컴퓨터에서 수행 가능하여야 한다. (잘 정의된 동작 명령) 유한성: 알고리즘은 일정한 시간 내에 종료되어야 한다. 효율성: 알고리즘은 효율적일수록 그 가치가 높아진다. 최초의 알고리즘 가장 오래된 알고리즘은 기원전 300년경 유클리드(Euclid)의 최대공약수 알고리즘이다. 유클리드 호제법이라고도 부른다. - 유클리드의 최대공약수 알고리즘 2개의 자연수의 최대공약수는 큰 수에서 작은 수를 뺀 수와 작은 수와의 최대공약수와 같다는 성질을 이..
알고리즘 들어가기
·
Algorithm/이론
알고리즘이란 문제를 해결하기 위한 단계적인 절차를 의미한다. 주어진 문제에 여러 종류의 알고리즘이 있을 수 있으나, 보다 효율적인 알고리즘을 고안하는 것이 매우 중요하다. 1. 최대 숫자 찾기 mission: 다음 카드들 중에 가장 큰 숫자를 찾는다. - 순차 탐색 (Sequential Search) 카드를 한 장씩 차례대로 읽어 가며 찾는 방법이다. 2. 임의의 숫자 찾기 mission: 다음 카드들 중에 임의의 숫자(ex. 85)를 찾는다. - 순차 탐색 (Sequential Search) - 이진 탐색 (Binary Search) 오름차순으로 정렬된 데이터를 반으로 나누고, 나누어진 반을 다시 반으로 나누고, 이 과정을 반복하여 원하는 데이터를 찾는 탐색 알고리즘이다. 3. 동전 거스름돈 missi..
[Python] 백준/BOJ 2744번: 대소문자 바꾸기
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/2744 문제 영어 소문자와 대문자로 이루어진 단어를 입력받은 뒤, 대문자는 소문자로, 소문자는 대문자로 바꾸어 출력하는 프로그램을 작성하시오. 풀이 입력받은 단어를 문자열 함수 swapcase()를 사용해 대문자는 소문자로, 소문자는 대문자로 변환해서 출력한다. swapcase()는 대문자는 소문자로, 소문자는 대문자로 각각 변환해주는 문자열 함수이다. 코드 print(input().swapcase())
[Python] 백준/BOJ 1373번: 2진수 8진수
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/1373 문제 2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오. 풀이 먼저 숫자를 입력받는다. int() 함수의 default는 10진수이기 때문에 진법을 2로 지정해준다. 문자열 함수 oct()를 사용해 주어진 2진수를 8진수로 변환한다. 8진수는 숫자 앞에 0o가 붙는다. 예제 출력은 0o 없이 숫자만 출력했으므로 슬라이싱해서 숫자만 출력해준다. 코드 print(oct(int(input(), 2))[2:])
[Python] 백준/BOJ 2588번: 곱셈
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/2588 문제 (세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다. (1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오. 풀이 (3) a * (b % 10) 문제의 주어진 식에서 472X5 계산을 한 자리이다. 472는 a이고 5는 385를 10으로 나누었을 때의 나머지이므로 b%10으로 표현한다. 따라서 (3)은 a*(b%10)이 된다. (4) a * ((b // 10) % 10) 문제의 주어진 식에서 472X8 계산을 한 자리이다. 472는 a이다. 8은 먼저, 385를 10으로 나누었을 때 몫은 38이다. 38을 10으로 나..
[Python] 백준/BOJ 10869번: 사칙연산
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/10869 문제 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 풀이 a와 b를 int형으로 입력받는다. 사칙연산 식을 출력한다. 문제에서 주어진 A/B(몫)의 경우, 나머지 없이 몫만 출력해야 하므로 버림나눗셈을 이용한다. int(a/b)라고 표현해도 무관하다. 코드 a, b = map(int, input().split()) print(a+b) print(a-b) print(a*b) print(a//b) print(a%b)
[Python] 백준/BOJ 2754번: 학점계산
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/2754 문제 어떤 사람의 C언어 성적이 주어졌을 때, 평점은 몇 점인지 출력하는 프로그램을 작성하시오. A+: 4.3, A0: 4.0, A-: 3.7 B+: 3.3, B0: 3.0, B-: 2.7 C+: 2.3, C0: 2.0, C-: 1.7 D+: 1.3, D0: 1.0, D-: 0.7 F: 0.0 풀이 딕셔너리를 이용해 풀었다. 딕셔너리는 사전처럼 2개의 요소를 하나로 묶어 표현한 자료형이다. 코드 dic = {'A+':'4.3', 'A0':'4.0', 'A-':'3.7', 'B+':'3.3', 'B0':'3.0', 'B-':'2.7', 'C+':'2.3', 'C0':'2.0', 'C-':'1.7', 'D+':'1.3', 'D0':..