[알고리즘] 백준 알고리즘 일차원 배열

Posted by 신희준 on February 17, 2018


2018 - 02 - 17 (토)


백준알고리즘 일차원 배열


문제이름 : 단어의 개수 문제번호 : 1152 [https://www.acmicpc.net/problem/1152]

  • 영어 대소문자와 띄어쓰기만으로 이루어진 문장이 주어진다. 이 문장에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오.
  • 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문장이 주어진다. 이 문장의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다.

  • bufferedReader 를 통해 값을 입력받고 readLine 으로 한줄을 읽는다. String 함수로 “ “을 구분자로하여 배열에 넣는다. 첫번째 공백이 들어갈경우 배열에 저장시 공백의 값이 저장되므로 ““이 배열에 저장되있는 경우는 값을 세주지 않는다.
package example5;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args)throws IOException {


    	BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));

    	String read = rd.readLine();

    	String arr[] = read.split(" ");
    	int count= 0;
    	for(int i =0; i <arr.length; i ++) {

    		if(arr[i].equals("")) {
    		}else {

    			count++;
    		}
    	}
    	//System.out.println(Arrays.toString(arr));
    	System.out.println(count);
    }
}

문제이름 : 숫자의 갯수 문제번호 : 2577 [https://www.acmicpc.net/problem/2577]

  • 세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오. 예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

  • 입력받는 수는 100보다 크고 1000보다 작다.

  • 값 세개를 입력받으면 값 세개를 정수로 전환해 준 후 각각을 곱한다. 이후 10크기의 정수배열을 만들어 준 후 곱한값의 각자리 수의 갯수를 세어 배열의 자리와 같으면 그 배열의 인자 값을 1씩 증가시켜준다. 이 후 배열을 순서대로 출력한다.

package example6;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args)throws IOException {


    	BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));

    	int read[] = new int[3];

    	for(int i =0; i <3; i ++) {
    		read[i] =  Integer.parseInt(rd.readLine().trim());
    	}

    	int multiple = 0;
    	multiple = read[0] * read[1] * read[2];
    	int size = String.valueOf(multiple).length();
    	int count [] = new int[10];
    	for(int i =0; i<size; i ++) {
    		count[String.valueOf(multiple).charAt(i)-48]++;
    	}
    	for(int i =0; i <count.length; i ++) {

    		System.out.println(count[i]);
    	}
    }
}

문제이름 : OX퀴즈 문제번호 : 8958 [https://www.acmicpc.net/problem/8958]

  • “OOXXOXXOOO”와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. “OOXXOXXOOO”의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

  • 최초에는 몇줄을 만들지를 입력받고 입력받은 숫자만큼 크기의 문자열 배열을 만들었다. 이 후 각각의 문자열(OX) 의 점수를 세주는 코딩을 하였다. 그리고 각각의 점수를 넣어주는 배열을 만든 후 이를 출력한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args)throws IOException {


    	BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));

    	int read = Integer.parseInt(rd.readLine());
    	int pointArr[] = new int[read];
    	String arr[] = new String[read];
    	for(int i =0; i <read; i ++) {
    		int point = 0;
    		arr[i] = rd.readLine();
    		//각 OX배열의 점수를 세주기 위한 배열
    		int pointCount[] = new int[arr[i].length()];

    		//문자열(OX)의 점수를 세줌
    		for(int k=0; k<arr[i].length(); k++) {
    			if(arr[i].charAt(k)=='X') {
    				point = 0;
    			}else {
    				point++;
    				pointCount[k]=point;
    			}

    		}
    		int sum = 0;
    		for(int k=0; k<pointCount.length; k ++) {
    			sum = sum + pointCount[k];
    		}
    		pointArr[i] = sum;
    	}
    	for(int i = 0; i <pointArr.length; i ++) {

    		System.out.println(pointArr[i]);
    	}

    }
}

문제이름 : 음계 문제번호 : 2920 [https://www.acmicpc.net/problem/2920]

  • 다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, …, C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8부터 1까지 차례대로 연주한다면 descending, 둘 다 아니라면 mixed 이다. 연주한 순서가 주어졌을 때, 이것이 ascending인지, descending인지, 아니면 mixed인지 판별하는 프로그램을 작성하시오.

  • 문제 풀이는 숫자를 배열에 저장한후 연속된 숫자의 차이가 1인 경우 수를 세어주어 총 7개가 아닐 경우 mixed 7개일 경우 배열의 첫번째와 두번째만 비교하여 오름차순, 내림차순을 찾아준다.

package example8;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args)throws IOException {


    	BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
    	String read = rd.readLine();    	
    	String arr[] = read.split(" ");
    	int count = 0;
    	for(int i = 1; i <arr.length; i ++) {

    		if(Math.abs(Integer.parseInt(arr[i])-Integer.parseInt(arr[i-1]))==1) {
    			count++;
    		}    		
    	}
    	if(count==7) {
    		if(Integer.parseInt(arr[0])>Integer.parseInt(arr[1])) {
    			System.out.println("descending");
    		}else {
    			System.out.println("ascending");
    		}
    	}else {
    		System.out.println("mixed");
    	}    	
    }
}

문제이름 : 평균점수 문제번호 : 10039 [https://www.acmicpc.net/problem/10039]

  • 총 5명의 학생이 있는데 이 학생의 점수가 주어진다. 점수가 40점 미만일 경우 40점으로 취급하여 평균을 구한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args)throws IOException {


    	BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
    	int sum = 0;
    	for(int i =0; i <5; i ++) {
    		int read = Integer.parseInt(rd.readLine());
    		if(read<40) {

    			sum = sum + 40;
    		}else {
    			sum = sum + read;
    		}

    	}
    	System.out.println(sum/5);


    }
}