덧칠하기 - level1코딩테스트 - Java2024. 9. 21. 00:50
Table of Contents
728x90
- 문제
https://school.programmers.co.kr/learn/courses/30/lessons/161989?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 풀이
문제 풀이 시간 : 40~45분
class Solution {
public int solution(int n, int m, int[] section) {
int answer = 0;
int plus = section[0];
for(int i = 0; i < section.length; i++){
plus = plus + m - 1;
int temp = plus;
answer += 1;
for(int k = i; k < section.length; k++){
if(section[k] > plus){
plus = section[k];
break;
}
}
if(temp == plus){
break;
}
}
return answer;
}
}
오늘 문제는 중첩 for문을 줄이기 위해
푸는 속도보단 더 나은 코드를 생각해보았지만,
생각해내지 못했다...
그래서 중첩 for문을 써서 푼 다음
가장 잘 푼 사람의 코드를 분석했다
class Solution {
public int solution(int n, int m, int[] section) {
int roller = section[0];
int cnt = 1;
for(int i = 1; i < section.length; i++) {
if(roller + m - 1 < section[i]) {
cnt++;
roller = section[i];
}
}
return cnt;
}
}
나와 이분들의 코드 차이점은
나는 롤러를 쓰면서, 그 다음 롤링할 부분을 찾기 위해 다시 한번 해당 리스트를 돌아야 하는
비효율적인 방법을 썼지만,
이분들은 일단 무조건 한번은 칠해야 한다는 점을 이용했고, 롤러에 집중하기 보다는 배열 속 원소들에 집중을 하셨다.
칠한 부분이 해당 원소 값을 넘어가면, 그냥 그 값을 넘어가면 된다는 아주 쉬운 접근이다.
나는 그 값을 어떻게든 배열에서 제외하거나 포인터를 이용하는 등 쉬운 접근을 생각하지 못했다.
참 똑똑하신 분들이다...
728x90
'코딩테스트 - Java' 카테고리의 다른 글
| 2016년, 옹알이(2) - level1 (1) | 2024.09.22 |
|---|---|
| 기사단원의 무기, 비밀지도 - level1 (2) | 2024.09.21 |
| 프로그래머스 코딩테스트 in Java (2) | 2024.09.20 |
| 99클럽 코테 스터디 11일차 TIL + 오늘의 학습 키워드 : null (8) | 2024.08.21 |
| 99클럽 코테 스터디 11일차 TIL + 오늘의 학습 키워드 : 포인터 (0) | 2024.08.01 |
@or-else :: orElse의 팔만대장경
안녕하세요. 성장하고 싶은 개발자 orElse입니다. 지켜봐주세요.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!