재밌고 어려운 IT를 이해해보자~!

Codeup 문제해석 - 1092 ~1099 본문

알고리즘

Codeup 문제해석 - 1092 ~1099

언제나즐거운IT 2023. 11. 25. 20:35

1092

3개의 수에대한 최소공배수 찾기

반복문을 통해서 쉽게 생각할 수 있다 .

최소공배수 A를 만족하려면 3개의 수로 각각 나누었을때 0을 만족해야하며 그 값들중에 가장 작아야한다!

 

 0부터 증가하며 찾는 첫번째 값. 

3개의 입력을 각각 나눴을때 0인값을 찾아야 하기 때문에 3개의 입력을 각각 나눴을때 0이 아니면 계속 지나가야한다.

 

한글코딩

세 수를 각각 a, b, c라고 입력받고 최소공배수는 A이면

int A = 0;

while (A/a가 0이 아니고 A/b가 0이 아니고 A/c가 0이 아니면) {

    A 1 증가.

    }

 

이렇게하면 A가 A/a == 0 , A/b == 0, A/c ==0 을 만족할때 -> 즉 최소공배수를 찾았을때 반복문을 종료한다.

 

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int b = scan.nextInt();
    int c = scan.nextInt();
    int cnt = 0;
    while (cnt%a!=0 || cnt%b!=0 || cnt%c!=0 ) {
    	cnt ++;
    }
    System.out.println(cnt);
    
  }  
}

 

원래 최소공배수는 공약수로 나눠지는 숫자가 없을때까지 나눈 후 바깥쪽 숫자들을 곱해서 찾아야한다..

이러한 방법도 코드로 생각해보자.

 

1093

정수 n이 입력된다. (1 ~ 10000)
n개의 번호(1 ~ 23)가 공백을 두고 순서대로 입력된다. (중복가능)

 

23개의 배열이 있을때 각 자리에 자기 번호가 불린 횟수를 출력해보자.

ex)

입력

3

1 7 2 2 5 5 5 

출력

(1,  2,  0,  0,  3,  0  ,1)

 

잘 생각 해보면 입력된 숫자는 출력해야할 배열의 인덱스값에 +1을 해준것과 같다.

 

한글코딩

23개의 배열 선언 Arr

n 입력받기

for (i=0; i<n i++ {

   숫자입력

   Arr[숫자-1] 1 증가

   }

1입력 ->Arr[0] 증가

2입력 ->Arr[1] 증가

5입력 ->Arr[4] 증가

 


import java.util.Arrays;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int[] stuArr = new int[23];
    int a = scan.nextInt();
    for (int i=1; i<=a; i++) {
    	int stuNum = scan.nextInt();
    	stuArr[stuNum-1] ++;
    	}
   
    for (int i=0; i<stuArr.length; i++) {
    	System.out.print(stuArr[i] + " ");
    }
    
    
  }
}

 

1096

19 * 19 바둑판에 돌놓고 돌놓은곳 1로 출력하기

 

좌표 입력할 개수 n입력

좌표 n개입력

 

ex) 

입력 

5

1 1

2 2 

3 3

4 4

5 5

출력)

2차원 배열을 이용한 출력인데 생각해줘야 할 것이 있다.

좌표 (2, 2)을 입력했을때,

x좌표 2라는건 

열(column)의 1번째 인덱스를 뜻하고

y좌표 2라는건

행(row)의 1번째 인덱스를 뜻한다.

이클립스에서 2중첩 반복문을 출력할때 내부 반복문을 오른쪽으로 먼저 출력하고

외부 반복문을 줄바꿈을 해서 다시 오른쪽으로 출력을 한다. 

2차원 배열을 선언하면  Arr[row][colomn] 이며 row == 외부반복문 colomn == 내부반복문이고

row == y좌표 colomn == x좌표 이다.

 

따라서 좌표 (2,5)를 찾으려면

Arr[5][2] 를 입력해줘야한다.   

 

한글코딩 

19 * 19 빈 바둑판배열(board) 선언;

좌표개수 n 입력;

for (i=0; i<n; i++) {

    x값입력;

    y값입력;

}

 

for (a=0; a<바둑판세로 길이; a++) {

   for (i=0; i<바둑판가로 길이; j++) {

      if ( i == x값 && a == y값) {

         board[i-1][j-1] = 1;             // 바둑판 왼쪽위 끝은 인덱스 0,0 이지만 좌표로는 1,1로 본다. 

      }

   }

}

import java.util.Arrays;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    int[][] xy = new int[a][2];
    int[][] board = new int[19][19];
     
    for(int i=0; i<xy.length; i++){
    	for(int j=0; j<xy[i].length; j++) {
    		int input = scan.nextInt();
    		xy[i][j] = input;
    	}
    		
    }
    
    for(int i=0; i<xy.length; i++) {
    		board[xy[i][0]-1][xy[i][1]-1] = 1;
    	}
    
    
    for(int i=0; i<board.length; i++) {
    	for(int j=0; j<board[i].length; j++) {
    		System.out.print(board[i][j] + " ");
    	}
    	System.out.println();
    }
   
 
    
    
  }
}

 

1099

2는 먹이, 1은 벽,  0은 빈공간인 10*10 배열에서 

개미가 인덱스(1,1) 부터 먹이를 찾을떄까지 무조건 오른쪽 으로움직이되,.

오른쪽이 벽(1)으로 막혀있으면 아래로 움직인다.

개미가 지나간 위치를 9로 바꿔서 출력해라.

 

입출력 예시)

 

 

인덱스 1,1부터 반복문을 진행하며 오른쪽으로 0이면 9로 바꾸고 1이면 내부반복문 종료.

그다음 내부 반복문이 처음 끝낫던 x좌표에서 시작할 수 있도록 설정.

2를 만나면 종료.

 

한글코딩

10 * 10 board배열 선언;

for (a=1; a<board세로길이; a++){

   for (i=1을만나서 끝낫던곳 바로전 x좌표; i<board가로길이; i++) {

     if (board[a][[i] == 1) {

        지금의 x좌표 -1 값 저장

        종료       //다음줄로 이동

    }

    else if (board[a][i] == 0) {

       board[a][i] =9;

       }

    else  {//2이면

    전체반복문 종료

    }

 

디버깅표

 

package codeup;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);

		int[][] board = new int[10][10];
		for (int i=0; i<board.length; i++) {
			for(int j=0; j<board[i].length; j++) {
				board[i][j] = scan.nextInt();
			}
		}
		int exitcnt = 0;
		int antx = 1 ;
		for (int i=1; i<board.length; i++) {
			for(int j=antx; j<board[i].length; j++) {
				if (board[i][j]==1) {
					antx = j-1;
					break;
				}
				else if (board[i][j] == 2) {
				board[i][j]=9;
				exitcnt++;
				break;
				}
				else {
				board[i][j]=9;
				}
			}
			if (exitcnt ==1) {
				break;
			}
			
		}
		
		for (int i = 0; i < board.length; i++) {
			for (int j = 0; j < board[i].length; j++) {
				System.out.print(board[i][j] + " ");
			}
			System.out.println();
		}		
	}
}

 

 

'알고리즘' 카테고리의 다른 글

Codeup 문제해석 단순반복문  (1) 2023.12.05
Code up 문제해석 if~else2  (0) 2023.12.02
Codeup 문제해석 - if~else문  (0) 2023.11.28
CodeUp 문제해석 - 1019~1062  (0) 2023.11.23
CodeUp 문제해석 - 1001~1018  (0) 2023.11.22
Comments