선생님 질문있습니다.
155
작성한 질문수 18
import java.util.HashMap;
import java.util.Scanner;
public class Main {
static void Solution(int n, int k, int[] arr){
int lt = 0;
HashMap<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < k; i++) {
map.put(arr[i],map.getOrDefault(arr[i],0)+1);
}
String result = map.size()+" ";
for (int rt = k; rt < n; rt++) {
map.put(arr[rt],map.getOrDefault(arr[rt],0)+1);
map.put(arr[lt],map.getOrDefault(arr[lt],1)-1);
if(map.get(arr[lt]) == 0) map.remove(arr[lt]);
result += map.size()+" ";
lt++;
}
System.out.println(result);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
Solution(n, k, arr);
}
}
선생님, 만약 k = 4일때 강의에서는 0~2번까지만 미리 구해서 map에 넣어둔 상태에서 아래 투포인트 for문에서
1. rt값 더하고
2. map.size() 입력하고
3. lt값 빼고 , lt == 0 체크
이런식으로 진행하시는데
제 로직은 첫for문에서 0~3까지 다 구해놓고 처음 map.size()를 초기값으로 준 후 다음 투포인트 for문에서
1. rt값 더하고
2. lt값 뺴고, lt == 0 체크
3. map.size() 입력하고
이렇게 로직을 구현했는데 TimeLimit이 발생하네요.
결국에는 그림으로 설명해주신것 처럼 네칸씩 구하는
방식은 똑같은것 같은데 이유를 알 수 있을까요..
답변 1
0
안녕하세요^^
답을 result라는 스트링에 처리하면 속도가 떨어집니다.
다음 글을 참조하세요.
https://jaehun2841.github.io/2019/03/01/effective-java-item63/#%EC%84%9C%EB%A1%A0
ArrayList<Integer> result = new ArrayList<>(); 선언하시고
ArrayList에 add한 후 출력하시면 통과될겁니다.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
69
2
갑자기 채점 사이트가 바뀌었어요
0
50
1
문제 리스트 페이지
0
41
1
채점 사이트 관련 질문드립니다
0
38
1
봉우리 문제 질문입니다
0
102
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
72
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
78
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
76
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
94
2
6-7 강의에서
0
53
1
6-6. 장난꾸러기 질문 있습니다.
0
50
1
강의 수강후 코딩테스트
0
124
1
answer 변수 사용 여부
0
50
1
2중 for문
1
96
2
2-11. 임시반장정하기 (Runtime Error)
0
66
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
75
1
이런 풀이는 어떨까요
0
50
1
자바 스트림 방식의 효율성 질문 드립니다.
0
62
1
알고리즘 자료 구조들..
0
68
1
StringBuilder vs BufferdWriter
0
52
1
원더랜드(프림)
0
55
1
이런 코드는 어떤가요?
0
66
1
bfs 풀이
0
61
1
병합정렬
0
58
1





