All
[자료구조] 양방향 연결 리스트
[자료구조] 양방향 연결 리스트
2020.07.12양방향 연결 리스트 머리(Head)와 꼬리(Tail)를 모두 가짐 각 노드는 앞 노드와 뒤 노드의 정보를 모두 저장 양방향 연결 리스트 삽입 과정 양방향 연결 리스트 삭제 과정 데이터를 오름차순으로 저장하는 양방향 연결 리스트 구현 typedef struct { int data; struct Node *prev; struct Node *next; } Node; Node *head, *tail; void Insert( int data ) { Node* node = (Node*)malloc(sizeof(Node)); node->data = data; Node* cur; cur = head->next; while( cur->data next; ..
[C++ 백준] 1874 스택 수열
[C++ 백준] 1874 스택 수열
2020.07.08블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. 둘째 줄부터 n개의 줄에는 수열을 이루는 1 이상 n이하의 정수가 하나씩 순서대로 주어진다. 물론 같은 정수가 두 번 나오는 일은 없다. 풀이 전략 입력한 값까지 수를 순서대로 쌓는다. (스택 사용) 스택에 들어간 마지막 숫자와 입력한 숫자가 같다면 빼낸다. 같지 않다면 불가능!! 결과를 출력 할 때 endl로 인한 시간 초과가 나서 특수문자 '\n'을 사용하였다. 소스 코드 #include #include #include using namespace std; int main() { stack s; vector result; int cnt = 1; int n; cin >> n;..
[자료구조] 단일 연결 리스트
[자료구조] 단일 연결 리스트
2020.07.08단일 연결 리스트 포인터를 이용해 단방향적으로 다음 노드를 가리킴 하나의 구조체 안에 두 개의 변수가 들어감 : data, next (다음 위치를 가리키는 pointer) 일반적으로 연결 리스트의 시작 노드를(Head)라고 하며 별도로 관리 마지막(끝) 노드의 다음 위치 값으로는 NULL을 넣음 #include #include //!data = 1; Node *node2 = (Node*)ma..
[자료구조] 연결 리스트
[자료구조] 연결 리스트
2020.07.08연결 리스트의 필요성 일반적으로 배열을 사용하여 데이터를 순차적으로 저장하고, 나열할 수 있다. 하지만 배열을 사용하는 경우 메모리 공간이 불필요하게 낭비될 수 있음 배열 기반의 리스트 데이터를 순차적으로 저장하고 처리할 때는 배열 기반의 리스트를 이용 #include #define INF 10000 int arr[INF]; int count = 0; void addBack(int data) { arr[count] = data; count++; } //!= 1; i--) { arr[i] = arr[i-1]; } arr[0] ..
[자료구조] 자료구조의 개요
[자료구조] 자료구조의 개요
2020.06.27자료구조란? 대량의 데이터를 효과적으로 저장, 처리하는 방법 기본적인 자료구조 선형구조 배열 연결 리스트 스택 큐 비선형 구조 트리 그래프 알고리즘이란? 어떤 문제를 풀기 위한 절차, 방법 자료구조와 알고리즘 서로 필요충분조건이다. 효율적인 자료구조 설계를 위해서는 알고리즘 지식이 필요 ↔ 효율적인 알고리즘을 작성하기 위해서는 문제 상황에 맞는 적절한 자료구조 사용해야 함 프로그램의 성능 측정 방법론 시간 복잡도(Time Complexity) : 알고리즘에 사용되는 연산 횟수를 의미 공간 복잡도(Space Complexity) : 알고리즘에 사용되는 메모리 양 수행 시간 최상 : 오메가 표기법 (Big-Ω Notation) 평균 : 세타 표기법 (Big-θ Notation) 최악 : 빅오 표기법 (Big..
[C++ 백준] 11650 좌표 정렬하기
[C++ 백준] 11650 좌표 정렬하기
2020.06.25블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 풀이 전략 x, y 좌표의 맵핑 정렬 기준 1. x좌표 정렬 2. (x좌표 동일 시) y좌표 정렬 10814번 문제와 유사하다. 하지만 이번엔 multimap이 아닌 vector의 타입으로 pair를 사용하고, sort를 커스텀해서 풀어보았다. 소스 코드 #include #include #include using namespace std; bool compare( pair a, pair b ) {..
[C++ 백준] 10814 나이순 정렬
[C++ 백준] 10814 나이순 정렬
2020.06.25블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다. 문제 설명 첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다. 풀이 전략 나이와 이름의 맵핑을 중점으로 생각하였다. 키로 사용한 나이가 중복될 수 있으므로 map이 아닌 여러 키를 가질 수 있는 multimap을 사용하였다. 소스 코드 #include #include #include using namespace std; int main() { multimap..
[C#] String.Format 표준 숫자 서식 문자열
[C#] String.Format 표준 숫자 서식 문자열
2020.06.20소수점 밑에는 필요 없거나 특정 소수점까지 표현 할 때, string str = string.Format( "{0:f0}", 12.3456 ); // 결과 : 12 string str = string.Format( "{0:f1}", 12.3456 ); // 결과 : 12.3 string str = string.Format( "{0:f2}", 12.3456 ); // 결과 : 12.34 필요한 자리수 지정 시, 수 앞에 00 채울 수 있다. string str = string.Format( "{0:D2}", 5 ); // 결과 : 05 string str = string.Format( "{0:D3}", 5 ); // 결과 : 005 string str = string.Format( "{0:D4}", 5 )..
[C++ 백준] 1546 평균
[C++ 백준] 1546 평균
2020.03.23문제 설명 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다. 최대값 M을 골라 모든 점수를 점수/M*100로 변경 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답 풀이 과정 N값 입력 후 N값에 맞는 double형 변수 및 배열 선언 공식을 사용하여 평균값 구하기 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답 이라는 조건이 있으므로 자료형에 주의해야한다. 소스 코드 #include using namespace std; int main() { int count = 0; double max, sum = 0; c..
[C++ 백준] 3052 나머지
[C++ 백준] 3052 나머지
2020.03.21문제 설명 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오. 첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다. 풀이 과정 2577번과 유사한 문제 42로 나누므로 배열을 42만큼 할당한다. 해당 나머지 값이 0 이라면 카운트를 증가 시켜주고, 해당 인덱스 값을 후위연산으로 증가 시켜준다. 해당 인덱스가 0이 아니라면 카운트가 증가되지 않는다. 소스 코드 #include using namespace std..
[C++ 백준] 2577 숫자의 개수
[C++ 백준] 2577 숫자의 개수
2020.03.18문제 설명 세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오. 예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다. 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. 풀이 과정 세자리수 자연수 abc를 했을 때 자리 수를 생각 해보자. 999를 1000이라 생각하면 ( 10^3 ) * 3 = 10^9이다. 이는 2^10 == 10^3으로 볼 수..
[C++ 백준] 10039 평균 점수
[C++ 백준] 10039 평균 점수
2020.03.18문제 설명 입력은 총 5줄로 이루어져 있고, 원섭이의 점수, 세희의 점수, 상근이의 점수, 숭이의 점수, 강수의 점수가 순서대로 주어진다. 점수는 모두 0점 이상, 100점 이하인 5의 배수이다. 따라서, 평균 점수는 항상 정수이다. 40점 미만일 경우 항상 40점을 받게 된다. 풀이 과정 5개의 값을 입력받아 총합을 구하고 그 총합으로 평균값을 구한다. 40점 미만일 경우 40점 소스 코드 #include using namespace std; int main() { int a = 0; int sum =0; for( int i =0 ;i> a; if( a < 40 ) a = 40; sum += a; } cout