기본 콘텐츠로 건너뛰기

백준알고리즘 10845번, 큐 풀이

큐를 구현하는 문제이다. push,pop,empty,size,front,back 함수를 구현해야 한다. 배열을 이용해 구현하였다.  고려해야 할 것은 앞과 끝을 가르키는 위치를 갖고 있어야 된다는 정도이다. 정해진 배열의 크기에서 큐가 원형으로 자라나고 줄어들게 만들었다. #include <stdio.h> #include <string.h> #define MAX_QUEUE_SIZE 100000 using namespace std; class Queue { private: unsigned int first; unsigned int last; unsigned int size; int queue[MAX_QUEUE_SIZE]; public: Queue() { first = 0; last = 0; size = 0; memset(queue, 0, sizeof queue); } int Size() { return size; } bool Empty() { return size == 0; } int Front() { if (size == 0) return -1; return queue[first]; } int Back() { if (size == 0) return -1; return queue[(last-1)%MAX_QUEUE_SIZE]; } void Push(int item) { size++; queue[last++] = item; if (last == MAX_QUEUE_SIZE) last %= MAX_QUEUE_SIZE; } int Pop() { if (size == 0) return -1; int temp = queue[first]; si...

백준알고리즘 2750번, 수 정렬하기 풀이

1~N 까지의 수를 임의로 입력 받아 정렬하는 문제 입니다. 버블, 삽입, 선택 정렬 3가지를 이용해 풀어봤습니다. 버블 정렬만 알고 있었는데 이번 기회로 삽입, 선택 정렬에 대해서 알게 되었네요. Bin-O로 표기할 경우 시간복잡도는 모두 n^2 으로 동일합니다. -------------------------------------------------------------- #include <stdio.h> #include <string.h> #define MAX_ARRAY_SIZE 1000 using namespace std; void selection(int *arr, int N) { int min; int p; int temp; for (int i = 0; i <N; i++) { min = 1000000; p = i; for (int j = i; j < N; j++) { if (arr[j] < min) { min = arr[j]; p = j; } } if (p != i) { temp = arr[p]; arr[p] = arr[i]; arr[i] = temp; } } } void insert(int *arr, int N) { int temp; for (int i = 1; i < N; i++) { for (int j = i; j >0; j--) { if (arr[j] < arr[j-1]) { temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } } } void bubble(int *arr,int N) { in...

샤를 보들레르 - 취하라

미생에 나와 대중적으로 유명해진 시지요 ㅎㅎ 우리 모두 다같이 취합시다 건배~ ---------------------------------------------------------------------- 취하라  - 샤를 보들레르 항상 취해 있어야 한다. 모든게 거기에 있다. 그것이 유일한 문제다. 당신의 어깨를 무너지게 하여 당신을 땅쪽으로 꼬부라지게 하는 가증스러운 시간의 무게를 느끼지 않기 위해서 당신은 쉴 새 없이 취해있어야 한다. 그러나 무엇에 취한다? 술이든, 시든, 덕이든 그 어느 것이든 당신 마음대로다 그러나 어쨌든 취하라. 그리고 때때로 궁궐의 계단위에서 도랑가의 초록색 풀 위에서 혹은 당신 방에서 음울한 고독 한가운데에 당신이 깨어나게 되고 취기가 감소하거나 사라져버리거든 물어보아라 바람이든 물결이든 별이든, 새든, 시계든 지나가는 모든 것 슬퍼하는 모든 것 달려가는 모든 것 노래하는 모든 것 말하는 모든 것에게 지금 몇시인가를 그러면 바람도 물결도 별도 새도 시계도 당신에게 대답할 것이다. 이제 취할 시간이다.

자바 클래스 관련 정리

문제를 풀다가 틀린 부분이나 새로 알게된 것들을 기술합니다. 시간날때 깔끔하게 정리하겠습니다. 매개변수가 없는 기본 생성자를 작성할 때, 매개변수가 있는 생성자를 사용하는 것이 재사용성이 좋다. 변수의 종류에는 인스턴스 변수, 클래스 변수, 지역변수가 있다. 생성자는 객체의 생성이 아니라 초기화의 목적이다. 초기화 블럭이 생성자보다 앞선다. 인스턴스메서드는 Heap에 할당된다. 초기화 과정에서 static 변수가 인스턴스 변수로 초기화 될 수 없다. 매개변수를 받는 생성자만 정의하고 기본생성자를 부를 경우 err를 일으킨다. 접근 지시자의 범위 순서는 public - protected(다른 패키지도 가능) - default(같은 패키지 내에만) - private이다 자바에서 final은 다시 할당 될 수 없음을 의미한다. const와 약간 다르다. 조상 타입의 인스턴스를 자손 타입으로 변환 할 수 없다. 반대는 가능 instanceof 는 인스턴스의 조상이나 구현한 인터페이스에 대해서만 true를 반환한다. 내부 클래스에서 변수는 가려지지만, 메소드는 실제 인스턴스의 메소드를 부른다. 매개변수 타입의 인터페이스로 올 수 있는 것은 null, 해당 인터페이스를 구현한 클래스 또는 그 자손 클래스이다.

자바 쓰레드 관련 정리

자바에서 쓰레드를 사용하는 건 참 쉽죠잉~. 쓰레드 관련 공부한 내용 정리합니다. 쓰레드란 ?  하나의 프로세스 안에서 실제적으로 작업을 처리하는 단위이다 main인 메솓를 실행하는 스레드가 기본적으로 존재한다. join() 메소드 : 특정한 쓰레드가 실행 된 후에 다른 쓰레드가 실행되도록 제어하는 메소드이다. join()메솓를 호출한 스레드가 끝날때까지 다른 쓰레드는 대기한다. (여담으로 이름으 join인 이유는, 예전에 프로세스를 fork=분기 해서 복사한 다음에 마칠때는 다같이 합쳐서=join해서 마친다는 의미로 해석하시면 이해하기 편합니다. 쓰레드의 우선 순위가 높으면 CPU를 더 많이 사용할 수 있다. 해야할 작업이 많은 쓰레드의 우선순위를 높여줌으로써 더 많은 작업을 하게 해준다. .setPriority() 메소드를 이용한다. 하나의 자원에 여러개의 쓰레드가 동시에 접근하지 못하도록 동기화 기능이 필요하다. 동기화는 메소드에 synchronized를 붙여서 메소드를 동기화 하는 방법과 클래스에서는 sychronized(this)와 같이 동기화 블럭을 사용하여 클래스 접근의 동기화를 해주는 두가지 방법이 있다. 동기화 기능에 더하여 제어권을 직접적으로 제어할 수 있다면 더 많은 작업을 할 수 있을것이다. 이 제어를 위한 메소드들이 wait(), notify(), notifyAll()이다. 이 메소드드들은 동기화 블럭 안에서만 사용할 수 있다. 참고로 Thread 클래스에서 제공되는 메소드가 아니라 Object 메소드에서 제공되는 메소드 이다. notify(), notifyAll()을 해주면 wait하던 쓰레드가 바로 Running이 되는건 아니고 Runnable상태가 되는 것이다. Thread 클래스에서 내가 몰랐던 메소드들 void interrupt() : 쓰레드에 인터럽트 생성 void sleep(long millis) : 밀리초 동안 실행 정지 void yield(...

네트워크 정리

중요하거나 모르는 내용 위주로 정리합니다. 1. 개요 네트워킹 기술을 경로로 구분하면, 서킷 스위칭과 패킷 스위칭을 나뉜다. 서킷 스위칭으로 경로를 모두 정하여 전용회선으로 사용하는 것이다. 전화가 해당된다. 패킷 스위칭은 우편 배달과 비슷하다. 데이터그램 방식과 가상회선 파빙식이 있는데, 가상회서 방식은 패킷 스위칭기반으로 서킷 스위칭처럼 움직이는 것이다. 2.프로토콜 구조 프로토콜의 구성요소는 Syntax(구문), Semantics(의미), Timing(타이밍)이다. 구문은 format, 의미는 필드의 의미, Timing은 언제 주고받을지, 속도와 관련 있다. 구현 방식에는 Layer와  hierarchy가 있다. layer은 인접한 계층끼리만 통신이 가능하지만, hierarchy는 계층간을 넘나 들 수 있다. 3장. 프로토콜 기능 Encapsulation : 헤더 or 테일을 붙이는것 Flow Control: 가장 쉬운 방법 Stop-and-wait, 개선된 것 sliding window Error Control : detection과 retransmission 4장. TCP/IP, 그리고 인터넷 기반 어플리케이션 TCP/IP구조와 OSI 구조 비교해서 보기 5장. IP 운용 비연결형이며 datagram방식이다. 오류 제어,혼잡 제어, 흐름제어 기능이 없다. 6장. IP 주소 사설 IP사용의 장점: IP공간 절약, 사설망 보호 7장: 라우터 L3전달 담당 8장 ARP Address Resolution Protocol : IP(브로드캐스팅)-> MAC(유니캐스팅) 반대로 동작하는 프로토콜 RARP 9장 ICMP IP의 문제 : 비연결형, 오류 제어 X, 상대방의 정보 수집 기능 X   => 를 보완해주는게 ICMP 10장. UDP 멀티캐스팅과 브로드스캐팅이 가능하다.(TCP는 불가) 11장...

데이터베이스 정리

가장 배경지식이 부족한 데이터베이스.. 그래도 비중이 적고 문제가 쉽다고 하니 다행이다. 새로 알게 된 것이나 모르는 내용 위주로 정리를 한다. 인용부호 ' '  에서만 대소문자를 구분한다. 문자열의 패턴을 검색할때는 like를 쓴다. string like pattern 과 같다. 패턴에서 % 는 임의의 문자열을 뜻하고(문자열이 없을 수 있음), _ 는 임의의 한 문자를 뜻한다. null에 대한 산술 연산은 null이다. 비교 연산은 unknown이다. is null 키워드를 통해 null을 확인 가능하다. order by를 통해 출력을 정렬할 수 있다. 서브쿼리는 where와 from 절에만 사용한다. 중복제거는 select distinct C언어에서 쓰이는 논리연산자는 사용되지 않는다. and or not을 사용한다. 문자열 접합은 || 이다 특정 범위 조건을 걸때는 between a and b 이다 where a in (10,20) // a 가 10 또는 20인 col format a 10 // 컬럼 10글자 보이기 from dual //  dual 이라는 기본 테이블이 존재한다 join 1. equijoin : 동일한 컬럼이 있을때      2. non-equijoin : 동일한 컬럼이 없을때      3. self join : 한 테이블 내에서 일어나는 equijoin      4. Outer join : quijoin을 만족시키지 않는 값을 보기 위해 사용한다. 조인시킬 컬럼이 없는 쪽에 (+) 를 붙인다. from table 1 inner join table2 on something // 두 테이블에서 on을 만족하는 레코드를 결합한다.

백준알고리즘 1003번, 피보나치 함수 풀이

fib(n)을 했을때   fib(0),와 fib(1)이 몇번 콜되는지 구하는 문제입니다. 전략 :  전역 변수 2개를 할당해, fib(0)을 부를때 증가시키고, fib(1)을 부를때 증가시키는 것으로 해서 풀었습니다. --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- #include <stdio.h> #include <string.h> #define MAX_ARRAY_SIZE 1000 using namespace std; int n_0; int n_1; int fibonacci(int n) { if (n == 0) { n_0++; return 0; } else if (n == 1) { n_1++; return 1; } else { return fibonacci(n-1) + fibonacci(n-2); } } int main(void) { int n; int t; #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif scanf("%d", &t); for (int i = 0; i < t; i++) { scanf("%d", &n); n_0 = 0; n_1 = 0; fibonacci(n); printf("%d %d\n", n_0, n_1); } #ifndef ONLINE_JUDGE fclos...