👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇
공부하기 전 마인드 체크
문제 해결에 대한 부분은 내가 어떻게 문제를 풀었는지가 가장 중요하다.
코드가 중요한 게 아니다.
항상 문제문석 ➡️ 손코딩 검증 ➡️ 코딩 패턴이 습관 되어야 한다.
시작값과 조건 설정을 잘해야 되며, 반복하는 패턴을 찾아내야 한다
라인을 줄이라는 말은 그대로 수학적인 수식이나 수학적인 개념이 들어간다 보면 된다.
오늘은 지금까지 배운 내용을 토대로 과제를 주셨다.
그중 기본적인 문제는 제외하고 고민을 하게 만들었던 과제들만 올려볼까 한다,
엘리베이터
int []elevator ={4,5,9,8,3,2,1,8};
엘리베이터는 3층에서 올라가고 있는 엘리베이터이다. 아파트는 총 15층이다.
3층에서 사람들이 원하는 층의 버튼을 누른 것이 elevator 배열로 입력되었다.
배열은 0번부터 먼저 누른 번호이다.
현재 엘리베이터가 멈추는 층수를 차례대로 출력하시오.
엘리베이터는 한 방향으로만 움직인다. 현재 위치에서 진행 방향에 속한 층만 운행이 가능하다.
이미 지나온 층은 무시한다
해당 예제에 있는 번호로도 성공했지만, 다른 층이 입력된 것까지 한번 테스트까지 했다.
public static void main(String[] args) {
int[] elevator = {1,2,3,4,5,3,3,2,1,7,9,11,1};
int[] tmpIdx = new int[5];
int ltCnt = 0;
int rtCnt = elevator.length - 1;
for (int i = 0; i < elevator.length; i++) {
// 3 이하 숫자 제거
if (elevator[i] <= 3) continue;
if (elevator[rtCnt] <= 3) {
rtCnt--;
i--;
continue;
}
// 오른쪽 숫자가 왼쪽보다 클 경우 왼쪽 숫자를 tmpIdx에 저장 후 포인트이동
if (elevator[i] < elevator[rtCnt]) {
tmpIdx[ltCnt] = elevator[i];
ltCnt++;
}
// 왼쪽 숫자가 오른쪽 숫자보다 클 경우 오른쪽 숫자를 tmpIdx에 저장 후 포인트이동
else if (elevator[i] > elevator[rtCnt]) {
if (tmpIdx[ltCnt - 1] != elevator[rtCnt]) {
tmpIdx[ltCnt] = elevator[rtCnt];
i--;
rtCnt--;
ltCnt++;
}
if (tmpIdx[ltCnt - 1] == elevator[rtCnt]) {
tmpIdx[ltCnt] = elevator[i];
break;
}
}
// 왼쪽 포인트가 오른쪽 포인트숫자와 같거나 커지면 for문 종료
if (ltCnt >= rtCnt) break;
}
System.out.println(" 입력하신 층 정보입니다 ");
// 출력문
for (int i = 0; i < tmpIdx.length; i++) {
if ( tmpIdx[i] > 3 ) System.out.println(tmpIdx[i]+"층");
}
}
버블정렬
int []elevator ={4,5,9,8,3,2,1,8};
버블정렬방법을 검색을 통하여 숙지하고
위 배열을 버블정렬 기법으로 오름차순으로 정렬하시오.
public static void main(String[] args) {
int[] e ={4,5,9,8,3,2,1,8};
for (int i = 0; i < e.length; i++) {
for (int j = 0; j < e.length; j++) {
int tmp;
if (j+1 == e.length) break;
if (e[j] > e[j+1]){
tmp = e[j];
e[j] = e[i+1];
e[i+1] = tmp;
}
}
}
for (int i = 0; i < e.length; i++) {
System.out.print(e[i] + " ");
}
}
주차장
int [] carnum = {1232,1221,1235,1252,1234,4536,3457,3238,3229,2599}
int[] parking = new int [10];
carnum배열의 인덱스가 0인 값부터 주차장에 들어온다. // carnum배열은 자동차 번호를 의미합니다.
parking의 인덱스 번호가 주차번호이다.
자동차 번호의 마지막 번호는 해당 차량이 주차할 주차번호이다.
만약 주차번호에 다른 차량이 주차되어 있으면 다음 주차번호에 주차를 한다.
(이때, 다음 주차번호에도 차량이 있으면 주차불가이다. 예제는 이와 같은 상황이 안 나오므로 고려하지
않아도 됨)
주차가 끝난 후 주차번호와 주차항 차량 번호를 출력하시오.
public static void main(String[] args) {
int[] carnum = {1232,1221,1235,1252,1234,4536,3457,3238,3229,2599};
int[] parking = new int[10];
int carTagget = 0;
for (int i = 0; i < carnum.length; i++) {
carTagget = carnum[i]%10;
if(parking[carTagget] == 0 ) {
parking[carTagget] = carnum[i];
} else {
if (carTagget+1!=parking.length) parking[carTagget+1] = carnum[i];
else parking[(carTagget+1)%10] = carnum[i];
}
}
for (int i = 0; i < parking.length; i++) {
System.out.println(i + "번 주차칸 차량 정보 : " + parking[i]);
}
}
업그레이드
public static void main(String[] args) {
int[] carnum = {1232, 1221, 1235, 1251, 1234, 4536, 3457, 3238, 3229, 2599};
int[] parking = new int[10];
boolean[] flag = new boolean[10];
int carTagget = 0;
for (int i = 0; i < carnum.length; i++) {
// 차량 끝 번호 가져오기 ( 주차칸 번호 )
carTagget = carnum[i] % 10;
// 해당 번호가 false 라면 (빈칸)이라면
if (flag[carTagget] == false) {
parking[carTagget] = carnum[i];
flag[carTagget] = true;
}
// 기존 주차가 된 칸이라면
else if (flag[carTagget] == true) {
// 타겟번호가 9일 경우 1을 더해 10을 만든 뒤 뒤에있는 번호를 가져와 주차칸에 넣는다
if (carTagget+1 == carnum.length ){
parking[(carTagget+1) % 10] = carnum[i];
}
// 타겟번호가 9 가 아니고 기존 주차칸의 다음칸이 비어있을 경우
else if (flag[carTagget+1] == false) {
parking[carTagget+1] = carnum[i];
flag[carTagget+1] = true;
} else
// 모두 안되어 주차 실패할 경우 출력
{
System.out.println("차량번호 [" + carnum[i] + "] 는 주차불가 입니다 ");
}
}
}
for (int i = 0; i < parking.length; i++) {
System.out.println(i + "번 주차칸 차량 정보 : " + parking[i]);
}
}
1~999까지 각 자릿수 합산
1부터 9999까지 숫자의 각 자릿수를 모두 더하고
더한 결과의 총합을 구하시오.
샘플로 998+9999 계산법
998 = 9+9+8
9999= 9+9+9+9
총합은 : 9+9+8+9+9+9+9 =
public static void main(String[] args) {
int tot = 0;
for (int i = 1; i < 10000 ; i++) {
int tmp = i;
for(;tmp>0;) {
tot += tmp % 10;
tmp /= 10;
}
}
System.out.println("1 ~ 9999 까지 각 자리수 합산 : " + tot);
}
팩토리얼 합 구하기
팩토리얼의 합 구하기 (2중 for로 해결)
1부터 10까지 숫자의 각패토리얼의 합을 구하시오
예를 들어 4의 팩토리얼은 1*2*3*4
5의 팩토리얼은 1*2*3*4*5
public static void main(String[] args) {
int tmp = 1;
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= i ; j++) {
tmp *= j;
}
System.out.println(i+"!의 팩토리얼 합은 :" + tmp);
tmp=1;
}
}
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Jᴀᴠᴀ' 카테고리의 다른 글
2023/10/11🤦♀️ Java 조별 미션 (1) | 2023.10.18 |
---|---|
2023/10/10🐰 반복문 키워드 (0) | 2023.10.18 |
2023/10/05🐰 중첩FOR문 (0) | 2023.10.10 |
2023/10/04✨ break & continue (1) | 2023.10.04 |
2023/09/27🌱 배열과 단일for문을 사용한 문제풀이 (0) | 2023.09.29 |