👀 문제
https://programmers.co.kr/learn/courses/30/lessons/42584
👊 첫 번째 도전
1. 설계
- 이중 for문을 사용하여 i를 기준으로 두고, j로 뒷 원소들과 비교한다.
- i보다 같거나 큰 원소들의 갯수를 세서 answer에 저장한다.
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
*
* @author HEESOO
*
*/
class Solution {
public int[] solution(int[] prices) {
int[] answer = {};
int cnt=0;
answer=new int[prices.length];
for(int i=0;i<prices.length-1;i++){
for(int j=i+1;j<prices.length;j++){
if(prices[i]<=prices[j]){
cnt++;
}
}
answer[i]=cnt;
cnt=0;
}
return answer;
}
}
3. 결과
실패. 테스트케이스만 통과하고 실제 검사에서는 모두 틀렸다.
4. 문제점
테스트케이스만 생각하고 원소에 작은 값이 나올 경우를 생각하지 않았다. 아래의 케이스도 생각해준다.
prices | return |
---|---|
[4,2,3,2,3] | [1,3,1,1,0] |
👊 두 번째 도전
1. 설계
- 이중for문을 돌다가 i보다 큰 j를 발견하면 그 뒤는 볼 필요도 없으므로 answer[i]=j-i를 넣고 break한다.
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
*
* @author HEESOO
*
*/
class Solution {
public int[] solution(int[] prices) {
int[] answer = {};
answer=new int[prices.length];
for(int i=0;i<prices.length-1;i++){
for(int j=i+1;j<prices.length;j++){
if(prices[i]>prices[j]){
answer[i]=j-i;
break;
}
if(j==prices.length-1){
answer[i]=j-i;
}
}
}
return answer;
}
}
- 라인12: i보다 큰 j를 발견했다면 유지한 초를 계산(j-i)후, break문으로 다음 i로 넘어간다.
- 라인16: 마지막 j까지 체크했지만 i보다 큰 j를 발견하지 못했다면 유지한 초를 계산한다. 해당 if문은 i가 마지막 j까지 순회를 비교를 끝냈을 경우에만 answer에 값을 넣을 수 있도록 하였다.
3. 결과
🤟 성공 🤟
👏 해결 완료!
스택, 큐 문제지만 배열을 이용해서 쉽게 풀 수 있었다. 여담으로 코드에 System 출력문을 써놓고 돌렸더니 효율성에서 죄다 실패가 떴었다. 출력문을 지우니 모두 성공하긴 했는데, 하마터면 더 좋은 효율성을 찾아 머리를 쥐어짤 뻔했다. 휴;