/*
- Question :
* 배열의 데이터를 순서대로 꺼내 조건에 맞게 각 바구니 (스택) 에 분류 한다.
* 조건: 바구니의 합은 20 을 넘을수 없다.
*/
위의 문제를 저번에 지인찬스로 알게되었던 방법을 안보고 사용해보려고 해보았으나 시간핑계로 일단 원래 방식을 사용해서
문제를 해결해보았다. 문제는 해결되었지만 개인적으로 코드를 재활용하기는 어려워보인다;;
아래는 해결한방법의 전체 코드이다.
public class ArrayTest extends Activity {
String[] ExArrayData = {"1","3","2","3","14","2","20","4","8","10","2","1","4","8","9","5","0"};
ArrayList<String> strArraylist;
HashMap<Integer, ArrayList<String>> map;
int mHashMapKey=1;
int mSum=0;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
map = new HashMap<Integer, ArrayList<String>>();
strArraylist = new ArrayList<>();
for (int i=0; i< ExArrayData.length;i++){
Classification(ExArrayData[i]);
}
map.put(mHashMapKey,strArraylist);// 마지막 내용물은 임시박스를 건너뛰고, 바로 바구니에 넣는다.
ShowData();
}
/*
바구니 나누기
*/
public void Classification(String data){
int in_data = Integer.parseInt(data);//들어온 내용물을 계산하기위해 자료형변경
mSum += in_data; // 계산박스에 내용물 넣고 계산
if(mSum>=20){// 계산박스가 20이상인지 체크
map.put(mHashMapKey,strArraylist); // 임시박스에 넣었던 내용물들 을, 새로운 바구니를 생성해서 담는다.
mHashMapKey++;// 다음 바구니 이름을 정해주고,
strArraylist = new ArrayList<>(); // 바구니 넣기전 새로운 임시박스 만들어주고,
strArraylist.add(data); // 새로운 임시박스에 20이상이 되기 직전의 내용물을 담아주고,
mSum = in_data; // 담은 내용물은 다음 계산을 위해 계산박스에 넣어준다.
}else{
strArraylist.add(data);
}
}
/*
모든 바구니 데이터 보여주기
*/
public void ShowData(){
int check=1;
while (map.get(check)!=null){
Log.d("yck",check+"_바구니내용물_"+map.get(check)+"_총합 : "+Calculate(check));
check++;
}
}
/*
각바구니 총합 계산하기
*/
public int Calculate(int check){
int sum=0;
for(int i=0;i<map.get(check).size();i++){
sum += Integer.parseInt(map.get(check).get(i));
}
return sum;
}
}
기본함수들을 조금 더 사용하여 단순화 시키는 작업으로 이뤄진 코딩을 해봐야겠다.;;
-끝-
'JAVA Study' 카테고리의 다른 글
zxing lib 를 이용한 QR코드 카메라 구현시 center laser 커스텀방법 (0) | 2020.07.07 |
---|---|
PATTERN 모음집 (0) | 2019.01.31 |
try catch fianlly (0) | 2019.01.30 |
배열 기초 (0) | 2019.01.14 |
ArrayList 사용법과 조회 방법에 관하여 (0) | 2019.01.14 |