| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- actuator
- 백엔드공부
- JWT
- SpringSecurity
- 서버
- 스프링부트
- Java
- ORM
- TestCode
- 백엔드
- 개발자
- QueryDSL
- spring
- JPA
- 백준
- spring boot
- array
- queue
- SpringBoot
- restTemplate
- 프로그래머스
- error
- 핵심가이드
- 컴퓨터 공학
- 연관관계
- LinkedList
- 백엔드스쿨
- 자료구조
- 컴퓨터 구조
- 제로베이스
Archives
- Today
- Total
be_better
[프로그래머스] 프로세스 본문
목차
💎 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📝 문제

✍🏻 입력 & 출력

🤔 풀기 전에 생각하기
처음 배열의 location값을 잃지 않도록 계속 갖고 있어야겠다.
배열을 처음부터 끝까지 다 확인하고 제일 앞 숫자가 제일 큰 수가 아니라면 맨 뒤에 추가하고
처음 저장한 값의 위치는 계속 이동하기 때문에 신경써서 갱신해줘야 한다.
제일 앞 숫자가 제일 큰 수 라면 count를 증가 시키고 LinkedList에서 빠져나가도록 한다.
제일 앞 숫자가 제일 크고 원래 원하던 위치의 값이라면 count를 증가 시키고 count를 return
✨ 풀이
import java.util.LinkedList;
import java.util.List;
public class Solution {
public int solution(int[] priorities, int location) {
LinkedList<Integer> list = new LinkedList<>();
int target = priorities[location]; // 처음 값 저장
priorities[location] = 0; // priorities는 1부터 들어갈 수 있기 때문에 해당 위치 값을 0으로 만들어서 비교하기 쉽게 함
int count = 1; // 해당 위치의 숫자가 바로 빠져나갈 수 있기 때문에 count는 1부터 시작
for (int i = 0; i < priorities.length; i++) {
list.add(priorities[i]);
}
while (!list.isEmpty()) { // 리스트의 크기가 0보다 클 동안만
boolean flag = true; // 제일 앞 숫자가 제일 큰 수가 아니면 false로 바꿔준다.
int firstNum = list.poll(); // 제일 앞 숫자를 꺼내서 저장할 변수
for (int i = 0; i < list.size(); i++) {
if (firstNum == 0) { // 제일 앞 숫자가 원하는 위치의 값이라면
if (target < list.get(i)) { // 두번째부터의 숫자가 저장해놨던 값보다 크면
list.offerLast(firstNum); // 맨 뒤에 add
flag = false; // count를 증가시킬 수 없게 false로 바꿔준다.
break; // for문을 빠져나감
} else continue; // for문 초기값 i를 하나 증가시키는 역할
} else if (list.get(i) == 0 && firstNum < target) { // for문을 돌다가 원하는 위치의 값 0을 만났지먄 처음 숫자가 target보다 작다면
list.offer(firstNum);
flag = false;
break;
} else if (firstNum < list.get(i)) { // 단지 제일 앞 숫자가 제일 큰 수가 아니라면
list.offer(firstNum);
flag = false;
break;
}
}
/*
* flag가 false로 바뀌지 않고 나왔다면
* 제일 앞 숫자가 list에서 제일 큰 수라는 것을 의미
*/
if (flag && firstNum == 0) return count; // 그 수가 원하는 값이라면 return
if (flag) count++; // 원하는 수가 아니고 단지 제일 큰 수라면 add하지않고 count증가
}
return count;
}
}'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 나누어 떨어지는 숫자 배열 (0) | 2023.08.09 |
|---|---|
| [프로그래머스] 기능개발 (0) | 2023.08.08 |