6일차 알고리즘 배열

쿠우·2022년 7월 24일
0

설명
N개의 정수를 입력받아, 자신의 바로 앞 수보다 큰 수만 출력하는 프로그램을 작성하세요.
(첫 번째 수는 무조건 출력한다)

입력
첫 줄에 자연수 N(1<=N<=100)이 주어지고, 그 다음 줄에 N개의 정수가 입력된다.

출력
자신의 바로 앞 수보다 큰 수만 한 줄로 출력한다.

import java.util.Scanner;

public class Main {


	public static void solution(int[] input) {
		
		System.out.print(input[0] + " ");
		for(int i=1; i<input.length ; i++) {
			if(input[i-1] <= input[i] ) {
				System.out.print(input[i] + " ");
			}//if
		}//for
		
		
	} // solution
	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();
		
		int[] tmp= new int[input];
		
		for(int i=0; i <input; i++) {
			int input2 = sc.nextInt();
			tmp[i]= input2;
			if(input==1){System.out.println(input2); break;}
		} //for
		
		solution(tmp);
	} // main
}// end class

알고리즘
배열로 저장하고
첫 인덱스는 무조건 출력 나머지는 값을 비교하면서 출력


설명
선생님이 N명의 학생을 일렬로 세웠습니다.
일렬로 서 있는 학생의 키가 앞에서부터 순서대로 주어질 때,
맨 앞에 서 있는 선생님이 볼 수 있는 학생의 수를 구하는 프로그램을 작성하세요.
(앞에 서 있는 사람들보다 크면 보이고, 작거나 같으면 보이지 않습니다.)

입력
첫 줄에 정수 N(5<=N<=100,000)이 입력된다. 그 다음줄에 N명의 학생의 키가 앞에서부터 순서대로 주어진다.

출력
선생님이 볼 수 있는 최대학생수를 출력한다.


import java.util.Scanner;

public class Main {


	public static void solution(int[] input) {
		
		int count=0;
		int high = 0;
		for(int index : input) {
			if(high < index) {
				high = index;
				count ++;
			}//if
		}//for
		
		System.out.println(count);
	} // solution
	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();
		int[] tmp = new int[input];
		for(int i=0;i<input;i++){
			int input2 = sc.nextInt();
			tmp[i] = input2;
		}//for
		
		solution(tmp);
		
	} // main
}// end class

뒤에 비교하는 애가 크면 카운트하고 그 크기를 저장해서 또 비교 작으면 넘겨버리기


설명
A, B 두 사람이 가위바위보 게임을 합니다.
총 N번의 게임을 하여 A가 이기면 A를 출력하고,
B가 이기면 B를 출력합니다.
비길 경우에는 D를 출력합니다.
가위, 바위, 보의 정보는 1:가위, 2:바위, 3:보로 정하겠습니다.
두 사람의 각 회의 가위, 바위, 보 정보가 주어지면
각 회를 누가 이겼는지 출력하는 프로그램을 작성하세요.

입력
첫 번째 줄에 게임 횟수인 자연수 N(1<=N<=100)이 주어집니다.
두 번째 줄에는 A가 낸 가위, 바위, 보 정보가 N개 주어집니다.
세 번째 줄에는 B가 낸 가위, 바위, 보 정보가 N개 주어집니다.

출력
각 줄에 각 회의 승자를 출력합니다. 비겼을 경우는 D를 출력합니다.


import java.util.Scanner;

public class Main {


	public static void solution(int[] input, int[] input2) {

		for(int i=0;i<input.length;i++) {
			if (input[i] == input2[i])
				System.out.println("D");
			else if((input[i]-input2[i] == 1) || (input[i]-input2[i] == -2))
				System.out.println("A");
			else System.out.println("B");
		}// for

	} // solution
	public static void main(String[] args) {


		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();
		int[] tmp = new int[input];
		int[] tmp2 = new int[input];
		for(int i=0;i<input;i++){
			int input2 = sc.nextInt();
			tmp[i] = input2;
		}//for
		
		for(int i=0;i<input;i++){
			int input3 = sc.nextInt();
			tmp2[i] = input3;
		}//for
		
		solution(tmp,tmp2);
		
	} // main
}// end class

알고리즘
1.입력받고
2.A가 비기는경우를 거르고
3.이기는 경우의 차이를 기준으로 거르고.
4.나머지는 지는 경우
5.출력


피보나치 수열

설명
1) 피보나키 수열을 출력한다.
피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다.
2) 입력은 피보나치 수열의 총 항의 수 이다.
만약 7이 입력되면 1 1 2 3 5 8 13을 출력하면 된다.

입력
첫 줄에 총 항수 N(3<=N<=45)이 입력된다.

출력
첫 줄에 피보나치 수열을 출력합니다.


import java.util.Scanner;

public class Main {

	public static void solution(int input) {

		int[] tmp = new int[input];

		for(int i=0; i <input ; i++) {
			if(i==0 || i==1) {
				tmp[i] = 1;
			} else {
			tmp[i] = tmp[i-1] + tmp[i-2];
			}
			
			System.out.print(tmp[i] + " ");
		}
		
	} // solution
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();
		
		solution(input);
		
	} // main
}// end class
  1. 입력받는다
  2. 0,1인덱스는 항상 1 의 값이므로 1 넣어준다.
  3. index = [index-1] + [index-2] 의 값을 넣어준다.
  4. 출력

소수(에라토스테네스 체)
설명
자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요.
만약 20이 입력되면 1부터 20까지의 소수는
2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다.

입력
첫 줄에 자연수의 개수 N(2<=N<=200,000)이 주어집니다.

출력
첫 줄에 소수의 개수를 출력합니다.

import java.util.Scanner;

public class Main {

	public static void solution(int input) {
		
		int count = 0;
		
		for(int i=2;i<=input;i++) {
			
			boolean check = true;
			
			for(int j=2; j<=Math.sqrt(i);j++) {
				if(i % j ==0) {check = false;}
			} //for
			
			if(check == true) {count++;}
		}//for
		System.out.println(count);
	} // solution
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();
		
		solution(input);
		
	} // main
}// end class

알고리즘
1.입력받는다
2.해당 숫자를 반복한다. 단 1은 제외
3. 두번 째 반복에서는 인수분해가 되는 수를 나눠준다.
단 제곱근으로 절반만 나눠준다. / 1,하고 자기자신은 나누기 제외
4. 나머지를 통해 소수인지 아닌지 체크한다.
5. 출력


뒤집은 소수
설명
N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면
그 소수를 출력하는 프로그램을 작성하세요.
예를 들어 32를 뒤집으면 23이고, 23은 소수이다.
그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다.
첫 자리부터의 연속된 0은 무시한다.

입력
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고,
그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 100,000를 넘지 않는다.

출력
첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.


import java.util.Scanner;

public class Main {

	public static void solution(int[] input) {
		
		for(int element:input) {
			
			String reverse = String.valueOf(element);
			reverse = new StringBuffer(reverse).reverse().toString();
			element = Integer.parseInt(reverse);
			
			boolean check = true;
			if(element ==1 )  {check = false;}
			for(int i=2; i <= Math.sqrt(element); i++) {
				if(element % i == 0){check = false;}
			} //for			
			if(check == true) {System.out.print( element+" ");}
		}//for
	} // solution
	
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();
		int[] tmp = new int[input]; 
		
		for(int i =0 ; i<input; i++) {
			int input2 = sc.nextInt();
			
			tmp[i] = input2;
		}//for
		
		solution(tmp);
		
	} // main
}// end class

알고리즘
1.입력받는다.
2. 배열로 만들어 순회한다.
3. reverse 메소드를 이용해 뒤집고 다시 숫자타입에 맞춘다.
4. 반복문을 통하여 소수인지 판별한다.
5. 출력한다.

profile
일단 흐자

0개의 댓글