제2회 대학생 프로그래밍 온라인대회 연습문제 B 테이블 정리

문제

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
using namespace std;
int tables[4][4]; // 테이블 상태
int Move(int, int);
int main()
{
int T;
cin >> T; // 테스트 케이스의 개수
for(int i = 0; i < T; i++)
{
int sum = 0;
for(int j = 0; j < 4; j++)
{
for(int k = 0; k < 4; k++)
{
cin >> tables[j][k];
sum += tables[j][k];
}
}
cout << sum - Move(0, 0) << endl;
}
return 0;
}
int Move(int col, int flag)
{
if(col >= 4)
{
return 0;
}
int max = 0;
for(int i = 0; i < 4; i++)
{
if(flag & (1 << i))
{
continue;
}
int val = tables[i][col] + Move(col + 1, flag | (1 << i));
if(val > max)
{
max = val;
}
}
return max;
}

코멘트

실수로 배열에 행과 열을 반대로 저장해 푸는데 오래걸렸다. 가장 적게 이동한 인원을 찾는것과 전체 인원에서 이동안한 인원을 제외한 인원이 같기에 후자로 구하였다. 재귀적으로 백트래킹을 수행하였다.

Share Comments

제2회 대학생 프로그래밍 온라인대회 연습문제 A 소수 판정

문제

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cmath>
using namespace std;
bool IsPrime(int);
int main() {
int T;// 테스트 케이스 개수(1 <= T <= 10)
cin >> T;
for(int i = 0; i < T; i++)
{
int N;// 소수인지 판정할 자연수(1 <= N <= 100,000,000)
cin >> N;
if(IsPrime(N))
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}
bool IsPrime(int n)
{
for(int i = 2; i < sqrt(n); i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}

코멘트

소수를 구하는 문제이다. 이 문제의 키 포인트는 제곱근 이상은 해볼 필요가 없다는 사실인것 같다.

Share Comments

Visual Studio에서 컴파일시 계속 프로세스 잡고 있는 문제 해결 방법

구글링과 MSDN을 뒤져본 결과…

보통 Windows 7 에서 발생한다고 하는데…

다른 프로세스가 컴파일시 생성되는 임시파일에 계속 접근하고 있어서 컴파일러가 파일에 접근하지 못한다고 하네요.

곰곰히 생각해본 결과 가장 가능성 있는것은 백신의 실시간 감시 기능…

즉, 백신의 실시간 감시 기능을 꺼두면 아무 문제없이 빌드가 됩니다. ㅎㅎㅎ

Share Comments

히스토그램을 이용한 영상처리 프로그램

히스토그램 평활화

기본 명암 대비 스트레칭

엔드인 명암 대비 스트레칭

역 변환

감마 변환

Share Comments

컬러모델 변환 프로그램

  1. RGB를 Gray Level로 변환한다.

  1. RGB를 CMY로 변환한다.

  1. RGB를 HSI로 변환한다.

  1. HSI를 RGB로 변환한다.

Share Comments

TwoWord Index

프로그램 구조

클래스 다이어그램

UserInterface 인터페이스

UI의 공통적인 기능을 묶어서 인터페이스로 선언하였다. UI의 변경을 쉽게 해줄 수 있는 장점이 있다. 입력은 input 메소드, 출력은 output 메소드, 종료는 close 메소드로 선언하였다.

Console 클래스

콘솔 환경에서의 UI를 정의하였다. UserInterface 인터페이스의 메소드들을 구현하고 있다. Scanner 클래스를 이용하여 콘솔에서 파일명과 횟수를 입력받도록 하였다.

GUI 클래스

그래픽 환경에서의 UI를 정의하였다. JFileDialog 클래스를 이용해 파일 입력을 쉽게 받도록 하였다. display 메소드는 기본적인 파일 생성 뿐만 아니라 화면상에 JTree 클래스를 이용해 트리 구조를 표시하여 인덱스 구조를 더욱 명확하게 알 수 있도록 하였다.

TwoWordIndex 클래스

이 프로그램의 핵심적 클래스이다. 키워드의 인덱스 구조를 정의 및 다루는 메소드들을 포함하고 있다. addKeyWords 메소드는 키워드 목록을 작성하는 메소드이고, removeUnderCount 메소드는 최소 출현 횟수 이하의 키워드는 삭제하는 메소드이다. sort 메소드는 정렬을 하는 기능을, display 메소드는 파일에 출력하는 기능을 담당하고 있다.

Word 클래스

Prefix와 Suffix의 공통적 속성인 문자열(단어)을 추상 클래스로 묶었다. compareTo 메소드를 구현하여 정렬을 손쉽게 할 수 있도록 하였다.

Prefix 클래스

키워드의 앞 단어를 정의하는 클래스이다. 멤버로 Suffix들의 리스트를 가지고 있다. 리스트는 Iterator 인터페이스를 이용해 탐색을 하였다.

Suffix 클래스

키워드의 뒷 단어를 정의하는 클래스이다. 멤버로 줄 번호를 리스트로 가지고 있다. 줄 번호의 개수는 키워드의 출현 횟수를 뜻한다.

프로그램 실행 예

tumblr_inline_n4ssrdqNrV1rubmdv.jpg tumblr_inline_n4ssrmaCn41rubmdv.jpg tumblr_inline_n4ssrwe1nK1rubmdv.jpg tumblr_inline_n4sss5FnTR1rubmdv.jpg tumblr_inline_n4sssckkro1rubmdv.jpg tumblr_inline_n4sssjfeer1rubmdv.jpg

입력 원문 텍스트

An array of controversial topics, including a proposal to declare the border area a war-free zone, is being discussed ahead of the Oct.2-4 summit between President Roh Moo-hyun and North Korean leader Kim Jong-il.
The summit, the second of its kind, is expected to focus mostly on topics for promoting peninsular peace and, more importantly, those confirming Seoul’s engagement policy toward Pyongyang.
Toward that goal, the government has been considering the extent to which it would discuss nuclear programs with North Korea. Earlier this month, Roh told reporters that, because “the North has already shown it will readily commit to denuclearization, there will be no need to aggravate them by mentioning the programs in the summit.”
The president cited the six-party talks and the latest progress in inspecting and shutting down North Korea’s nuclear facilities as evidence of the communist regime’s renewed commitment.
However, the president’s chief security adviser recently said that North Korea’s denuclearization would inevitably be on the agenda since the whole idea of the summit is to pursue peninsular peace and to promote inter-Korean exchanges.
Yesterday, the government said that the two Koreas may discuss establishing a joint committee to cooperate in reducing conventional weapons.
“We probably would not see immediate results, but such a committee could be meaningful, in that we would open a channel of dialogue with the North on the issue of conventional weapons,” said Kim Jin-moo, a researcher at the Korea Institute for Defense Analyses.
North Korea is estimated to have about twice the number of conventional weapons that the South has, but how formidable the North Korean army is minus nuclear weapons is disputed.
Other contentious issues mentioned so far include whether the government would propose the Demilitarized Zone and the Northern Limit Line as “peace zones.” Contrary to its name, the DMZ is a heavily armed buffer zone, while the NLL is a de-factor border where numerous inter-Korean naval battles - some bloody - have erupted.
The conservative Grand National Party has been reiterating its objection to such peace zones, saying that they would undermine the country’s security.
The GNP is also adamant that Seoul discuss and review Pyongyang’s plans for denuclearization.
Further, the Roh administration may attempt to persuade the North to agree to a peace declaration now, seven years after former president Kim Dae-jung failed, analysts say.
In 2000, Pyongyang refused to sign onto such a declaration.
On the economic front, the government is likely to suggest building more industrial facilities similar to the Gaeseong Industrial Complex where South Korean companies employ North Koreans.
Candidate sites for the second and third complexes are the Haeju or Nampo areas in the North.
“Considering that we are fast heading toward an inter-Korean economic community of some kind, increasing the number of industrial complexes appears to be the way to go,” said Baek Jong-chun, Roh’s top security adviser.
Experts have recommended making more roads and train lines between the two Koreas.
Earlier, the president said he does not expect to reap significant results from the meeting with Kim. He explained that he does not want to burden the people or the next administration by trying to push fresh deals with the North.
The conservatives have argued that Roh’s attitude belies how he is seeking to use the inter-Korean summit as political leverage for the nation’s liberals as they struggle to compete against the GNP’s Lee Myung-bak, the most popular candidate so far in the run-up to the December presidential election.
By Kim Ji-hyun

금지어 목록 텍스트

a an the
he it our she that them they we
are be been can do does has have
is may must shall should was will would
about behind by for in of on onto to
also and as but no not or so such yes
how what when where who why
0 1 2 3 4 5 6 7 8 9
! “ # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

키워드 최소 출현 횟수

2

출력된 파일

conventional weapons [11, 13, 15]
North Korea [5, 7, 9, 15]
North Korean [1, 15]
peace zones [17, 19]
peninsular peace [3, 9]
security adviser [9, 31]
two Koreas [11, 33]

본 과제를 하면서 느낀 점

본 과제를 하면서 느낀 가장 큰 어려움은 텍스트를 파싱하는 것이었다. 처음엔 텍스트를 토큰 단위로 나누는 것에만 집착한 나머지 글자와 마침표가 붙어있는 것들을 나누려고 하니 코드가 많이 지저분해졌다. 결국엔 정규표현식을 이용해 매칭된 단어나 기호들을 찾아내는 것으로 아이디어를 돌리니 아주 간단해졌다.

또, 제네릭이나 오토박싱/언박싱, foreach구문 등을 상당 부분 사용했다. 하위호환성과 편리함을 놓고 잠시 고민을 했지만 새로운 기능에 손을 들어주었다.

마지막으로, 교수님이 말씀하신 미학적인 프로그램을 위해 고민을 했음에도 불구하고 단점이 눈에 많이 보인다. 하지만 자료구조에 대한 많은 공부를 할 수 있었고 배열과 리스트에 대해 더욱 깊게 이해할 수 있었다. 개인적인 생각으로는 자바의 ArrayList 클래스를 이용하는 것도 좋지만 복습의 측면에서 각자 ArrayList를 구현하고 그것으로 이 과제를 수행하는 것도 나쁘진 않을듯 하다.

Share Comments

OpenGL을 이용한 지구본 텍스쳐 매핑

내용 설명

  1. 체크보드 패턴의 3차원 평면을 그린다.
  2. 세계 지도 그림을 텍스쳐 매핑한 정육면체를 그린다.
  3. 세계 지도를 매핑한 지구본을 그린다.
  4. 마우스를 드래그해 원하는 각도로 회전할 수 있다.

출력 화면

GL_DECAL

tumblr_inline_n4ssaiTYpU1rubmdv.jpg

GL_MODULATE

tumblr_inline_n4ssaod64i1rubmdv.jpg
Share Comments

OpenGL을 이용한 3D 랜더링 및 애니메이션

내용 설명

  1. 사용자의 입력에 따라 3차원 객체의 렌더링을 변경하는 애니메이션 프로그램
  2. 이십면체는 원점에 위치시키고 Y축으로 회전, 스페이스 키를 누르면 쉐이드 모드가 바뀜
  3. 정육면체는 원점에 위치시키고 Y축으로 회전
  4. 작은 구는 정육면체의 꼭지점에 위치
  5. 큰 구는 정육면체의 뒤에 위치하고 자신의 Y축으로 회전

출력 화면

tumblr_inline_n4sryqBSiI1rubmdv.jpg tumblr_inline_n4sryxzeo71rubmdv.jpg
Share Comments

OpenGL을 이용한 3D 로봇 그리기

내용 설명

  1. 각 부위가 위치할 곳으로 이동한다.
  2. 적당한 크기로 변환을 한다.
  3. 정육면체를 그려 부위를 만든다.
  4. 1~3을 반복해 로봇을 완성한다.

출력 화면

tumblr_inline_n4qwl0P9Ii1rubmdv.jpg
Share Comments

OpenGL을 이용한 2D 삼각형 변환

내용설명

해바라기 모양

  1. 원하는 각도로 회전한다.
  2. y축으로 이동시킨다.
  3. 삼각형을 그린다.
  4. 1~3를 반복하여 그림을 완성한다.

강강 수월래 모양

  1. 원하는 각도로 회전한다.
  2. x축으로 이동시킨다.
  3. 삼각형을 그린다.
  4. 1~3를 반복하여 그림을 완성한다.

불꽃 모양

  1. 원하는 각도로 회전한다.
  2. x축으로 이동시킨다.
  3. 삼각형을 그린다.
  4. 반대방향으로 각도만큼 회전한다.
  5. 1~4를 반복하여 그림을 완성한다.

결과화면

2D 삼각형 변환
Share Comments