Start Link - Review
혼자힘으로 풀기(맞음) 복기
자료구조 선정 : 1번팀과 2번팀에 숫자를 넣었다 뺐다 할 것이기 때문에 추가와 삭제가 유연한 ArrayList<Integer>를 사용한다.
알고리즘 생각 1. 불가능한 경우 : 1번팀 또는 2번팀의 크기가 n/2보다 클 경우, i가 n보다 클 경우 2. 정답인 경우 : n명을 다 뽑아서 팀 분배했을 때(뽑는 사람 i == n) 3. 다음 경우 호출 : 1번 팀 선택하는 경우, 2번 팀 선택하는 경우 나눠서 처리
다음 경우 호출할
1번 팀을 선택했을 때 능력치의 합의 차이를 t1이라고 하고, 2번 팀을 선택했을 때 능력치의 합의 차이를 t2라고 할 때, 둘 중 최솟값을 도출해내야 한다. 최종 정답을 ans라고 하자.
초기에 ans 에는 절대 들어갈 수 없는 -1로 초기화한다. 0으로 초기화하지 않는 이유는 능력치 합의 차이가 0이 될 수도 있기 때문에 정답과 혼동되지 않기 위해 -1로 초기화한다.
처음에는 무조건 ans = t1이 들어간다. 그리고 다음 경우의 수에 대해 t1값이 나왔을 때 기존의 ans(이전의 t1)과 이번에 나온 t1을 비교해서 더 작은 값을 선택해야 한다. t1이 불가능한 경우(-1) 아닌데도 ans보다 작다면 이 더 작은 값으로 ans를 갱신해준다.
그런데 아래의 코드를 보면 ans = t1이 반복되는 것을 알 수 있다. 동일한 동작을 어떻게 합칠 수 있을까?
아래의 코드처럼 하면 될까?
아니다. 그 이유는 초기에 무조건 ans = t1이 되만 ans>t1 && t1 != -1 조건을 만족하지 않는다. 그렇기 때문에 OR 로 초기의 조건도 포함시켜 초기에 ans == -1일 때에도 ans = t1을 넣어준다!
짚고 넘어가는 자바 문법
https://app.gitbook.com/@heunnajo/s/java/collection-framework/undefined-1
Last updated