📋 개요
2024.01.29 - [Algorithm/Problem] - [Softeer] 금고털이(Lv.2) - Day2
2024.01.29 - [Algorithm/Problem] - [Softeer] 회의실 예약(Lv.2) - Day2
2일 차에 이어서 3일차! 꼭 풀어내고야 말겠다는 다짐을 하면서 문제를 풀었다. 이번에는 Lv.2, Lv.3였다. 2일차 회의실예약의 빡구현에서 아주 오랜 삽질을 하고 정말 많이고민했다... 나는 왜이렇게 코테를 못하는걸까? 하지만 못하는 것만 알았지 왜 못하는지는 찾아내지 못했다. 그래서 왜 못하는지 찾을 때까지 계속 공부해야겠다.
왜 못하는지 찾아서 고치면 잘 할수 있지 않을까?
푼 문제는 GBC(글로벌 비즈니스 센터)이다. 이게 맞는 표현인지는 모르겠지만 내가 생각하는 Layer?를 활용해서 푸는 문제인거 같다.
https://softeer.ai/practice/6270
🧩 문제
글로벌 비즈니스 센터(GBC, Global Business Center)는 현대자동차그룹 통합 사옥이다.
지하 7층, 지상 105층, 높이 약 570m의 규모로 2026년 하반기에 완공을 목표로 현재 공사 중에 있다.
이러한 초고층 높이의 빌딩에는 초고층 승강기가 들어가야 한다. 엘리베이터 정비공인 광우는 0m 부터 100m까지 일정 구간들의 엘리베이터 속도를 검사하는 업무를 맡게 되었다.
빌딩에서 운영되는 엘리베이터 구간은 N개의 구간으로 나뉘며 해당 구간의 제한 속도이 주어진다. 구간의 총 합은 100m 이며 각 구간별 구간의 길이와 제한 속도 모두 양의 정수로 주어진다.
예를 들어보자. 구간이 3이라고 할 때,
▶ 첫 번째 구간의 길이는 50m 이고 제한 속도는 50m/s
▶ 두 번째 구간의 길이는 40m 이고 제한 속도는 40m/s
▶ 세 번째 구간의 길이는 10m 이고 제한 속도는 30m/s
이 구간에서 제한 속도를 벗어나면(즉 제한속도를 초과하면) 서버에 초과한만큼의 속도가 로그에 남는다. 불행하게도 현재 서버의 상태가 off 상태임으로 광우는 서버의 데이터를 받아볼 수가 없다. 광우는 임의의 구간의 길이와 속도를 정하여 시범운행 할 때, 가장 제한 속도가 크게 벗어난 값을 스스로 구해야 한다.
M개의 구간을 검사한다고 할 때 예를 들면,
▶ 첫 번째 구간의 운행 길이는 60m 이고 속도는 76m/s
▶ 두 번째 구간의 운행 길이는 18m 이고 속도는 28m/s
▶ 세 번째 구간의 운행 길이는 22m 이고 속도는 50m/s이라고 했을 때, 제한 속도를 벗어나 가장 차이가 큰 속도를 구해 보자.
첫번째 구간 50m 까지에서 제한 속도와 실제 운행 속도를 비교했을 때, 제한 속도를 26m/s 초과했다. 이후 두번째 구간과 실 운행한 첫번째 구간이 10m 정도 겹치는데, 이때 제한 속도를 36m/s 초과하게 된다.
그 이후 구간들에서는 차이가 그보다 크지 않으므로 가장 큰 속도 차이는 36m/s임을 알 수 있다.
주어진 구간의 제한속도와 광우가 테스트한 구간의 속도를 기준으로 가장 크게 제한 속도를 넘어간 값이 얼마인지 구해보자.
⛔ 제약조건
1≤ N, M ≤100
📝 형식
📥 입력 | 📤 출력 |
첫 줄에 N과 M이 주어진다. 그 다음 줄부터 N개의 줄은 각 구간의 길이 및 해당 구간에서의 제한 속도가 주어지며, 다음 M개의 줄은 광우가 테스트하는 구간의 길이와 속도가 주어진다. | 광우가 시범운행을 하는 동안 제한 속도를 가장 크게 벗어난 값을 출력 한다. 단 제한 속도를 벗어나지 않은 경우는 0을 출력 한다. |
💡 예제
🔢 번호 | 📥 입력 | 📤 출력 |
1 | 36 | |
2 | 10 |
🖥️ 내 코드
📖 해설 및 느낀점
# 풀이
개요 부분에서 설명할때, Layer라는 표현을 써서 진행을 했다. 문제 풀때 생각보다 저렇게 뭔가 계층구조로 해서 연산을 하는게 더 편할때가 있다. 자체적으로 코테에 대한 강의를 들은 것이 아니라서 나혼자 Layer라고 표현하는게 맞나 싶지만..... 정확한 용어가 있으면 알려주시면 감사하겠다.
처음에는 일단 문제 자체를 이해 하지 못했다. 30분 정도 수직선을 그리면서 도대체 예제 값에서 나온 36이라는 숫자를 찾는데 고민했다. 사실 문제 자체는 어려웠던게 아니라 내 문해력이 좀 딸렸던거 같다. 결국에 테스환경과 실제환경?에서 차이를 구해 그 구간의 차이의 최대값을 찾으면 되는 내용이였다.
그래서 내가 말한 Layer(최대 100미터이니깐)를 0 ~ 100까지 array를 만들어서 실제 환경과 테스트환경에서 도출되야하는 값들을 속도를 다 넣었다.
그리고 새로운 array를 만들어서 테스트환경 - 실제 환경을해서 두개의 차를 구할 array에다 담는다. 그리고 그 array안에 최대 값을 찾으면 끝난다.
사실은 array 한개로 다 끝낼 수 있어서 그렇게 코드를 작성해서 진행했다. 그안에서 입력을 받자마자 순차적으로 다 빼버렸고, 출력에는 iterator를 써서 최대값을 찾아냈다.
# C++ 문법 - max_element
max_element라고 키워드를 검색하면 vector 연산자에서 사용할 수 있는 것으로 나온다. 하지만 Array 자료구조에서도 사용을 할 수 있다.
cout << *max_element(arr , arr +101); //최대값 찾기
max_element(시작 iterator, 끝 iterator) ➡️ 주소값이기 때문에 *(역참조)해줘야함
여기서 iterator값을 넣어줘야하는데 arr에서 시작점은 첫번째 index의 주소값과 동일하고 마지막은 arr에서 마지막 index와 같기 때문에 해당 주소 값을 넣어주면 된다.
# 후기
내가말하는 layer처럼 3개를 깔고 하나씩 하나씩 연산을 해주고 최대값을 찾으면 되기 때문이다. 문해력만 딸릴뿐....!
'Algorithm > Problem' 카테고리의 다른 글
[Softeer] 비밀메뉴2(Lv.3) - Day4 (0) | 2024.01.29 |
---|---|
[Softeer] 우물 안 개구리(Lv.3) - Day3 (0) | 2024.01.29 |
[Softeer] 회의실 예약(Lv.2) - Day2 (0) | 2024.01.29 |
[Softeer] 금고털이(Lv.2) - Day2 (0) | 2024.01.29 |
[Softeer] 근무 시간(Lv.1) - Day1 (0) | 2024.01.26 |