Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ObjectOptimisticLockingFailureException
- Spring Cloud Gateway
- DI
- springsecurity
- netty
- redissonlock aop
- jpa
- spring aop
- 형상관리
- aop
- OptimisticLock
- @transactional
- 낙관적 락 롤백
- 우아한 테크러닝
- ObjectOptimisticLockingFailureException 처리
- 백준
- kotest testcontainers
- AccessToken
- Invalid property 'principal.username' of bean class
- 알고리즘
- spring DI
- 낙관적 락 재시도
- RefreshToken
- multimodule testcontainers
- interface
- 소수찾기 java
- java
- 멀티모듈 테스트컨테이너
- TestContainers
- S3
Archives
- Today
- Total
조급하면 모래성이 될뿐
2018 윈터코딩 쿠키 구입 본문
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/49995
코딩테스트 연습 - 쿠키 구입 | 프로그래머스
과자를 바구니 단위로 파는 가게가 있습니다. 이 가게는 1번부터 N번까지 차례로 번호가 붙은 바구니 N개가 일렬로 나열해 놨습니다. 철수는 두 아들에게 줄 과자를 사려합니다. 첫째 아들에게는 l번 바구니부터 m번 바구니까지, 둘째 아들에게는 m+1번 바구니부터 r번 바구니까지를 주려합니다. 단, 두 아들이 받을 과자 수는 같아야 합니다(1 <= l <= m, m+1 <= r <= N). 즉, A[i] 를 i번 바구니에 들어있는 과자 수라고 했을 때, A[
programmers.co.kr
나의 풀이
첫째는 l ~ m 까지 둘째는 m+1 ~ r 까지의 범위에서 과자를 받을 수 있다.
여기서 주목할 것은 형은 m에서 끝나고, 동생은 m+1에서 시작한다는 것이다.
** 결국 형은 m부터 최대 첫번째까지 받을 수 있고,동생은 m+1부터 최대 마지막번까지 받을 수 있다.
순서대로 위의 식(**)을 적용하여 max값을 구해 갈 것이다.
예를들어 [ 1,1,11,11,2 ]가 입력받았다면 아래처럼 처리되는 것이다.
형의 index | 동생의 index | 형의 값 | 동생의 값 | max |
0 | 1 | 1 | 1 | 1 |
1 | 2 | 1 | 11 | 1 |
0 | 2 | 2 | 11 | 1 |
2 | 3 | 11 | 11 | 11 |
1 | 3 | 12 | 11 | 11 |
1 | 4 | 12 | 13 | 11 |
0 | 4 | 13 | 13 | 13 |
코드
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
|
package Programmers;
public class BuyCookie {
public static void main(String[] args) {
int[] cookie = {
1,1,11,11,2
};
int answer = solution(cookie);
System.out.println(answer);
}//main
public static int solution(int[] cookie) {
int answer = 0;
// cookie전체 보기
for ( int i = 0 ; i < cookie.length-1; i++ ) {
// i를 기준으로 이전 값을 더해간다.
int cur = i ;
int curSum = cookie[cur] ;
// i+1을 기준으로 이후 값을 더해간다.
int next = i+1 ;
int nextSum = cookie[next];
while ( true ) {
if ( curSum == nextSum ) {
answer = Math.max( answer, curSum );
}
if ( curSum <= nextSum && cur > 0 ) {
cur--;
curSum += cookie[cur];
}else if ( nextSum <= curSum && next < cookie.length-1 ) {
next++;
nextSum += cookie[next];
}else break;
}
}
return answer;
}
}//class
|
cs |
제출 결과
반응형
'Algorithm' 카테고리의 다른 글
2018 윈터코딩 방문 길이 (0) | 2019.10.24 |
---|---|
2018 윈터코딩 스킬트리 (0) | 2019.10.24 |
[백준] 1966 프린터 큐 (0) | 2019.10.15 |
프렌즈4블록 (0) | 2019.08.22 |