7일차 알고리즘 배열

쿠우·2022년 7월 26일
0

설명
OX 문제는 맞거나 틀린 두 경우의 답을 가지는 문제를 말한다.
여러 개의 OX 문제로 만들어진 시험에서 연속적으로 답을 맞히는 경우에는
가산점을 주기 위해서 다음과 같이 점수 계산을 하기로 하였다.
1번 문제가 맞는 경우에는 1점으로 계산한다.
앞의 문제에 대해서는 답을 틀리다가 답이 맞는 처음 문제는 1점으로 계산한다.
또한, 연속으로 문제의 답이 맞는 경우에서 두 번째 문제는 2점,
세 번째 문제는 3점, ..., K번째 문제는 K점으로 계산한다.
틀린 문제는 0점으로 계산한다.
예를 들어, 아래와 같이 10 개의 OX 문제에서 답이 맞은 문제의 경우에는 1로 표시하고,
틀린 경우에는 0으로 표시하였을 때,
시험문제의 채점 결과가 주어졌을 때, 총 점수를 계산하는 프로그램을 작성하시오.

입력
첫째 줄에 문제의 개수 N (1 ≤ N ≤ 100)이 주어진다.
둘째 줄에는 N개 문제의 채점 결과를 나타내는 0 혹은 1이 빈 칸을 사이에 두고 주어진다.
0은 문제의 답이 틀린 경우이고, 1은 문제의 답이 맞는 경우이다.

출력
첫째 줄에 입력에서 주어진 채점 결과에 대하여 가산점을 고려한 총 점수를 출력한다.

import java.util.Scanner;

public class Main {

	public static void solution(int[] input) {
		
		int score = 0;
		int count = 0;
		for(int i=0; i<input.length ; i++) {
			
			if(input[i] == 0) {
				count = 0;
			}else if(input [i] ==1 ) {
				count ++;
				score += count; 
			}// if - else
		}// for
		
		System.out.println(score);
	} // 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.출력한다.


등수구하기
설명
N명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된
순서대로 출력하는 프로그램을 작성하세요.
같은 점수가 입력될 경우 높은 등수로 동일 처리한다.
즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고
그 다음 학생은 4등이 된다.

입력
첫 줄에 N(3<=N<=100)이 입력되고, 두 번째 줄에 국어점수를 의미하는 N개의 정수가 입력된다.

출력
입력된 순서대로 등수를 출력한다.


public class Main {

	public static void solution(int[] input) {
		
		
		int[] rank = new int[input.length];
	    for(int i=0; i<input.length;i++) {
	    	int count = 1;
	    	
	    	for(int j=0; j<input.length;j++) {
	    		if(input[i]<input[j]){count++;}
	    	}//for
	    	
	    	rank[i] = count;
	    	System.out.print(rank[i] + " ");
		}//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. 해당 인덱스에 맞춰 새 배열에 등수를 넣어준다.


설명
N*N의 격자판이 주어지면 각 행의 합, 각 열의 합,
두 대각선의 합 중 가 장 큰 합을 출력합니다.

입력
첫 줄에 자연수 N이 주어진다.(2<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.

출력
최대합을 출력합니다.


import java.util.Scanner;

public class Main {

	public static void solution(int[][] input) {
		
		
		int diagonal =0;
		int diagonal2 =0;
		int topScore =0;
		for(int i =0; i<input.length; i++){
			int row = 0;
			int column =0;			
			
			diagonal += input[input.length-1-i][i];
			diagonal2 += input[i][i];
			
			for(int j=0 ; j<input.length; j++) {
				row	+=input[i][j];
				column +=input[j][i];
			}//for
			row = row>column? row:column;
			topScore = topScore > row ? topScore:row ;	

		}//for
		
		diagonal = diagonal > diagonal2 ? diagonal:diagonal2;
		topScore = topScore > diagonal ? topScore : diagonal;
		System.out.println(topScore);

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

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

알고리즘
대전제 다 더하고 비교해야한다.
1. 입력받는다.
2. 2차원 배열 생성 후 반복문 중복 해준다.
3. 각 행의 합, 각 열의 합을 먼저 비교해준뒤
높은 값만 살아남는다.
4. 살아남은 높은값에 대각선의 합 2개를 비교해서 높은 값을 출력


설명
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다.
각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다.
봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정한다.

입력
첫 줄에 자연수 N이 주어진다.(2<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다.
각 자연수는 100을 넘지 않는다.

출력
봉우리의 개수를 출력하세요


import java.util.Scanner;

public class Main {

	public static void solution(int[][] input) {
		
		int count = 0;
		for(int i =1; i<input.length-1; i++){
			for(int j=1 ; j<input.length-1; j++) {
		
				if(
					input[i][j] > input[i][j-1] &&
					input[i][j] > input[i][j+1] &&	
					input[i][j] > input[i+1][j] &&	
					input[i][j] > input[i-1][j]	) {
					count++;
				}//if
			}//for
		}//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+2][input+2]; 
		
		for(int i=1 ; i<input+1; i++) {
			
			for(int j=1 ; j<input+1; j++) {
					int input2 = sc.nextInt();
					tmp[i][j] = input2;
			}//for
		}//for
		
		solution(tmp);

	} // main
}// end class

알고리즘
1. 테두리를 제외한 값을 입력으로 초기화시켜준다.
2. 봉우리의 조건에 맞게 비교해준다.
해당할 경우 count +1
3. 카운트 숫자 출력

profile
일단 흐자

0개의 댓글