유리쯔의일상 2023. 10. 18. 12:46
반응형
 

👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇

 

 

반복문을 멈추는 키워드

Break : 현재 반복문을 종료한다
Continue : 더이상 코드를 실행하지 않고 for문의 증감이나 증감식으로 넘어간다. 그다음 for 반복을 진행한다

 

예를 들어 중첩for문 안에서 break를 실행 시 break위치에 따라 반복문이 전체 종료가 될지 내부에 있는 for문만 종료되는지 달라진다.

i for문 안에있는 j for문 안에 break를 사용하게 되면 j for문은 종료되지만 i for문은 종료되지 않는다.

 


 

Boolean 자료형

Boolean 타입은 참과 거짓만 저장된다

true : 1

false : 0

 

int a = 1;
boolean e = 1;
이 두가지는 다른 자료형 이기 때문에 의미가 전혀 다르다.

 

 

 

오늘의 문제

 

문제 1
int [] elevator ={4,1,1,8,1,1,1,8,4,3,2,1,2,3};
연속된 1의 개수를 출력하세요. 단 1이 1개일 때는 카운팅 하지 않는다.
위 예제의 결과는 5이다.

public static void main(String[] args) {  
    int[] elevator = {4, 1, 1, 1, 8, 1, 1, 8, 4, 1, 3, 2, 1, 1, 1, 2, 3};  
    int tot = 1;  
  
    for (int i = 0; i < elevator.length; i++) {  
        int cnt = 1;  
        for (int j = i; j < elevator.length; j++) {  
            if (elevator[j] == 1) {  
                cnt++;  
            } else if (elevator[j] != 1) {  
                i += cnt;  
                break;  
            }  
        }  
        if (cnt > 1) {  
            i += cnt-1;  
            tot += cnt;  
        }  
        System.out.println("cnt 값 : " + cnt);  
    }  
    System.out.println("1이 연속적인 길이 : " + tot);  
}

 

 

 

문제 2

int [] p = {40,32,21,7};
int[] restList = {2,1,0,3}
//p 배열의 인덱스는 사람의 번호이다. 값은 소유한 사탕의 개수이다.
// 예를 들어 1번 사람은 32개의 사탕을 소유하고 있다

사탕은 쉬는 시간에 먹을 수 있다.
쉬는 시간은 1시간이며 최대 2개까지 먹을 수 있다.

쉬는 시간은 개별로 주어지며 차례대로 주어진다.
restList배열의 0번 인덱스 사람에게 먼저 1시간의 쉬는 시간이 주어지고
그다음에는 1번 인덱스 사람에게 쉬는 시간이 주어진다.

각 사람들은 쉬는 시간에 사탕 2개를 먹는다.
다 먹고 나면 줄의 맨 마지막에 줄을 서서 쉬는 시간을 기다린다.

0번 사람이 사탕을 모두 먹기 위해 필요한 시간(대기시간+먹는 시간)을 구하시오.

package TASK;
public class task03 {
    public static void main(String[] args) {
        int[] p = {40,32,21,7};
        int[] restList = {2,1,0,3};
        int[] pTime = new int[4];
        int[] eTime = new int[4];
        int idxTmp = 0;

        while (true) {
            int tmp = restList[0];
            p[tmp] -= 2;
            eTime[tmp] += 1;
            for (int j = 0; j < restList.length; j++) {
                if (j != tmp) pTime[j] += 1;
                else if (j == tmp) continue;
            }
            for (int i = 0; i <= restList.length; i++) {
                if ( i == 0 ) {
                    idxTmp = restList[0];
                }
                else if ( i <= 3) {
                    restList[i-1] = restList[i];
                }
                else if ( i == 4) {
                    restList[3] = idxTmp;
                }
            }
            if (p[0] <= 0 ) break;
        }
        for (int i = 0; i < p.length; i++) {
            int tmp = restList[i];
            System.out.println( restList[tmp] + " 번째 사람의 잔여 사탕 : " + p[tmp] + " / 먹은 시간 : " + eTime[tmp] + " / 대기시간 : " + pTime[tmp]);
        }

        for (int i = 0; i < restList.length; i++) {
            System.out.println(restList[i]);
        }
    }
}

사실 이문제는 풀이를 선생님에게 못 들었지만

난 잘못 푼 것 같다..

다시 풀어야 할 것 같다 흑흑

 

 

반응형