태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
블로그 이미지
Lonewolf dlbo

calendar

  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      

Notice

2009.06.02 14:24 Solutions/Dlbo's Solution


쩝...

초 간결한 코드입니다.

-_-;;

그냥 단순하게 정해진 최대치를 서로 계속 가져간다 했을때,

정해진 최대치에 맞아 떨어져서 최종 갯수가 0이 아니면 이긴거고, 0이면 진거지요 뭐 =ㅁ=;;
posted by Lonewolf dlbo
2009.03.05 20:12 Solutions/Dlbo's Solution


다들 이해하기 쉬우시라고 그냥 수열 아닌거 코드로 했습니다. -_-;

6에서 왜 6이냐 그러는데...

5, 6, 1을 버블소트하고, 2, 3, 4를 버블소트하면 6입니다. -_-;
posted by Lonewolf dlbo
TAG C/C++, pku
2009.02.18 00:20 (비정기) Dlbo's Post
크흑. set은 그나마 자료가 좀 적네요. -_-;

-----------------------------------------------------------------------------------------------

set은 쉬운 말로 해서 '집합' 이라 부릅니다.

참 재미있는 녀석인데요...

고등학교 수학 1학년 과정(중학수학에도 있었나는 가물가물해서 기억 잘 안납니다.
군입대가 코앞인데 ㅡ,.ㅡ....;;)

에서 존재하는 집합녀석.

집합인 set에는 동일한 원소가 여러개 존재할 수 없습니다.

동시에, 쓰기 편하라고 알아서 작은 값부터 정렬해둡니다-_-

반복자 이터레이터가 존재하며, 삽입과 삭제가 간편하고,

미리 정렬을 해 두는데다가, 정렬메소드가 없기 때문에 내부 값을 마음대로 바꿔버리면

참 곤란한 상황을 맞이하게 된답니다. ㅡ.,ㅡ;;;



한번에 통채로 만나는 예제~ -_-;

첫번째 예시는 삽입인 insert 메소드입니다.


단순히 저렇게 값만 넣어버릴 수도 있구요.

insert메소드의 리턴은 pair라는 구조체로... 반복자 iterator와 bool형 성공여부를 리턴합니다.

pair<set<int>::iterator, bool>형 구조체 변수를 선언해서 리턴을 받으면 성공인지 실패인지를

확인할 수 있지요.

만약 같은 값이 존재해 삽입이 거부된다면 실패합니다.

두번째는 erase 메소드.


간단합니다.

ㅡ.,ㅡ

그냥 지워요 ㅡ.,ㅡ;;;

집합은 같은 원소가 존재할 수 없기 때문에 한번에 한개의 원소만 삭제되게 됩니다.

이 erase메소드는 리턴으로 타입의 사이즈를 내뱉습니다만... 쓸모 없구요. ㅡ.,ㅡ;;

shit.erase(sit1, sit2);

꼴로 사용할 경우, sit1부터 sit2까지(둘다 반복자입니다.) 싸그리 날려버립니다.

그 다음은 배열을 이용한 초기화.

배열의 일부분을 사용해 그냥 초기화 시켜버릴 수 있습니다.

혹은 타 STL(리스트나 string클래스등 여러가지...)의 반복자를 이용해 초기화하는 법도 있지요.

바로 아래는 원소에 접근하는법.

간단하지요?

연결리스트와 완전히 동일합니다.

ㅡ,.ㅡ;;

그 다음은 원소가 존재하는지 보는 법.

find 메소드는 원소의 존재여부를 확인합니다.

end()메소드를 통해 얻는 반복자는 널포인터.

고로 end()메소드와 동일한 것이 리턴되었다면 탐색에 실패했다는 의미입니다.

반면 일반 반복자가 리턴되었다면 해당 값이 존재함을 의미하게 되는 것이고,

이도 연결리스트처럼 포인터를 이용해 바로 값을 얻을 수 있습니다 ㅡ.,ㅡ;;

-------------------------------------------------------------------------------------------

으흠...

제네릭 알고리즘은 쉽게 생각하면 지나치게 쉽고,

어렵게 생각하면 지나치게 어렵기 때문에;;

이렇게 간단하게 정리하면 거저먹는 느낌이 들어서 찝찝하군요 ㅡ.,ㅡ;;
posted by Lonewolf dlbo
2009.02.11 15:15 (비정기) Dlbo's Post
크흘흘.

이번엔 큐 갑니다~

-------------------------------------------------------------------------------------------------

사용자 삽입 이미지

큐는 대략 저런 녀석이란건 아시지요?

양쪽이 다 뚫린 파이프이긴 한데,

한쪽으로만 넣고, 한쪽으로만 뺄 수 있는 구조라고 보시면 되요.

마치 총이랑 비슷하다고 할까요.

탄창 맨 위에 있는 녀석이 맨 먼저 발사되지 않습니까?

대신 총구에 총알이 여러개 들어있는 안습상황은 없다는거... ㅋㅋ



큐도 스택만큼이나 행동이 적습니다.

위에 있는 코드에 나온게 다에요

-ㅁ-;;;;

하지만 정말로 유용한 자료구조 입지요.

좀만 고쳐서 원형 큐로 만들어서 OS의 명령어 메시지큐로 쓸 수도 있고,

게임 제작시에도 종종 쓰이고,

PKU, UVa-_- 등의 문제에도 종종 쓰입니다.

-----------------------------------------------------------------------------------------------

.... 왜 거저먹는 기분이 드는거지 ㄱ-
posted by Lonewolf dlbo
2009.01.13 20:20 (비정기) Dlbo's Post

클클

손이 부어서 아직 완전히 제대로 굴릴수는 없습니다만,

그래도 좀 할만합니다.

일이 적응이 됐다고나 할까.

습진때문에 그만두려 했는데 구정까진 일을 계속 해야 할 듯 합니다.

그럼 이만 글 시작합지요 -_-!

----------------------------------------------------------------------------------------



오늘도 시작되는 STL 포스팅.

STL이 뭔 물건인지는 1번째에서 설명드렸지요?

ㄲㄲㄲㄲ

이번엔 Linked List입니다.

List.h 파일과 List.cpp 파일을 찾아보면 이중연결인지 단일연결 리스트인지 알겠지만

.....

C++은 객체지향형 언어입니다.

객체지향 언어가 아니고 객체지향형 언어 ㅡ.,ㅡ..

내부 구현을 일부러 직접 알아낼 필요는 없습니다.

고로, 그냥 썡까도록 하지요.

저 위의 소스코드가 바로 list의 선언방법 입니다.

list.h, 혹은 list를 인클루드 시킨 후,

using namespace std로 std 네임스페이스의 리스트임을 인지시킨 후(STL이니 std겠죠? ㄲㄲㄲ)

list<템플릿> 변수명;

list<템플릿>::iterator 변수명;

을 이용해 기본 선언을 마칩니다.

list는 vector와는 다르게 모든 노드가 하나하나 동적으로 따로 할당되기 때문에

vector처럼 인덱스를 이용한 접근이 불가능합니다.

linked list를 직접 구현해 보셨다면 아시겠지만

포인터를 이용해 각 노드에 접근하지요?

저 iterator도 저번에 말씀드렸듯 포인터입니다.



자.

저 소스코드.

단순하지요?-_-?

push_back() 메소드는 리스트의 맨 끝에 원하는 원소를 추가합니다.

1, 2가 차례로 등록되겠지요.

하지만, push_front() 메소드는 리스트의 맨 앞에 원소를 추가합니다.

고로, 마지막엔 3, 1, 2의 순으로 리스트에 삽입이 되겠지요.



자, 이번엔 삽입과 삭제 예시입니다.

insert 메소드를 이용하면 이터레이터를 이용해 원하는 위치에 원소를 박아넣을 수 있지요.

해당 이터레이터 바로 앞에 삽입됩니다.

erase를 사용하면 해당 이터레이터를 삭제할 수 있으며,

2개의 이터레이터를 인자로 사용시 1번째 이터레이터 부터 2번째 이터레이터 까지 모두 지워버립니다.

remove는 인자로 받은 값을 가지는 모든 노드를 제거하지요.

-_-!

----------------------------------------------------------------------------------------

미리 그림이 준비되지 못한점은 사과드립니다.

오늘 프레스에 손도 끼이고 신참들이 영 개판이라 좀 정신이 없었거든요.

다음엔 좀 더 양질의 포스트로 돌아오겠습니다 -_-!

다음 편은 스택입니다.
posted by Lonewolf dlbo
2009.01.06 20:20 (비정기) Dlbo's Post
우후.

오늘도 야근이 없었습니다만...

라인이 몇번 연타로 끊겨먹는 바람에 날뛰었더니 손이 쪼까 개판이네요.

오타 있음 꼭 지적해 주시길... -_-;

-------------------------------------------------------------------------------------

Vector 템플릿은 이전 포스트에서 코드 예시로 보였던 것처럼 vector를 인클루드 시켜야 합니다.

vector.h가 아니니 주의하시길...

Vector 템플릿 클래스는 "동적 배열" 이라고 보시면 됩니다.

가장 간단한 것부터 보도록 하지요.



size 메소드는 벡터의 사이즈를 리턴합니다.

자, 그럼 사이즈를 재조정하는 방법도 알아야 하겠지요?



벡터의 사이즈가 재조정됩니다.

자,

근데 벡터에 데이터를 우째 넣느냐구요?-_-?

간단합니다.



요래도 됩니다. ㅡ.,ㅡ....

배열이나 마찬가지이지요.

메소드를 이용한 멋있는 방법이 없느냐구요?



단순하지요?

여기서 잠깐, insert() 메소드에서 va1.begin() 부분에 itva1을 이용해서

원하는 위치로 이동한 후 itva1을 대신 사용한다면

원하는 위치에 삽입이 가능합니다.

혹은, va1.begin() + 인덱스넘버

를 이용해 삽입할 수도 있지요.

반면, 지우기 위해서는 아래의 메소드, erase를 사용하면 됩니다.



자...

vector는 동적 배열입니다.

자동으로 반복해서 메모리를 재할당 하기 때문에,

insert나 erase시 포인터인 반복자가 가리키는 위치는 당연히 다른 세계가 되어버리지요.

뭐... 운이 좋다면 그대로겠지만 말입니다.

ㅡ.,ㅡ;

이 점에 매우 주의해야 하지요.

아참, 반복자에 대해 설명을 하지 않고 넘어갔네요.

반복자

- Linked List등의 자료구조에서 해당 노드에 대해 하나 하나를 직접 엑세스 할 수 없어

포인터를 이용해 간접 접근을 할 때 쓰는 포인터를 지칭.

단순하지요?

STL의 반복자는 포인터로 되어 있으며,

++이나 --연산시 자동으로 앞뒤로 이동한답니다.

위의 for문을 이용한 코드에 보면 나온 itval++연산을 보면 알 수 있지요.

마지막으로 소개해 드릴 것은...

assign 연산입니다.

뭔지 아시겠지요?-_-?

이어 붙이는겁니다 ㅋㅋ



자.

이리 하면,

a1에 a2의 내용이 이어붙여 집니다.

지금은 둘다 아무것도 안들어있으니 상관 없지요 -ㅁ-

-------------------------------------------------------------------------------------

으흠... 아무래도 손 문제로 vi 분석은 힘들듯 합니다.

-ㅁ-;;

손이 회복되는대로 다시 뵙겠습니다;

posted by Lonewolf dlbo
2009.01.04 16:54 (비정기) Dlbo's Post

새로운 시리즈로군요.

이번엔 좀 길게 가야 할듯... -_-;;

이번 오는 주 부터는 야근이 없다니 vi의 분석 포스트도 재개가 가능하지 싶습니다.

------------------------------------------------------------------------------------------

STL은 Standard Template Library의 약자입니다.

앞에 머릿글자만 따서 STL 이 되지요.

근데, 라이브러리는 라이브러리인데 템플릿은 도대체 뭐냐?

라고 물으신다면...

뭐...

-_-;;

뭐라 설명드려야 할 지 모르곘군요.

대략 그냥 뭐 그러려니 해주시길... -_-;

제대로 설명하자면 페이지 할애량이 지나치게 많아지므로,

개략적인 설명만 하겠습니다.

Template

같은 뼈대를 가지나 데이터형만 다른 타입에 대해 사용하는 하나의 틀.

리스트, 스택, 큐 등의 경우 데이터형마다 하나하나 구현할 수 없으므로

템플릿을 이용해 구현한다.

뭐... 이정도로 설명이 가능하겠군요.

템플릿에 대한 코드 예시는 아래와 같습니다.

int형을 쓰는 list와 char형을 사용하는 list, 그리고 float형을 쓰는 vector와 double형을 쓰는 vector입니다.



저기 데이터형에 <>로 둘러쌓아 둔 것이 템플릿입니다.

이건 클래스 자체에서 미리 템플릿으로 선언해 두었기에 가능한 것이지,

그냥 아무데나 붙인다고 되는건 아니랍니다.

오는 화요일 야근이 없다면 list와 vector의 사용법을 가지고 다시 돌아오도록 하지요.

------------------------------------------------------------------------------------------

손가락 깨물고 감각 죽여놓고 쓰니 오타율도 많고 속도도 느리군요.

스파킹군이 "무감각"을 사유라 했는데요.

감각은 살아있구요.

손이 제대로 탱탱 부어서 손가락이 안움직였답니다 -_-

병원가서 치료받고 인제 움직이긴 합니다만,

키보드 계속 두드리는건 좀 힘들군요.
posted by Lonewolf dlbo
2008.12.03 20:48 Solutions/Dlbo's Solution


크흘.

별거 없습니다.

개미수열이라고 하는거랑 뭐 같댑니다.

C++의 cin의 경우...

저기 cin >> cases 보이시죠?

그 부분에서 int형으로 cases를 받아 케이스 갯수를 처리하는데...

이때 버퍼에서 엔터를 안꺼내고 냅둡니다.

-_-;;

순수 C++로는 여기 남은 엔터 못꺼냅니다.

cin >> temp(여기서 temp는 char형 변수라 합시다.)로 한다 해도 엔터 바로 다음의 1글자까지 꺼내버리고는

그 1글자를 temp에 넣어버리지요 ㅋㅋㅋㅋㅋ

고로 고안해낸 것이 저기 끼여있는 좀 웃긴 방식입니다 -_-

temp라는 string형 변수에 ""가 들어오면 그냥 버리는거죠. -_-;

제 코드에서는 저 string형의 temp에 해당 케이스를 입력받고나서

0자리짜리는 안들어오리라는 강력한 믿음(사실은 개깡-_-)하에 1번 인덱스부터 접근해 나갔습니다.

1칸씩 옮기면서 전칸과 같으면 cnt를 증가시키고, 다르다면 여태까지 있던 cnt와 전칸의 글자를 출력하고

cnt를 초기화시키면서 주욱~ 나가다가 문장 끝까지 도달하면 바로 직전의 글자와 cnt를 출력하고...

다음 입력을 받습니다.

물론 cases가 0이되면 그냥 프로그램 끝내지요

클클 -_-

자. 코드 설명 다 했다 Mr.K -_-!
posted by Lonewolf dlbo
2008.11.28 23:18 Solutions/Dlbo's Solution


....

감기몸살때문에 무지막지하게 힘들군요 ㄱ-

다들 몸 건강히 조심하세요 ㄱ-

그나저나 Nordic 기출에서도 이런 쉬운게 있었군요;
posted by Lonewolf dlbo
2008.10.13 00:42 Solutions/Dlbo's Solution


....

쉽길래 그냥 숏코딩 해봤어요 ㄱ-

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3077. Rounders. AC get~  (0) 2008.10.26
PKU 3094. Quick sum. AC get~  (0) 2008.10.26
PKU 2388. 누가 중간 녀석이냐? AC get~  (0) 2008.10.13
PKU 1804. 뇌인간(?) get AC~  (2) 2008.10.09
PKU 2649. Factovisor. get AC -_-  (8) 2008.10.07
PKU 2649. Factovisors. TLE  (4) 2008.10.02
posted by Lonewolf dlbo
2008.10.09 00:04 Solutions/Dlbo's Solution


끙끙. 단순한 버블소트.

-_-

'Solutions > Dlbo's Solution' 카테고리의 다른 글

PKU 3094. Quick sum. AC get~  (0) 2008.10.26
PKU 2388. 누가 중간 녀석이냐? AC get~  (0) 2008.10.13
PKU 1804. 뇌인간(?) get AC~  (2) 2008.10.09
PKU 2649. Factovisor. get AC -_-  (8) 2008.10.07
PKU 2649. Factovisors. TLE  (4) 2008.10.02
PKU 1844. Sum. AC get!~  (1) 2008.09.22
posted by Lonewolf dlbo
2008.09.24 23:49 Talk


PKU 1019. Number Sequence의 답안 소스코드입니다.

C++로 작성하였구요,

GCC용 C++인 G++ 컴파일러로 설정시 WA,

ANSI C++인 C++ 컴파일러로 설정시 AC입니다.

왠진 모릅니다 ㄱ-

이 알 수 없는 이유로 인해 사흘 꼬박 안잤건만...

Mr.K가 함께하며 저어~기 k를 결정하는 복잡한 식을 새벽 두시에 세워줬건만...

전 C++로 해야 되는것도 모르고 열심히 G++로 제출했고, AC가 나오지 않았더랩죠.

"에라... 설마...."하고 자포자기로 C++로 바꿔냈는데 바로 AC가 나오는군요.

-_-;;;

일반적으로 G++은 ANSI C++과는 다르게 독특한 코드들이 허용됩니다.

가령 예를 들면,



이 코드는 사실 동작하지 않아야 정상입니다.

-j는 명확하지 않거든요. 연산자 오버로딩이라던가... 이런 것으로 인해 단항 연산으로 취급되어

존재하지 않거나, 다른 연산으로 취급되어야 합니다. 표현하려면 -1을 곱해주는 식으로 바꿔야 하지요.

하지만 G++과 GCC는 자동으로 -1을 곱한 형식으로 취급합니다.

편리하지요?

이 외에도 여러 면에서 좀 다른 면을 보입니다만...

PKU의 GCC 시스템은 컴파일시 mscvrt.dll을 링크하여 컴파일합니다.

그로 인해 VS와 거의 유사한 코딩을 구사 할 수 있지요.

MinGW는 리눅스 환경과 최대한 비슷하게 하기 위해 cygwin.dll을 쓰는 것과 좀 다릅니다.

이리이리하여 G++에서는 컴파일되거나 제대로 되는 코드가 C++에서는 안되기도 하고,

그 반대 상황이 생기기도 한다고는 하지만...

저 코드는 G++, C++ 모두 범용으로 동작해야 하는 코드입니다.

컴파일러의 특성에 따른 변화요소에 걸릴 것이 하나도 없거든요.

-_-;;

PKU의 심사 시스템의 오류일까요?
posted by Lonewolf dlbo
2008.09.03 16:04 (임시휴재) Fanta's Post
vector는 기존 배열의 단점을 유지보수하여 나온............
설명하자면 긴 글이 되니.. 유동적 배열이라고 보시면 됩니다.

중간의 원소를 삭제하면 저절로 뒤의 나머지 원소들이 앞으로 당겨집니다.
사용하시려면

int대신 float,double,자신이 만든 클래스 등등 넣으시면 됩니다.

vector에 값을 넣으려면 push_back()함수를 사용합니다. 가장 마지막에 원소를 추가하는 함수입니다.
v.push_back(1);하면
v[0]에는 1이 들어가게 됩니다. vector는 배열처럼 접근할 수도 있죠.
v.push_back(2);를 하면 v[1]에는 2가 들어가게 되지요.

vector의 마지막 원소를 삭제하는 함수에는 pop_back()함수가 있습니다.
얘는 마지막 애를 삭제하는 데 리턴하는 값 없이 그냥 삭제합니다.

vector에 있는 데이터의 개수를 알아오는 함수는 size()입니다. 반복문쓸 때 자주 쓰입니다.
int i=v.size();하면 i에는 v에 있는 원소의 개수가 저장됩니다.

중간 원소를 추가,삭제하는 함수에는 insert(),erase()함수가 있습니다.
이 함수를 사용하려면 vector의 처음을 알려주는 begin()함수, vector의 마지막원소의 다음주소를 알려주는 end()함수를 사용해야합니다.


1번줄 : v의 첫 주소+2에 있는 곳에 93이라는 값을 추가합니다. 처음의 원소 v[0]+2인 v[2]에 값을 추가하고 뒤의 원소들은 한칸씩 뒤로 밀려납니다.
2번줄 :v의 마지막의 다음의 전의 전위치에 3을 추가합니다. 마지막원소 앞에 3을 추가하는거죠.

erase함수 사용은 알아서 ㅡ,.ㅡ

'(임시휴재) Fanta's Post' 카테고리의 다른 글

구글입사문제 풀기  (5) 2008.10.19
환형 링크드리스트  (3) 2008.10.08
정보올림피아드 모험가  (5) 2008.09.25
재귀함수랑 친해지기 : 파스칼의 삼각형  (1) 2008.09.17
동적 배열할당  (2) 2008.09.10
stl vector 사용  (4) 2008.09.03
posted by 지환태
TAG C/C++, STL, vector
prev 1 next