반응형
벡터란 녀석은 배열의 확장판이라고 할까나.. 암튼 배열보다 욜랭 좋은 거다.
배열은 사용 할라믄 첨에 초기화를 해서 사이즈를 정해 줘야 한다. 근데 이 생키는 그럴 필요 없다.
데이터가 입력되면 알아서 지가 늘어 난다. 그리고 저장할때 타입을 지정해 줄 수도 있다고 한다. 잘은 모르겠다.
그래서 요걸 이용해서 문자가 들어 있는 배열을 돌면서 중복된 문자는 제외하고 새로운 배열을 만들꺼다.
근데 중복된 걸 제외한다고 해도 몇 개다 들어 있는지 알 수 없으므로 배열을 생성할 때 사이즈를 정하는게 애매하다.
벡터는 아까도 얘기 했다싶이 미리 사이즈를 지정 안 해 줘도 된다. 그래서 벡터 썼다.
[ v_test.java ]
import java.util.*;
public class v_test {
public static void main(String[] args) throws Exception {
// 데이터를 담을 벡터
Vector v = new Vector();
// 중복 제거 할 벡터
Vector d = new Vector();
// 1. 데이터를 차곡차곡 생성하자.
String s1 = "AAA";
String s2 = "BBB";
String s3 = "AAA";
String s4 = "BBB";
String s5 = "AAA";
String s6 = "CCC";
v.addElement(s1);
v.addElement(s2);
v.addElement(s3);
v.addElement(s4);
v.addElement(s5);
v.addElement(s6);
v.addElement(s6);
v.addElement(s2);
v.addElement(s1);
v.addElement(s6);
v.addElement(s6);
v.addElement("KEI");
// 2. 뭐가 들었는지 확인하고
for (int i = 0 ; i < v.size() ; i++ ) {
System.out.println(v.elementAt(i));
}
// 3. 데이터가 들어 있는 놈의 사이즈 만큼 뱅뱅 돈다.
for (int j = 0 ; j < v.size() ; j++ ) {
String v_tmp = (String)v.elementAt(j); // 현재 row의 값을 담아뒀다가
Boolean existFlag = false; // 요놈은 기존에 값이 있는가 없는가 체크하는 깃발
// System.out.println("d size : " + d.size());
public static void main(String[] args) throws Exception {
// 데이터를 담을 벡터
Vector v = new Vector();
// 중복 제거 할 벡터
Vector d = new Vector();
// 1. 데이터를 차곡차곡 생성하자.
String s1 = "AAA";
String s2 = "BBB";
String s3 = "AAA";
String s4 = "BBB";
String s5 = "AAA";
String s6 = "CCC";
v.addElement(s1);
v.addElement(s2);
v.addElement(s3);
v.addElement(s4);
v.addElement(s5);
v.addElement(s6);
v.addElement(s6);
v.addElement(s2);
v.addElement(s1);
v.addElement(s6);
v.addElement(s6);
v.addElement("KEI");
// 2. 뭐가 들었는지 확인하고
for (int i = 0 ; i < v.size() ; i++ ) {
System.out.println(v.elementAt(i));
}
// 3. 데이터가 들어 있는 놈의 사이즈 만큼 뱅뱅 돈다.
for (int j = 0 ; j < v.size() ; j++ ) {
String v_tmp = (String)v.elementAt(j); // 현재 row의 값을 담아뒀다가
Boolean existFlag = false; // 요놈은 기존에 값이 있는가 없는가 체크하는 깃발
// System.out.println("d size : " + d.size());
// 4. 최초에는 d 벡터의 값이 없으므로 v벡터의 첫번째 값을 무조건 넣어 준다.
if ( d.size() == 0 ) {
d.addElement(v_tmp);
}
// 5. d 벡터에 있는 데이터 수 만큼 돈다. d.size()는 데이터가 들어 갈 수록 늘어 나겠지?
for (int z = 0 ; z < d.size() ; z++ ) {
String d_tmp = (String)d.elementAt(z);
// System.out.println(v_tmp + " " + d_tmp);
// 6. d 벡터에 현재 v 벡터의 값이 있으면 진짜 플레그로 변신
if ( d_tmp.equals(v_tmp) ) {
existFlag = true;
}
}
// 7. 현재 v벡터의 값이 없다면 d 벡터에 넣는다.
if ( existFlag == false ) {
d.addElement(v_tmp);
}
}
// 8. 결과를 보자.
System.out.println("");
System.out.println("Distinct Vector V ===============");
for (int k = 0 ; k < d.size() ; k++ ) {
System.out.println(d.elementAt(k));
}
}
}
if ( d.size() == 0 ) {
d.addElement(v_tmp);
}
// 5. d 벡터에 있는 데이터 수 만큼 돈다. d.size()는 데이터가 들어 갈 수록 늘어 나겠지?
for (int z = 0 ; z < d.size() ; z++ ) {
String d_tmp = (String)d.elementAt(z);
// System.out.println(v_tmp + " " + d_tmp);
// 6. d 벡터에 현재 v 벡터의 값이 있으면 진짜 플레그로 변신
if ( d_tmp.equals(v_tmp) ) {
existFlag = true;
}
}
// 7. 현재 v벡터의 값이 없다면 d 벡터에 넣는다.
if ( existFlag == false ) {
d.addElement(v_tmp);
}
}
// 8. 결과를 보자.
System.out.println("");
System.out.println("Distinct Vector V ===============");
for (int k = 0 ; k < d.size() ; k++ ) {
System.out.println(d.elementAt(k));
}
}
}
주석을 착실히 달아놔서 그냥 봐도 알거 같다.. 모름 말구.. ㅡㅡ
근데 이번에는 중복된게 몇 개 인지 카운트가 하고 싶어 졌다. 위에꺼의 확장판이라고나 할까..
[ v_test2.java ]
import java.util.*;
public class v_test2 {
public static void main(String[] args) throws Exception {
// 데이터를 담을 벡터
Vector v = new Vector();
// 중복 제거 할 벡터
Vector d = new Vector();
// 1. 데이터를 차곡차곡 생성하자.
String s1 = "AAA";
String s2 = "BBB";
String s3 = "CCC";
v.addElement(s1);
v.addElement(s2);
v.addElement(s3);
v.addElement(s1);
v.addElement(s1);
v.addElement(s2);
v.addElement(s2);
v.addElement(s2);
v.addElement(s1);
v.addElement(s3);
v.addElement(s3);
v.addElement("KEI");
// 2. 뭐가 들었는지 확인하고
// for (int i = 0 ; i < v.size() ; i++ ) {
// System.out.println(v.elementAt(i));
// }
// 3. 데이터가 들어 있는 놈의 사이즈 만큼 뱅뱅 돈다.
for (int j = 0 ; j < v.size() ; j++ ) {
String v_tmp = (String)v.elementAt(j); // 현재 row의 값을 담아뒀다가
Boolean existFlag = false; // 요놈은 기존에 값이 있는가 없는가 체크하는 깃발
// System.out.println("d size : " + d.size());
// 4. 최초에는 d 벡터의 값이 없으므로 v벡터의 첫번째 값을 무조건 넣어 준다.
if ( d.size() == 0 ) {
String[] tmp_s = {v_tmp,"0"};
d.addElement(tmp_s);
}
// 5. d 벡터에 있는 데이터 수 만큼 돈다. d.size()는 데이터가 들어 갈 수록 늘어 나겠지?
for (int z = 0 ; z < d.size() ; z++ ) {
String[][] zz = new String[d.size()][2];
d.copyInto(zz);
String[] d_tmp = (String[])d.elementAt(z);
// System.out.println(v_tmp + " " + d_tmp);
// 6. d 벡터에 현재 v 벡터의 값이 있으면 진짜 플레그로 변신
if ( d_tmp[0].equals(v_tmp) ) {
existFlag = true;
// 몇개 들어 있는지 카운트 한다
d_tmp[1] = Integer.toString(Integer.parseInt(d_tmp[1]) + 1);
// String[] tmp_s = {v_tmp,d_tmp[1]}; // 배열로 변신하는 순간 그대로 따라가는가부다.
// System.out.println(tmp_s);
// d.setElementAt(tmp_s,1);
}
}
// 7. 현재 v벡터의 값이 없다면 d 벡터에 넣는다.
if ( existFlag == false ) {
String[] tmp_s = {v_tmp,"1"};
d.addElement(tmp_s);
}
}
// 8. 결과를 보자.
System.out.println("");
System.out.println("Distinct Vector V : " + d.size() + "종류 (TOTAL " + v.size() + ")");
String[][] tt = new String[d.size()][2];
d.copyInto(tt);
for (int k = 0 ; k < d.size() ; k++ ) {
String[] o_d = (String[])d.elementAt(k);
System.out.println(o_d[0] + "는 " + o_d[1] + "개가 있다");
}
}
}
public static void main(String[] args) throws Exception {
// 데이터를 담을 벡터
Vector v = new Vector();
// 중복 제거 할 벡터
Vector d = new Vector();
// 1. 데이터를 차곡차곡 생성하자.
String s1 = "AAA";
String s2 = "BBB";
String s3 = "CCC";
v.addElement(s1);
v.addElement(s2);
v.addElement(s3);
v.addElement(s1);
v.addElement(s1);
v.addElement(s2);
v.addElement(s2);
v.addElement(s2);
v.addElement(s1);
v.addElement(s3);
v.addElement(s3);
v.addElement("KEI");
// 2. 뭐가 들었는지 확인하고
// for (int i = 0 ; i < v.size() ; i++ ) {
// System.out.println(v.elementAt(i));
// }
// 3. 데이터가 들어 있는 놈의 사이즈 만큼 뱅뱅 돈다.
for (int j = 0 ; j < v.size() ; j++ ) {
String v_tmp = (String)v.elementAt(j); // 현재 row의 값을 담아뒀다가
Boolean existFlag = false; // 요놈은 기존에 값이 있는가 없는가 체크하는 깃발
// System.out.println("d size : " + d.size());
// 4. 최초에는 d 벡터의 값이 없으므로 v벡터의 첫번째 값을 무조건 넣어 준다.
if ( d.size() == 0 ) {
String[] tmp_s = {v_tmp,"0"};
d.addElement(tmp_s);
}
// 5. d 벡터에 있는 데이터 수 만큼 돈다. d.size()는 데이터가 들어 갈 수록 늘어 나겠지?
for (int z = 0 ; z < d.size() ; z++ ) {
String[][] zz = new String[d.size()][2];
d.copyInto(zz);
String[] d_tmp = (String[])d.elementAt(z);
// System.out.println(v_tmp + " " + d_tmp);
// 6. d 벡터에 현재 v 벡터의 값이 있으면 진짜 플레그로 변신
if ( d_tmp[0].equals(v_tmp) ) {
existFlag = true;
// 몇개 들어 있는지 카운트 한다
d_tmp[1] = Integer.toString(Integer.parseInt(d_tmp[1]) + 1);
// String[] tmp_s = {v_tmp,d_tmp[1]}; // 배열로 변신하는 순간 그대로 따라가는가부다.
// System.out.println(tmp_s);
// d.setElementAt(tmp_s,1);
}
}
// 7. 현재 v벡터의 값이 없다면 d 벡터에 넣는다.
if ( existFlag == false ) {
String[] tmp_s = {v_tmp,"1"};
d.addElement(tmp_s);
}
}
// 8. 결과를 보자.
System.out.println("");
System.out.println("Distinct Vector V : " + d.size() + "종류 (TOTAL " + v.size() + ")");
String[][] tt = new String[d.size()][2];
d.copyInto(tt);
for (int k = 0 ; k < d.size() ; k++ ) {
String[] o_d = (String[])d.elementAt(k);
System.out.println(o_d[0] + "는 " + o_d[1] + "개가 있다");
}
}
}
보다시피 이놈을 2차원 배열로 만들고 그걸 꺼내다가 다른거랑 비교 할려구 하니 좀 짜증나게 변신했다.
{문자, 갯수} 이런 형태의 배열로다가 벡터에다가 집어 넣었더니 발생한 상황이다.
벡터에 담을때 배열 형태로 담았으니 끄집어 낼 때도 배열 형태로 끄집어 내야 한다.
요거 하면서 젤 짱났던 거시기..
Integer.toString(Integer.parseInt(d_tmp[1]) + 1);
이 부분.. 쌍쌍바.. 타입케스팅 헷갈린다.. ;;
문자를 숫자로 바꿨다가 더해서 다시 문자로 바꿔놔야 한다능... 냠.. ㅡㅡ
그리고 아리까리 한거.. =_=;
이렇게 해도 제대로 된다는거.. 으허허
d_tmp[1] = Integer.toString(Integer.parseInt(d_tmp[1]) + 1);
요놈을 주석으로 쳐 막고 아래와 같이 해도 똑같이 작동한다.
String[] tmp_s = {v_tmp,Integer.toString(Integer.parseInt(d_tmp[1]) + 1)};
d.setElementAt(tmp_s,z);
한넘은 그냥 변신한 녀석에다가 막바로 쳐 박는거 같고.. 밑에꺼는 setElementAt 해서 제대로 하는거 같은데.
... 역시나 부족한 내공으로 잘은 모르겠다. ㅋㅋㅋㅋㅋ
귀찮다. 여기까지.
반응형
댓글0