백준13300 방배정

  • 리스트는 크기만 선언해주면 사이즈 안 생김 (add를 해줘야 사이즈 늘어남)<----> 배열과 차이점
  • 당연히 리스트는 초기화 개념이 없다. add한 값이 들어간다
  • 리스트는 set,get 함수를 사용하려면 add를 우선 해야 한다.

이 그림은 man.size() == 0 으로 고쳐야 했었다
물론 나중에 사용하지 않았지만
사이즈가 0일 때 아무 값도 리스트에 없을 때

리스트를 만들어 주고
size를 어떻게 만들어 줄까??

<중요>

  1. 리스트는
    ArrayList man = new ArrayList<>(6);
    크기 선언 해줘도 실제 크기가 0이다.
    add로 값을 넣어줘야 한다.

  2. 이 문제는 내가 리스트 크기를 미리 안 정해주고 풀어서 코드가 쓸데없이 길어졌다.

  3. 학년이 같으면 같은 인덱스에 값을 넣고 나중에 방개수 구할 때 처리만 다르게 해주면 된다!!!!!!!!!!!!!!!!!!!!!!!

  4. set함수 이용할 때 기존의 값을 증가시키려면 get함수를 안에 또 써줘야 한다.

  5. add가 먼저 되어있어야 그 인덱스에 접근하여 set가능
    (선 add -> 후 set)

package bj13300방배정;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class bj13300방배정6 {

//방개수
static int numroom;
// 최대인원
static int max;
// 여자, 남자 방 리스트
static ArrayList <Integer> man  = new ArrayList<>(6);
static ArrayList <Integer> girl  = new ArrayList<>(6);

// 방 몇개 있는지 알아내는 함수
static int Howmanyroom (ArrayList<Integer> list) {
	// 남 . 녀 따로 구분하기 위해서 초기화 0으로 시킴  
	numroom =0;
	for(int k = 0 ; k<list.size(); k++) {
		// 리스트 요소 값이 max(최대인원)과 딱 나누어 떨어질 때
		if(list.get(k) %max==0) {
			numroom+= list.get(k)/max;
			// 리스트 요소 값이 max 보다 클 때
		}else if( list.get(k) > max) {
			numroom= numroom + list.get(k)/max +1;
		}
		// 리스트 요소 값이 max 보다 작을 때
		else if(list.get(k)< max) {
			numroom++;
		}
		
	}
	return numroom;
}

public static void main(String[] args) throws IOException {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	StringTokenizer st = new StringTokenizer(br.readLine(), " ");
	int num = Integer.parseInt(st.nextToken());
	max = Integer.parseInt(st.nextToken());
	
	// if문에서 set함수를 사용하려면 
	// 리스트에 이미 값이 있어야 해서 0으로 초기화 시켜줌
	// 배열은 크기만 정해주면 자동 초기화 되는데 리스트는 크기 정해줘도 0으로 초기화 안되서 
	// 0값을 임의로 넣어줌 (혹시 이거 리스트도 자동초기화 하는 방법 아시는분 공유점) 
	for(int i=0; i<6;i++) {
		man.add(0);
		girl.add(0);
	}
	
	while (num > 0) {
		StringTokenizer st1 = new StringTokenizer(br.readLine());
		int sex = Integer.parseInt(st1.nextToken());
		int grade = Integer.parseInt(st1.nextToken());
		
		
		//자문자답
		//리스트는 사이즈를 정해도 초기화가 안되나?? add 안하면 set을 사용 못하네 (set은 기존의 있던 인덱스에 추가하네)
		
		//남성
		if(sex==1) {    
			//grade 학년은 1학년부터 시작하고 index는 0부터 시작해서 1 뻄
			man.set(grade-1, man.get(grade-1)+1);
			
		// sex==0일때 여성 	
		} else {
			girl.set(grade-1, girl.get(grade-1)+1);
	
		}
		// 입력받은 학생 수 를 줄어들면서 while탈출 조건
		num--;
	}
	//남자 방수 + 여자방수
	System.out.println(Howmanyroom(man)+Howmanyroom(girl));
}

}

좋은 웹페이지 즐겨찾기