안녕하세요. delay100 입니다. 오늘도 TIL 작성합니다!
미들러 문제. 덧칠하기
https://school.programmers.co.kr/learn/courses/30/lessons/161989
미들러문제 치고는 난이도가 비기너 느낌이었던..(아쉬움)
wall 배열을 만들어서 칠해야 하는 벽에만 양수를 넣어주고,
wall 배열을 순회하면서 칠해야하는 벽을 만나면 answer값을 증가시키고, 현재 index를 m-1만큼 증가시켰습니다.
m-1만큼 증가시킨 이유는 for문을 순회하면서 i++이 무조건 실행되기 때문에 m-1을 해야 다음 for문에서 m만큼 이동하기 때문입니다.
class Solution {
public int solution(int n, int m, int[] section) {
int answer = 0;
int[] wall = new int[n+1];
for(int i=0; i<section.length; i++) {
wall[section[i]]++;
}
for(int i=1; i<(n+1); i++) {
if(wall[i]>0) {
answer++;
i+=(m-1);
}
}
return answer;
}
}
원래 챌린저 문제는 풀지 않았지만 오늘은 아쉬워서 챌린저문제도 풀어보았습니다.
사실 풀고 싶었는데 도저히 아이디어가 떠오르지 않아서 여러 해설을 찾아보고 풀었습니다..ㅠㅠ
우선순위큐를 사용하는 해설이 많았는데..
최근에 우선순위큐를 다룬적이 없어서 잘 모르겠어서 배열을 사용한 간단한 방법으로 해결했습니다.
챌린저 문제. 호텔 대실
https://school.programmers.co.kr/learn/courses/30/lessons/155651
핵심은 주어진 시간(HH:MM)을 분(9999이내 숫자)으로 변경하는 것입니다.
subString으로 시간과 분을 분리시켜주고, 시간에는 60을 곱하고 분에는 9분을 더합니다.
- 시간에 60을 곱하는 이유?
-> 시간을 분으로 만들기 위함입니다.
- 분에 9를 더하는 이유?
-> 9분동안은 현재 객실을 사용할 수 없기 때문입니다.(객실을 사용중 처리함)
그리고 미리 만들어둔 time(분) 배열에 start부터 end까지 +1을 해줍니다.
사용중인 시간인 경우 +1을 해주는 것인데, 이로써 하나의 시간에 몇 개의 객실이 필요한지 알 수 있습니다.
객실 수를 +1을 할 때마다 최대 객실 수를 나타내는 max값도 같이 찾아주었습니다.
추가적으로 time 배열의 최대 크기를 1499로 잡은 이유는 최대 시간인 23:59가 1380+59+59 = 1,498이기 때문입니다.
class Solution {
public int solution(String[][] book_time) {
int max = 0;
int[] time = new int[1499];
// start와 end 내의 배열 index에 cnt값 증가시키기
for(int i=0; i<book_time.length; i++) {
// 시간(HH:MM) -> 분(9999이내 숫자) 변경
int start = Integer.parseInt(book_time[i][0].substring(0, 2))*60 + Integer.parseInt(book_time[i][0].substring(3, 5));
int end = Integer.parseInt(book_time[i][1].substring(0, 2))*60 + Integer.parseInt(book_time[i][1].substring(3, 5))+9;
// System.out.println("book_time[i][0].substring(0, 1)= " + book_time[i][0].substring(0, 1));
// System.out.println("start=" + start + " /end = " + end);
for(int j=start; j<=end; j++) {
time[j]++;
// 증가시키면서 max값도 찾기
if(time[j] > max) max = time[j];
}
}
return max;
}
}
+ 비기너 문제
x만큼 간격이 있는 n개의 숫자 (https://school.programmers.co.kr/learn/courses/30/lessons/12954)
봐주셔서 감사합니다. 피드백 환영합니다.
'항해99 > 99club1기TIL' 카테고리의 다른 글
[99club/TIL] 3주차 - 금요일 TIL(Today I Learned) (0) | 2024.04.12 |
---|---|
[99club/TIL] 3주차 - 목요일 TIL(Today I Learned) (0) | 2024.04.11 |
[99club/TIL] 3주차 - 월요일 TIL(Today I Learned) (0) | 2024.04.08 |
[99club/TIL] 2주차 - 일요일 TIL(Today I Learned) (0) | 2024.04.07 |
[99club/TIL] 2주차 - 토요일 TIL(Today I Learned) (0) | 2024.04.06 |