2019년 05월 29일
xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다.
먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다.
각 사원은 딱 한 번씩 경기를 합니다.
각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다.
만약 숫자가 같다면 누구도 승점을 얻지 않습니다.
전체 사원들은 우선 무작위로 자연수를 하나씩 부여받았습니다. 그다음 A팀은 빠르게 출전순서를 정했고 자신들의 출전 순서를 B팀에게 공개해버렸습니다. B팀은 그것을 보고 자신들의 최종 승점을 가장 높이는 방법으로 팀원들의 출전 순서를 정했습니다. 이때의 B팀이 얻는 승점을 구해주세요.
A 팀원들이 부여받은 수가 출전 순서대로 나열되어있는 배열 A와 i번째 원소가 B팀의 i번 팀원이 부여받은 수를 의미하는 배열 B가 주어질 때, B 팀원들이 얻을 수 있는 최대 승점을 return 하도록 solution 함수를 완성해주세요.
제한사항
A와 B의 길이는 같습니다.
A와 B의 길이는 1 이상 100,000 이하입니다.
A와 B의 각 원소는 1 이상 1,000,000,000 이하의 자연수입니다.
이 문제에서 핵심 부분은 가장 낮은 숫자로 가장 높은 숫자를 사용하게 만드는 것이다. 예를 들면, A의 최고 숫자가 9, B의 최저 숫자가 1이라면 B는 1로 9를 버리게 하는 것이 베스트다.
하지만 위에 룰만 적용시킨다면, B는 모든 숫자가 A보다 큰데 낮은 숫자를 버리는 경우도 생길 수 있다. ex) A = [2, 3, 5, 7], B = [3, 4, 6, 9] 상황에서 B가 3으로 A의 7을 써버리는 상황
그렇기에 A의 가장 낮은 숫자와 B의 가장 낮은 숫자를 비교했을 때 B가 더 낮다면, A의 가장 큰 숫자를 버리는 로직을 구현해야한다.
반복문은 A의 길이만큼 돌기 때문에, left 변수를 통하여 만약 가장 낮은 숫자가 A가 더 큰 경우 B는 앞에서 한개(i) A는 뒤에서 한 개(left를 증가하지 않음) 를 비교 대상에서 제외한다.
function solution(A, B) {
var answer = 0;
let left = 0;
A.sort((a, b) => a - b);
B.sort((a, b) => a - b);
for (let i = 0; i < A.length; i++) {
if (A[left] < B[i]) {
left++;
answer++;
}
}
return answer;
}
Parameters | Return |
---|---|
[5, 1, 3, 7], [2, 2, 6, 8] | 3 |
[2, 2, 2, 2], [1, 1, 1, 1] | 0 |
[3, 2, 1, 4], [1, 7, 7, 2] | 3 |
[1], [1] | 0 |
Programmers Level 3 - 2018 Summer coding
2019년 06월 03일
## 문제 N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5g 기지국은 4g 기지국보다 전달 범위가 좁아, 4g 기지국을 5g 기지국으로 바꾸면 어떤 아파트에는 전파가 도달하지 않습니다. 예를 들어 11개의 아파트가 쭉 늘어서 있고, [4, 11] 번째 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 만약 이 4g 기지국이 전파 도달 거리가 1인 5g 기지국으로 바뀔 경우 모든 아파트에 전파를 전달할 수 없습니다. (전파의 도달 거리가 W일 땐, 기지국이 설치된 아파트를 기준으로 전파를 양쪽으로 W만큼 전달할 수 있습니다.) - 초기에, 1, 2, 6, 7, 8, 9번째 아파트에는 전파가 전달되지 않습니다. ![](https://res.cloudinary.com/jistring93/image/upload/v1492073407/%EA%B8%B0%EC%A7%80%EA%B5%AD%EC%84%A4%EC%B9%981_pvskxt.png) - 1, 7, 9번째 아파트 옥상에 기지국을 설치할 경우, 모든 아파트에 전파를 전달할 수 있습니다. ![](https://res.cloudinary.com/jistring93/image/upload/v1492073617/%EA%B8%B0%EC%A7%80%EA%B5%AD%EC%84%A4%EC%B9%982_kml0pb.png) - 3개의 아파트보다 더 많은 아파트 옥상에 기지국을 설치할 경우에도 모든 아파트에 전파를 전달할 수 있습니다. ![](https://res.cloudinary.com/jistring93/image/upload/v1492073725/%EA%B8%B0%EC%A7%80%EA%B5%AD%EC%84%A4%EC%B9%983_xhv7r3.png) 이때, 우리는 기지국을 **최소로 설치**하면서 모든 아파트에 전파를 전달하려고...
2019년 05월 30일
## Q1. 프로그래밍을 시작한 경위와 본격적으로 투신하고 생업으로 삼기로 결정한 이야기를 해주세요. 어릴 때부터 컴퓨터와 무엇을 만든다는 것에 흥미가 많았습니다. 예를 들어 고무줄 총 만들기, 스타크래프트 유즈맵 만들기 등이 있습니다. 그러다 보니 프로그램을 만들어보자는 생각에 방과 후 수업 및 방학 동안 선린인터넷고등학교에서 교육을 받으며 프로그래밍을 시작했고, 자연스럽게 특성화 고등학교에 진학하게 되었습니다. 프로그래밍은 공부할수록 부족하다는 것을 알려주고 더 나은 방향을 제시해주어 끊임없이 발전할 수 있게 해줍니다. 이렇게 공부한 만큼 결과가 나온다는 것이 가장 매력이고 재미있는 부분이라고 생각합니다. 저는 이러한 프로그래밍을 계속 배우고 즐기기 위해 생업으로 삼았습니다. ## Q2. 좋은 개발자가 되기 위해 갖추어야 한다고 생각하는 덕목 셋을 고르고 그 이유를 말해주세요. (예를들어 책임감, 꼼꼼함, 유연성 등등) 학습, 경청, 책임감 좋은 개발자는 도태되지 않으며 다른 사람들의 의견에 귀 기울이고 자신의 코드에 책임감을 느껴야 한다고 생각합니다. **학습** 개발이라는 분야는 빠르게 변화합니다. 하루 만에 라이브러리가 지원되거나 개선되고, 갑자기 지원하던 라이브러리가 갑자기 중단되기도 합니다. 이러한 상황에서 개발자는 '학습'을 통해 더 나은 방향으로 계속 나아가야 합니다....
2019년 05월 27일
fatal: refusing to merge unrelated histories 로컬 저장소에서 Git Repo 생성 후 push 하는 경우, 프로젝트 충돌로 나타나는 오류이다. git pull origin main --allow-unrelated-histories