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
수정 아이콘
전 최대힙 정도로 생각했는데 범위가 유동적이라서 힙으로는 해결 안될 문제 같고 그냥 손놨습니다-_-;;;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
20528 [일반] 거꾸로가는 한국.. [10] ad8154593 10/03/25 4593 0
20527 [일반] 애프터 스쿨의 신곡 "Bang!"도 공개되었네요. (뮤직비디오 추가합니다) [25] 세우실4703 10/03/25 4703 0
20525 [일반] 러브포보아의 Core i3 530 필드테스트 한 것 자료 올려보바요~ [11] 러브포보아3936 10/03/25 3936 0
20524 [일반] 브라운 아이드 소울의 신곡이 공개되었습니다. [22] 세우실4626 10/03/25 4626 0
20523 [일반] [피겨]세계선수권대회가 진행 중 입니다. [20] 달덩이3707 10/03/25 3707 0
20522 [일반] 개인적으로 추천하는 2009년 걸그룹 무대동영상 1탄 [19] let8pla7949 10/03/25 7949 0
20521 [일반] 3월 31일 수목드라마 예고편 [34] 우아한페가수5118 10/03/25 5118 0
20520 [일반] I'll be there [4] Xell0ss4364 10/03/25 4364 0
20519 [일반] 스타킹 출연하셨던 소향님 다른 무대 둘 [5] Xell0ss4123 10/03/25 4123 0
20518 [일반] 스타킹 출연하셨던 소향님 다른 무대 하나 [11] zeros4974 10/03/25 4974 0
20517 [일반] 어제 낮에 병점에서 잠깐 정전이 있었습니다 이와 동시에 기흥에 삼성에서도 정전이..... [18] 귀여운마제곰4167 10/03/25 4167 0
20516 [일반] [해설편] 자료구조와 알고리즘에 대해 생각해 봅시다. [30] azurespace5051 10/03/25 5051 0
20515 [일반] 내가생각하는 대한민국 아이돌 최고의 안무 [91] 소녀시대김태10667 10/03/24 10667 0
20514 [일반] [쓴소리]대한민국 사시면서 살림살이 좀 나아지셨습니까(1)?? [38] 영웅과몽상가4218 10/03/24 4218 0
20512 [일반] [예능이야기]청춘불패와 천하무적야구단. [26] Hypocrite.12414.7247 10/03/24 7247 4
20511 [일반] 무법자감상(스포스포열매) [3] 부엉이3725 10/03/24 3725 0
20510 [일반] [음악] 야밤에 이런 음악..? (6) [15] 코리아범3463 10/03/24 3463 1
20509 [일반] 쇼트트랙 빙상연맹 밥그릇 싸움 문제가 다시 불거졌네요 [21] Jess4337 10/03/24 4337 0
20508 [일반] 인터넷 악플러 때문에 경찰서에 고소 하고 왔습니다... (有) [40] Eva0105959 10/03/24 5959 0
20507 [일반] 2010 챔피언스리그 4강전 경기를 관람하게 됐습니다~! [35] 질롯의힘4658 10/03/24 4658 0
20506 [일반]  KBS.MBC "월드컵 공동중계 성사안되면 K리그 중계 안하겠다" [43] 반니스텔루이5281 10/03/24 5281 1
20505 [일반] [문제편] 자료구조와 알고리즘에 대해 생각해 봅시다. (문제 순화하였습니다.) [54] azurespace3257 10/03/24 3257 0
20503 [일반] 가수 이성진 사기혐의로 청주에서 긴급체포, 개그맨 김태현 폭행혐의로 입건 [42] 권보아14042 10/03/24 14042 0
목록 이전 다음
댓글

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