PGR21.com 배너 1

- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
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
수정 아이콘
전 최대힙 정도로 생각했는데 범위가 유동적이라서 힙으로는 해결 안될 문제 같고 그냥 손놨습니다-_-;;;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
20509 [일반] 쇼트트랙 빙상연맹 밥그릇 싸움 문제가 다시 불거졌네요 [21] Jess4382 10/03/24 4382 0
20508 [일반] 인터넷 악플러 때문에 경찰서에 고소 하고 왔습니다... (有) [40] Eva0106106 10/03/24 6106 0
20507 [일반] 2010 챔피언스리그 4강전 경기를 관람하게 됐습니다~! [35] 질롯의힘4729 10/03/24 4729 0
20506 [일반]  KBS.MBC "월드컵 공동중계 성사안되면 K리그 중계 안하겠다" [43] 반니스텔루이5367 10/03/24 5367 1
20505 [일반] [문제편] 자료구조와 알고리즘에 대해 생각해 봅시다. (문제 순화하였습니다.) [54] azurespace3293 10/03/24 3293 0
20503 [일반] 가수 이성진 사기혐의로 청주에서 긴급체포, 개그맨 김태현 폭행혐의로 입건 [42] 권보아14231 10/03/24 14231 0
20502 [일반] 결정에서 오는 스트레스 [36] 한사영우4019 10/03/24 4019 0
20501 [일반] 여성 직장문제+육아문제. [27] 삭제됨4947 10/03/24 4947 0
20499 [일반] 볼수록 애교만점 보시나요? [5] christal4238 10/03/24 4238 0
20498 [일반] 프로그래머의 길을 걷는 후배님들께 [66] Je ne sais quoi9001 10/03/24 9001 0
20497 [일반] 탁구 선수 이름 한글 표기에 대한 원칙 고민 [7] 김스크3971 10/03/24 3971 0
20496 [일반] 요새 성남 정말 잘나가네요 (신과르디올라) [20] bilstein3943 10/03/24 3943 0
20495 [일반] 이건희 삼성전회장 삼성회장으로 복귀 [102] The Greatest Hits6946 10/03/24 6946 0
20492 [일반] 김제동氏 어머니와 노무현 대통령 이야기 [12] nam9ya5645 10/03/24 5645 1
20491 [일반] [음악] John Mayer - Gravity [9] 덴드로븀3296 10/03/24 3296 0
20490 [일반] 처음으로 헤어지고 나서 [10] 삭제됨4347 10/03/24 4347 0
20489 [일반] 디아2가 리셋한다고 하니 옜생각에 눈물이 앞을 가립니다. [161] 삭제됨6765 10/03/24 6765 0
20487 [일반] 펌글[The Bling, 2009/08, 제54호] 쪽수의 변이 - 기고 UMC/UW [5] DeadOrUndead3563 10/03/24 3563 0
20486 [일반] [음악] 야밤에 이런 음악..? (5) (수정) [22] 코리아범3740 10/03/23 3740 0
20485 [일반] [예능이야기]하하와 김종민, 그리고 무한도전과 1박 2일. [36] Hypocrite.12414.9729 10/03/23 9729 0
20484 [일반] [아이돌] 낚시가 현실로?? 유노윤호 웸블리 무대에 서다... [67] 예수6035 10/03/23 6035 0
20481 [일반] 16193에 있는 8-90년대 애니메이션 단상 [9] 드라고나6079 10/03/23 6079 0
20480 [일반] [축구]이천수선수 한국으로 돌아왔네요. [39] ROKZeaLoT5278 10/03/23 5278 0
목록 이전 다음
댓글

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