• Home
  • About
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • All Posts
    • All Tags
    • All categories
  • categories
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

Programmers-체육복

25 Jun 2021

Programmers_체육복

🎈 문제 링크

▶ JAVA 코드


package com.company.ct0625;

public class pro_체육복 {

    public static void main(String[] args) {

        int n = 5; // 전체 학생의수
        int[] lost = {1,2}; // 도난당한 학생
        int[] reserve = {2,3}; // 여벌의 체육복

        int answer = 0; // 수업을 들을수 있는 학생의 수

        answer = n; // answer 에 전체 학생수 대입

        // 도난당한 학생의 수(배열의길이)만큼 반복
        for(int i = 0; i < lost.length; i++){

            // 체육복 여분 여부 false로 설정
            boolean yn= false;
            int j = 0;

            // yn이 false일 경우
            while (!yn){

                // 여벌의 체육복을 가진 학생의 수만큼 while문이 돌면 break
                if(j == reserve.length){
                    break;
                }
                if(i+1< lost.length){ //  i+1의 값이 도난당한 학생의 수보다 작을 때
                    if(lost[i+1]==reserve[j]){ // 첫번째 도난당한 학생의 옆학생과 여분의 체육복을 가져온 학생의 숫자가 같다면
                        j++; // j변수에 +1
                        continue; // 다시 while문의 처음으로 돌아간다
                    }
                }
                // 도난당한 학생의번호와 여벌의 체육복이 있는 학생의 번호가 같으면
                if(lost[i] == reserve[j]){
                    // 여벌의체육복이 있는 학생의 번호의 자리에 -1을 대입하고
                    reserve[j] = -1;
                    // 체육복 여분 여부를 true(여분있음)로 변경한다
                    yn = true;


                    // 도난당한 학생의 번호 - 여분의 체육복이 있는 학생의 번호의 값이 1인경우
                }else if (lost[i] - reserve[j] == 1){
                    // 여벌의체육복이 있는 학생의 번호의 자리에 -1을 대입하고
                    reserve[j] = -1;
                    // 체육복 여분 여부를 true(여분있음)로 변경한다
                    yn = true;

                    // 도난당한 학생의 번호 - 여분의 체육복이 있는 학생의 번호의 값이 -1인경우
                } else if (lost[i] - reserve[j] == -1){
                    // 여벌의체육복이 있는 학생의 번호의 자리에 -1을 대입하고
                    reserve[j] = -1;
                    // 체육복 여분 여부를 true(여분있음)로 변경한다
                    yn = true;

                } else {
                    // 위의 경우가 아니면 j의값을 1씩 더해준다
                    j++;
                }

            }
            // while문이 돌고난후 yn(체육복 여분 여부 체크 내용)이 false라면
            if(!yn){

                // 수업을 들을 수 잇는 학생 수에서 1씩 감소시킨다
                answer--;
            }
        }System.out.println(answer);

    }
}

▶ 코드 설명

1) answer 에 전체 학생수 대입
2) 반복문1의 조건 : i는 도난당한 학생의 수(배열의길이)만큼 1씩 증가하면서 반복한다
3) 조건문1의 조건 : 여벌의 체육복을 가진 학생의 수만큼 while문이 돌면 break
4) 조건문2의 조건 : i+1의 값이 도난당한 학생의 수보다 작고 첫번째 도난당한 학생의 옆학생과 여분의 체육복을 가져온 학생의 숫자가 같다면 다시 while문의 처음으로 돌아간다
5) 조건문3의 조건 : 도난당한 학생의번호와 여벌의 체육복이 있는 학생의 번호가 같으면 여벌의체육복이 있는 학생의 번호의 자리에 -1을 대입하고 체육복 여분 여부를 true(여분있음)로 변경한다
6) 조건문4의 조건 : 도난당한 학생의 번호 - 여분의 체육복이 있는 학생의 번호의 값이 1인경우 여벌의체육복이 있는 학생의 번호의 자리에 -1을 대입하고 체육복 여분 여부를 true(여분있음)로 변경한다
7) 조건문5의 조건 : 도난당한 학생의 번호 - 여분의 체육복이 있는 학생의 번호의 값이 -1인경우 여벌의체육복이 있는 학생의 번호의 자리에 -1을 대입하고 체육복 여분 여부를 true(여분있음)로 변경한다
8) 조건문1~5의 경우가 아니면  j의값을 1증가시킨다
9) while문이 돌고난후 yn(체육복 여분 여부 체크 내용)이 false라면 수업을 들을 수 잇는 학생 수에서 1씩 감소시킨다
10) 수업을 들을 수 있는 학생의 수(answer)를 출력한다

▶ 출력 결과창(Console) 체육복



Share Tweet +1