arr생성시 공간
201
작성한 질문수 31
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
답변 1
1
배열의 시작은 0 입니다. 1 이 아닙니다.
그래서 만약 new arr[3] 으로 배열을 생성할 경우에 사용가능한 배열의 공간은
arr[0] , arr[1] , arr[2] 으로 총 3개 입니다.
그래서 일반적으로 배열을 생성할 때는 저장할 갯수 + 1로 공간을 잡아줍니다.
0
안녕하세요 답변 주셔서 감사합니다.
한가지 헷갈리는 부분이 생겨서 답글을 달게 되었습니다.
저는 항상 예를들어 데이터 9개를 넣어야하면
int[] arr = new int[9]
이렇게 생성했는데
"일반적으로 배열을 생성할 때" 그럼
int[] arr = new int[10]
이렇게 선언해야하는 건가요?
0
아뇨 9개 데이터를 넣는 경우라면 말씀하신대로 int[] arr = new int[9]가 맞습니다.
arr[0] ~ arr[8] 까지, 0,1,2,3,4,5,6,7,8 로 총 9개의 데이터를 저장할 수 있습니다.
0
네! 이 부분은 이해했습니다. 답변 감사합니다.
그럼 처음 댓글 달아주셨던 부분과는 어떤 차이가 있는지 추가로 여쭤봐도 될까요?
저장할 갯수 +1로 공간을 잡아준다는게 어떤건지 잘 모르겠습니다.
이게 제가 궁금하다고 올린
arr = new int[n+1]을 이해하는데 도움이 될것같습니다.
0
아 그 부분은 제가 좀 설명을 이상하게 드린 부분이 있었네요
배열의 시작은 0입니다.
그런데 아래 코드의 경우에는 unf[0] 이 아닌 unf[1] 부터 저장을 시도하고 있습니다.
0
설명감사합니다.
제가 이해하기론
1.
unf = new int[n+1];
for(int i=1; i<=n; i++) unf[i]=i;
이렇게 하거나
2.
unf = new int[n];
for(int i=0; i<n; i++) unf[i]=i+1;
둘 다 가능하다고 이해했는데
2번 방법으로 했을때는 에러가 나서요
에러 내용 : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 9 out of bounds for length 9
전체 코드
package ch09;
import java.util.*;
class Edge implements Comparable<Edge>{
public int v1;
public int v2;
public int cost;
Edge(int v1, int v2, int cost) {
this.v1 = v1;
this.v2 = v2;
this.cost = cost;
}
@Override
public int compareTo(Edge e) {
return this.cost - e.cost;
}
}
public class Wonder {
static int[] arrSet;
public static int Find(int v) {
if(v==arrSet[v]) return v;
else return arrSet[v] = Find(arrSet[v]);
}
public static void Union(int a, int b) {
int fa = Find(a);
int fb = Find(b);
if(fa!=fb) arrSet[fa] =fb;
}
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
ArrayList<Edge> arr = new ArrayList<>();
arrSet = new int[n];
for(int i=0; i<n; i++) arrSet[i] = i+1;
for(int i=0; i<m; i++) {
int a = kb.nextInt();
int b = kb.nextInt();
int c = kb.nextInt();
arr.add(new Edge(a,b,c));
}
// 출력
int answer = 0;
Collections.sort(arr);
for(Edge ob : arr) {
int fa = Find(ob.v1);
int fb = Find(ob.v2);
if(fa!=fb) {
answer += ob.cost;
Union(ob.v1, ob.v2);
}
}
// return answer 못 할 경우 -> System.out.println(answer);
System.out.println(answer);
}
}
0
제 생각에는 해당 에러가
unf = new int[n];
for(int i=0; i<n; i++) unf[i]=i +1;
부분에서 나는 것 같진 않네요
만약 배열을 저렇게 생성해줄 경우에는 unf[8] = 9 가 됩니다.
하지만 지금 느낌으로는 배열 원소의 9번째에 접근을 할 때 unf[8] 이 아닌 9를 그대로 넣어서 오류가 발생한 것으로 보여집니다.
그 부분을 코드에서 체크해주신다면 해결하실 수 있으리라 생각됩니다.
0
일하고 있어서 이제야 코드를 좀 자세히 뜯어보았는데
// 만약 Find(9)로 들어가는 경우
public static int Find(int v) {
if(v==arrSet[v]) return v; // 여기에서 arrSet[9] 조회를 시도 -> ArrayIndexOutOfBound 에러 발생
else return arrSet[v] = Find(arrSet[v]);
}
public static void Union(int a, int b) {
int fa = Find(a);
int fb = Find(b);
if(fa!=fb) arrSet[fa] =fb; // 또는 여기
}
0
오!!!!! 맞습니다!!!!!!
if(v==arrSet[v]) return v; // 여기에서 arrSet[9] 조회를 시도 -> ArrayIndexOutOfBound 에러 발생
arrSet[9] 가 없죠... ㅎㅎㅎㅎㅎㅎ
이걸로 며칠을 신경썼는데,,,,, 도움주셔서 감사합니다!!
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
1
86
3
갑자기 채점 사이트가 바뀌었어요
0
57
1
문제 리스트 페이지
0
44
1
채점 사이트 관련 질문드립니다
0
42
1
봉우리 문제 질문입니다
0
104
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
77
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
83
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
77
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
96
2
6-7 강의에서
0
56
1
6-6. 장난꾸러기 질문 있습니다.
0
55
1
강의 수강후 코딩테스트
0
127
1
answer 변수 사용 여부
0
51
1
2중 for문
1
99
2
2-11. 임시반장정하기 (Runtime Error)
0
69
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
76
1
이런 풀이는 어떨까요
0
52
1
자바 스트림 방식의 효율성 질문 드립니다.
0
65
1
알고리즘 자료 구조들..
0
69
1
StringBuilder vs BufferdWriter
0
53
1
원더랜드(프림)
0
58
1
이런 코드는 어떤가요?
0
68
1
bfs 풀이
0
66
1
병합정렬
0
58
1





