algorithm

[입출력] 1924, 8393, 10818, 2438

tonirr 2020. 4. 10. 07:58
  • 1924번
    • 문제
      • 오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.
    • 입력
      • 첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.
    • 출력
      • 첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.
    • Memo
      • 처음 접근을 java 에 Date 관련으로 요일을 출력하는 함수가 있을 것이라고 생각함
      • 주어진 정보를 보고 왜 주어졌는지 활용방법을 먼저 고민해보기
      • month와 요일을 배열에 두고 시작했음
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int month = sc.nextInt();
		int day = sc.nextInt();
		sc.close();
		
		int []endDay = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		String []date = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
		
		int daySum = 0;
		for(int i = 0; i < month-1; i++) {
			daySum += endDay[i];
		}
		
		daySum += day;
		
		int a = daySum % 7;
		System.out.println(date[a]);
	}
}

 

  • 8393번
    • 문제
      • n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.
    • 입력
      • 첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.
    • 출력
      • 1부터 n까지 합을 출력한다.
    • Memo
      • 단순히 1씩 더하는 것이 아니라 for문을 활용하여 1, 2, 3, ... 을 더하는 것이 목적
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		
		int sum = 0;
		for(int i = 1; i <= n; i++)
			sum += i;
		System.out.println(sum);
	}
}

 

  • 10818번
    • 문제
      • N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
    • 입력
      • 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
    • 출력
      • 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
    • Memo
      • 처음에는 min의 초기값을 잘못 줘서 틀림
      • for문 하나에 입력받고 값 검사해서 한번에 하는 것이 효율적 고민없이 for문 남발하지 않기
      • 풀면서 for문 줄이는 것 고민하기
      • 정수에서 최대 최소를 설정해줄 때 무작정 임의의 정수를 주기보다 Integer.MAX_VALUE, MIN_VALUE 를 사용하면 완성도 높아짐
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int []arr = new int[n];
		
		int max = Integer.MIN_VALUE;
		int min = Integer.MAX_VALUE;
		for(int i= 0; i < n; i++) {
			arr[i] = sc.nextInt();
			if( max < arr[i])
				max = arr[i];
			if( min > arr[i])
				min = arr[i];
		}
		sc.close();
		System.out.print(min+" "+max);
	}
}

 

  • 2438번
    • 문제
      • 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
    • 입력
      • 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
    • 출력
      • 첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		
		for(int i= 1; i <= n; i++) {
			for(int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}