해당 문제를 마지막으로 조별과제 이벤트를 완료하게 되었습니다. 그간 미뤄왔던 Novice Low 단계를 졸업하고 Novice Mid도 어느덧 2/3 정도 해결을 했네요...! 물론 중도에 막히기도 해서 알고리즘 기초부터 하나씩 풀어나가는 중인데, 알고리즘 문제를 풀면 풀수록 "얼른 블로그를 이사해야겠다..." 라는 생각이 들었습니다. (워낙 블로그에 축약 및 요약해야할 내용들이 많다보니...)
그래도 이번 조별과제를 하면서 코테 공부도 제법 되었고, 자동으로 깃 커밋도 되어서 잔디가 하루 하루 깔리는 보람도 느꼈는데 이젠 무료 이벤트가 지나면 그럴 수 없다는게 아쉬워 지네요... 🤣 그래도 돈이 여유가 생기면 한 달이라도 결제를 해보고자 합니다. (물론 요즘은 국비 학원 공부에 사플도 두 개 하는 중이라 알고리즘 공부할 시간이 없지만...)
무튼 마지막 조별과제 제출도 열심히 풀어봤습니다! 이번주는 정말 어렵고도 어렵다는 완탐을 풀었고요! (물론 배열 기록이 더 어렵지만... ㅋㅋㅋ)
- JS 버전
const fs = require('fs'); const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n'); const n = Number(input[0]); const people = input[1].split(" ").map(Number); // 최소 거리를 찾아야 하므로 최대값(Infinity)로 설정 let min = Infinity; for (let i = 0; i < n; i++) { let total = 0; for (let j = 0; j < n; j++) { /* i가 집이고, j가 사람이라고 하면 편한데 만약 첫번째 집(i가 0일때)일때를 기준으로 거리를 구하고자 할때는 첫번째 사람(1)은 자기 집에 있으니 1 * 0이 됨 (거리 없음) 그러나 두번째 사람(2)은 거리가 1이 걸리기 때문에 2 * 1이 걸림 나머지도 3 * 2, 2 * 3, 6 * 4 만큼의 거리가 걸림 그래서 이들의 합이 36이 되는거임 반대로 3번의 집(i가 2 일때)는 처음부터 계산해보면 1 * (2 - 0), 2 * (2 - 1), 3 * (2 - 2), 2 * (2 - 3), 6 * (2 - 4)의 거리 계산이 나옴 그래서 결과가 18이 나오는 것임 */ total += people[j] * Math.abs(i - j); } // 전체 구한 거리의 합이 최소거리의 값보다 작을 때 그 값으로 대체 if (total < min) { min = total; } } console.log(min);
- JAVA 버전
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 첫 번째 줄의 입력을 읽습니다. int n = scanner.nextInt(); // 두 번째 줄의 입력을 읽습니다. int[] people = new int[n]; for (int i = 0; i < n; i++) { people[i] = scanner.nextInt(); } // 최소 거리를 무한대로 초기화합니다. long min = Long.MAX_VALUE; // i를 집의 위치로 보고, j를 사람의 위치로 보고 거리를 계산합니다. for (int i = 0; i < n; i++) { long total = 0; for (int j = 0; j < n; j++) { total += people[j] * Math.abs(i - j); } // 현재 계산된 거리가 최소 거리보다 작으면 업데이트합니다. if (total < min) { min = total; } } // 결과를 출력합니다. System.out.println(min); // Scanner 객체를 닫습니다. scanner.close(); } }
사실 이번에 조별과제를 참여하면서 백준이나 프로그래머스에서는 볼 수 없었던 AI나 답변들을 보고 굉장히 만족을 해서 사용했습니다. 특히 이번 코드 피드백을 계기로 "다음 달에 수급비를 받으면 한 번 학생 할인을 받아서 질러봐야겠다." 는 생각까지 들었어요. (물론 해커랭크 입문했다가 정신 나간 가격에 광탈하고 돌아왔다는 말은 못합니다 ㅎ...)
다만 좀 아쉬웠던건 답변을 받는 부분이었는데, 하루 하루 꾸준히 푸는 입장에서 토론글에 전문적으로 답변을 달아주시는 분들의 피드백을 받는다는 점에서도 메리트가 있긴 한데,
답변을 꾸준히 달아주시기는 하는데 아무래도 답변을 달아도 몇 시간은 기다려야 하니 한 문제가 막히면 이에 대한 답변을 받느라 또 문제를 푸는데 집중을 할 수 없다는 단점도 생길 수 밖에 없었던 듯 합니다. (특히 Novice mid 중간부터 막혀서 전날 저녁 즈음 답변을 달면 오후 늦게 답변이 달리는 부분은 좀 아쉽더라고요. 근데 이 부분은 달아주시는 분도 일을 하시거나 다른 일을 하시는 분일수도 있으니 아쉬운 부분이라고 해야하나...)
이번 조별과제 이벤트가 끝난 현재는 조만간 사플에 집중을 할 계획이긴한데, 이번에 블로그를 이사할 때 제가 정리했던 블로그 글들을 다시 한 번 정리하면서 여태껏 풀었던 코드트리 문제들을 제대로 리포스팅 해볼 생각까지 갖게 해주었던 의외로 뜻깊었던 시간이었던 것 만큼은 분명합니다!