PGR21.com
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
Date 2010/03/24 18:43:58
Name azurespace
Subject [일반] [문제편] 자료구조와 알고리즘에 대해 생각해 봅시다. (문제 순화하였습니다.)
이 글은 "아, 나도 이제 프로그래밍 언어 하나 정도는 자유자재로 다룰 수 있어!" 하면서 우쭐하고 있는 새싹들을 잘라버리기 위해(...) 씁니다. 어쩌면 연재물이 될지도 모르겠네요. 뭐 이렇게 말하는 저도 그냥 새싹들 중 하나긴 합니다만(...)


1번. 정수들의 배열 A가 있습니다. 여러분은 정수 i와 j를 입력받아 A[i]부터 A[j] 사이의 값을 모두 더한 결과(A[i] + A[i+1] + ... + A[j-1] + A[j])를 출력하는 프로그램을 만들어야 합니다. 그런데, 이러한 작업을 cntQuery번 수행해야 한다면 어떤 알고리즘을 사용하겠습니까? 그리고 그 알고리즘의 시간 복잡도는 무엇인가요?

참고 :  만약 프로그램의 실행 시간이 데이터의 크기 N의 제곱에 비례한다면 이 프로그램의 시간 복잡도를 O(N^2)이라고 합니다. cntQuery와 N^2의 곱에 비례한다면 O(cntQuery * N^2)이 되겠지요.

2번. 1번과 같습니다. 그러나 이번에는 구하여야 하는 것이 달라졌는데, A[i]와 A[j] 사이에서 가장 큰 값을 찾아 출력해야 합니다. 1번의 알고리즘을 변형시켜 그대로 이용할 수 있습니까? 그렇지 않다면 어떤 알고리즘을 이용해야 할까요?

3번. 1번과 같습니다. 그러나 고객이 새로운 요구사항을 추가했습니다. 그것은 배열의 내용을 변경시키고 싶다는 것입니다. 그래서 여러분은 고객이 음수인 i를 입력하였을 경우 A[-i] = j가 되도록 하겠다고 약속했습니다. 이 경우에도 1번의 알고리즘을 사용할 수 있나요? 그렇지 않다면 대안은 무엇입니까?

4번. 다른 모든 조건은 3번 문제와 같지만, 구하여야 하는 것은 2번과 같습니다. 이 경우는 어떻게 됩니까?

풀이는 지켜보다가 이 쯤이 적당하다 싶으면 올리겠습니다.

추가 1 : 메모리 사용량에 대해서 언급해야 할 것 같네요. 너무 무식하게 막 쓰지는 맙시다. 예를 들어 N^2개의 배열을 만들어서 죄다 인덱싱해 버린다거나 하는거 자제합시다 -,.-;;;

추가 2 : N의 크기가 상당히 큰 경우에, preprocessing을 통해 각각의 명령에 대한 수행 성능을 높일 수 있다면, preprocessing에 소요되는 복잡도와, 하나의 명령을 실행하는 데 드는 복잡도를 나눠서 써 봅시다.

추가 3 : 여러분이 사용하는 플랫폼은 너무 우월해서 정수 범위가 무한대로 제공되며 한 사이클 내에 처리된다고 가정합시다. 요컨대 한 번의 정수 연산은 졸라빨라염. 므겡므겡믱믱...

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
고지를향하여
10/03/24 18:55
수정 아이콘
3, 4번은 문제 이해가 잘 안 가네요.;

1번 O(n), 2번 O(nlogn) 같네요. 미리 구하는걸 복잡도 연산 안했네..
10/03/24 19:03
수정 아이콘
1. O(n)만큼의 메모리와 연산을 미리 사용할 수 있다면
배열 B[n] 선언하고 B[0] = A[0] for i = 1 to n-1 : B[i] = B[i-1]+A[i] 로 배열 B에 배열 A의 Sigma Sum을 저장하면
입력이 들어오면 A[first] + ... + A[last] = B[last]-B[first-1] 을 이용하여서 O(cntQuery)에 계산 가능하군요.
2. 단순히 보기에는 O(n*cntQuery)..
2번부터는 더 좋은 방법이 있을지 고민을..끄응-
10/03/24 19:09
수정 아이콘
에이...적다가 자꾸 헷갈려서-_-;;;

왠만하면 n같은데...에휴
블랙독
10/03/24 19:12
수정 아이콘
이래서 공전계같은 수업하면 컴과는 불이익을 줘야 함다!!
Summerlight
10/03/24 19:18
수정 아이콘
3번 A[-first] = A[last]를 잘못 쓰신건가요? 아니면 의도된건지...
Summerlight
10/03/24 19:40
수정 아이콘
이리 저리 좀 생각해보긴 했는데 전부 binary search를 이리저리 뒤튼 방법 말고는 잘 안 떠오르는군요. 알고리즘을 좋아는 하지만 잘 하지는 못해서 슬픕니다.
azurespace
10/03/24 19:52
수정 아이콘
생각해보니 현직 프로그래머들은 이 글을 보려면 최소한 12시는 되어야겠군요. 틀림없이 야근이 있을테니까. 해답편은 내일 중에 올리겠습니다.
10/03/24 20:01
수정 아이콘
3, 4 번의 경우에는 배열의 값이 변해버리는군요. 근데, first가 음수일때는 대입만 합니까?
이런 경우에는 cntQuery와 복잡도가 비례하지 않게 될 듯 한데... 최적의 알고리즘은 좀 고민해봐야겠네요. ^^;
근데, 나 일 빨리 끝내고 퇴근해야 할텐데, 무슨짓이지...;;
ROMANMAX
10/03/24 20:02
수정 아이콘
이제막 학부생으로 자료구조를 배우기 시작한 저로서는 이해하기힘든 문제들이군요.;;;;;
시간복잡도의 개념을 이틀전에 배워서..;;;;
어렵군요
NULL Pointer
10/03/24 20:05
수정 아이콘
1번은 O( n * (n - 1) / 2 ) 만큼의 추가 메모리와 Preprocessing이 가능하면 O(1)으로도 되네요. (n ^ 2 보다 작으니 유효!!)
나머지 문제들도 마찬가지로 O(1)이 될거 같네요.
다만 O( n * (n - 1) / 2 ) 을 인정 못하신다면 시 to the 망....
삐꾸돼지
10/03/24 20:08
수정 아이콘
자바스크립트로 함 풀어볼깡 ~
미친잠수함
10/03/24 20:21
수정 아이콘
이거 뭡니까??
비 전공자는 뭐 해외전문서적 영문판 읽는게 훨 낫겠네요!!
아~~ 눈아퍼!!
쥬크파니
10/03/24 20:26
수정 아이콘
문제 풀기 전에 질문이 있는데요 ~
n>cntQuery이고 허용 메모리 복잡도는 O(N) 인가요??
10/03/24 20:32
수정 아이콘
번역체네요. 이런 표현들을 보면 "그냥 영어원문으로 문제를 내주시죠."라는 소리가 목까지 올라오고는합니다.
문제를 인지하기 위해 영어로 역번역해서 이해해야한다고 할까요?
WizardMo진종
10/03/24 20:34
수정 아이콘
이거 뭐 알아먹지도 못하겠네;;;
Je ne sais quoi
10/03/24 20:43
수정 아이콘
야근중인데 일 안합니다 ^^
3번이요 first < 0 이면 A[-first] + A[-(first + 1)] + ... + A[0] + ... + A[last - 1] + A[last]라는 거죠?
그런데 A[-first] = last이면 A[-(first + n)]도 last인건지 아니면 A[-(first + n)] = last - n인지 모르겠습니다.
꿀호떡a
10/03/24 21:29
수정 아이콘
1번은 O(N) pre-processing에 O(CntQuery), 2 3 4번은 O(N) pre-processing에 각 O(CntQuery * lg N) 정도까지는 쉽게 가능..하지만 의도하신 풀이는 이건 아니었을 것 같고.. 궁금하네요. 2번 O(1)이 있다고 들은 것 같기도 하고... =_= 아흑!!
달덩이
10/03/24 21:53
수정 아이콘
...여기가 유게는 아니고...
........ 이 외계어들은 죄다 뭐인건가요.... 문과생은 심히 당황스러운 언어의 향연이군요!!
10/03/24 23:15
수정 아이콘
인덱스 트리를 구성해서 잘 하면 될거 같네요
최대값 구하는것도 비슷한 원리로..
값 변하는건 역시 완전 이진 트리니깐 lg n 정도면 될듯 하고.. 그냥 대강 보면 이런데 어떤 함정이 있을지..크크
10/03/25 00:48
수정 아이콘
전 최대힙 정도로 생각했는데 범위가 유동적이라서 힙으로는 해결 안될 문제 같고 그냥 손놨습니다-_-;;;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
22578 [일반] [AC밀란 북미투어 VS 몬트리올]-축구 천재들의 축구쇼[딩요,파투,쉐돌이]소문난 잔치란 이런것! [9] 또리민3952 10/06/04 3952 0
22577 [일반] 진정한 승리자 [16] happyend6478 10/06/04 6478 4
22576 [일반] 슈프림팀의 신곡 "땡땡땡"의 뮤직비디오가 공개되었습니다. [20] 세우실4293 10/06/04 4293 0
22575 [일반] [축구]한국 : 스페인 불판입니다. [485] 화잇밀크러버6739 10/06/04 6739 0
22574 [일반] 선거 다음날의 제사, 그리고 세대갈등 [91] Sputnik5438 10/06/04 5438 0
22573 [일반] [수정] 한국 : 스페인 양팀 선발라인업 [318] Bikini5975 10/06/03 5975 0
22572 [일반] 이번 선거에서 승리를 거둔 민주당에게 필요한 것이 무엇일까요? [39] SwordDancer3302 10/06/03 3302 1
22571 [일반] 식중독에 걸려 병원에 다녀왔습니다. [20] 하나5293 10/06/03 5293 0
22570 [일반] 선거열기로 가득한 게시판 좀 식히자는 의미로.. 휴가 계획은 세우고 계신지요? [10] 힙합아부지6455 10/06/03 6455 0
22569 [일반] 2010 마구마구 프로야구 6/3(목) 리뷰 & 6/4(금) 프리뷰 [37] lotte_giants3148 10/06/03 3148 0
22568 [일반] 뭔가 불안한 느낌이 드는건.. [7] 핸드레이크3947 10/06/03 3947 0
22567 [일반] 모바일+인터넷+전자투표 를 시행하면 어떨까요. [32] jerrys4752 10/06/03 4752 0
22566 [일반] 내 마음대로 뽑아본 베스트 OST 애니메이션 그 여섯번째, 카드캡터 사쿠라. [10] 물의 정령 운디3293 10/06/03 3293 0
22565 [일반] 무엇이 진정한 민주주의일까요.........? [34] 개념은?4048 10/06/03 4048 2
22564 [일반] `차붐` 차범근, 남아공월드컵 해설 맡습니다. [44] Charles5882 10/06/03 5882 0
22563 [일반] 오만함이 시대적 변화와 민심에 눈멀게 했다[펌] [8] 허저비4202 10/06/03 4202 0
22562 [일반] 오세훈 당선에 대한 노회찬 책임론에 대한 견해와 국민의 역할 [38] 쌈등마잉5402 10/06/03 5402 0
22561 [일반] 가온차트 5월 다섯째주 (10.05.23~10.05.29) 순위~! [6] CrazY_BoY3345 10/06/03 3345 0
22560 [일반] 광역자치단체장 득표 분석 [11] 信主SUNNY4175 10/06/03 4175 1
22559 [일반] 슈프림팀의 리팩앨범 티저와 티맥스의 뮤직비디오가 공개되었습니다. [8] 세우실3737 10/06/03 3737 0
22558 [일반] 한 후보만을 선택하여 투표하는 방법은 합리적인 방법일까요? [13] Memex2945 10/06/03 2945 0
22557 [일반] 야구 불판 올립니다. [85] EZrock2801 10/06/03 2801 0
22556 [일반] 2012년 12월 18대 대선에서 박근혜가 대통령으로 당선될것입니다. [73] unluckyboy8911 10/06/03 8911 1
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로