728x90

프로그래밍 410

백준 알고리즘] 2610 : 회의준비(KOI 2004 지역본선)

시간 제한 : 1 초메모리 제한 : 128 MB 문제KOI 준비를 위해 회의를 개최하려 한다. 주최측에서는 회의에 참석하는 사람의 수와 참석자들 사이의 관계를 따져 하나 이상의 위원회를 구성하려고 한다. 위원회를 구성하는 방식은 다음과 같다. 서로 알고 있는 사람은 반드시 같은 위원회에 속해야 한다.효율적인 회의 진행을 위해 위원회의 수는 최대가 되어야 한다. 이런 방식으로 위원회를 구성한 후에 각 위원회의 대표를 한 명씩 뽑아야 한다. 각 위원회의 대표만이 회의 시간 중 발언권을 가지며, 따라서 회의 참석자들이 자신의 의견을 말하기 위해서는 자신이 속한 위원회의 대표에게 자신의 의견을 전달해야 한다. 그런데 각 참석자는 자신이 알고 있는 사람에게만 의견을 전달할 수 있어 대표에게 의견을 전달하기 위해서..

백준 알고리즘] 2609 : 최대공약수와 최소공배수(KOI 2004 지역본선)

시간 제한 : 1 초메모리 제한 : 128 MB 문제두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 입력첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다. 출력첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. 소스코드 #include using namespace std; int gcd(int n, int m) { return m ? gcd(m, n%m) : n; } int lcm(int n, int m, int g) { return (n / g)*(m / g)*g; } int main(void) { int n, m, g; cin >> n >> ..

백준 알고리즘] 2608 : 로마 숫자(KOI 2004 지역본선)

시간 제한 : 1 초메모리 제한 : 128 MB 문제로마 시대 때는 현재 사용하는 아라비아 숫자가 아닌 다른 방법으로 수를 표현하였다.로마 숫자는 다음과 같은 7개의 기호로 이루어진다.기호IVXLCDM값1510501005001000수를 만드는 규칙은 다음과 같다.보통 큰 숫자를 왼쪽에 작은 숫자를 오른쪽에 쓴다. 그리고 그 값은 모든 숫자의 값을 더한 값이 된다. 예를 들어 LX = 50 + 10 = 60 이 되고, MLI = 1000 + 50 + 1 = 1051 이 된다.V, L, D는 한 번만 사용할 수 있고 I, X, C, M은 연속해서 세 번까지만 사용할 수 있다. 예를 들어 VV나 LXIIII 와 같은 수는 없다. 그리고 같은 숫자가 반복되면 그 값은 모든 숫자의 값을 더한 값이 된다. 예를 들..

백준 알고리즘] 2606 : 바이러스(KOI 2004 지역본선)

시간 제한 : 1 초메모리 제한 : 128 MB 문제신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 ..

백준 알고리즘] 2605 : 줄 세우기(KOI 2004 지역본선)

시간 제한 : 1 초메모리 제한 : 128 MB 문제점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을 먹게 된다. 어떻게 하면 이러한 상황을 바꾸어 볼 수 있을까 고민하던 중 선생님이 한 가지 방법을 내 놓았다. 그 방법은 다음과 같다.학생들이 한 줄로 줄을 선 후, 첫 번째 학생부터 차례로 번호를 뽑는다. 첫 번째로 줄을 선 학생은 무조건 0번 번호를 받아 제일 앞에 줄을 선다. 두 번째로 줄을 선 학생은 0번 또는 1번 둘 중 하나의 번호를 뽑는다. 0번을 뽑으면 그 자리에 그대로 있고, 1번을 뽑으면 바로 앞의 학생 앞으로 가서 줄을 선다. 세 번째로 줄을 선..

백준 알고리즘] 2309 : 일곱 난쟁이(KOI 2004 지역본선)

시간 제한 : 2 초메모리 제한 : 128 MB 문제왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오. 입력아홉 개의 줄에 걸쳐 일곱 난쟁이의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러가지인 경우에는 아무거나 출력한다. 출력일곱 난쟁이의 키를 ..

DataStructure] 힙(Heap, 히프) 만들기 - 1

힙(혹은 히프)은 최솟값(또는 최댓값)을 빠른 시간에 접근하게 만들어진 자료구조로, 최댓값을 접근하려면 최대힙을, 최솟값을 접근하려면 최소힙을 사용한다. 두 힙은 대칭적인 관계를 갖고 있기 때문에, 하나를 이해하면 다른 힙은 쉽게 이해할 수 있다. 힙에 대해 정확히 모르는 사람들을 위해서 이해를 돕기 위한 그림과 힙의 조건에 대해서 이야기를 잠깐 하겠다. 힙은 위 그림처럼, 각 노드의 값이 자식 노드들의 값보다 크거나 작은(클 경우 최대힙, 작을 경우 최소힙) 완전이진트리를 뜻한다. 거의 대부분이 정렬 파트를 다루면서 힙 정렬을 통해 이 구조에 대해서 아는 경우가 대부분이다. 오늘은 힙이 어떤 식으로 생겼는지 보는 것보다는, 힙 자료구조를 구성하는데 요구되는 시간복잡도가 O(n)인 것에 대해서 이야기를 ..

Algorithm] Segment Tree(구간 트리) - 1

알고리즘 문제를 풀면서 접했던 문제 중 하나로 순서가 정해지지 않은(정렬되지 않은) 방대한 데이터를 입력 받아 특정 구간에서의 최솟값을 구하는 문제가 있었다. 하나씩 모두 비교하는 방법을 사용하는 건 구현은 간단하지만, 전체 구간에 대한 최솟값을 구하는 경우 O(N)의 시간 복잡도를 갖게 되고, 거기에 이러한 쿼리가 최대 M회 실시된다고 하면 O(NM)이며, 쿼리가 N에 근접하는 문제의 경우 O(N^2)의 시간 복잡도로 실행 시간 초과가 발생할 수 있다. 구간별 최솟값을 구해두고 쿼리에 대응하는 방법을 고안해도, 최초 구성 단계에서의 시간 복잡도의 문제가 있고, 내용을 바꾸는 쿼리가 존재한다면 재구성하는 과정에서 시간 투자가 필요하기 때문에, 아무래도 기존의 단순 비교 방식을 이용한 구간 내 최솟값 산출..

백준] 입력의 테스트 케이스가 존재하지 않는 경우

대부분의 문제는 테스트 케이스를 입력 받고 그 케이스에 따른 입력값을 받거나,테스트 케이스의 수를 제한하지 않는다고 하더라도 종료를 뜻하는 입력 값을 받는 경우가 대부분이다.그러다 간혹 테스트 케이스의 입력도 없고, 종료 조건도 명시되어 있지 않은 문제들이 있는데EOF의 개념이 없는 사람들은 간단한 문제(심지어 a+b)임에도 풀지 못하는 경우가 있다. 아래 문제는 테스트 케이스 개수나, 프로그램을 종료하는 특별한 입력값을 요구하지 않는다.EOF를 입력받을 때 프로그램을 종료하는데, C와 C++에서 이 EOF는 아래와 같이 처리할 수 있다. https://www.acmicpc.net/problem/10951 while(cin>>a>>b) while(scanf("%d %d",&a,&b)!=EOF)

C#] 접근 수정자(Acces Modifier)

캡슐화를 강화하는 목적으로 형식이나 형식의 멤버의 접근성(accessibility)을 설정할 수 있으며, 그 형식이나 멤버에 다른 어떤 형식이나 어셈블리가 접근할 수 있는지 결정함.접근성을 설정하기 위해 형식이나 멤버 선언 시 적용하는 다섯 가지 접근자가 존재함. - public모든 형식과 어셈블리가 접근 가능한 공용.열거형이나 인터페이스의 모든 멤버에는 암묵적으로 이 수준이 적용됨. - internal형식이 속한 어셈블리나 그 어셈블리와 friend 관계인 어셈블리에서만 접근 가능함.비내포 형식(non-nested type; 다른 형식에 내포된 것이 아닌 형식)의 기본 접근성 - private멤버가 속한 형식 안에서만 접근 가능한 전용.이는 클래스나 구조체 멤버들의 기본 접근성. - protected멤..

728x90