ahlight
개발 저장소
ahlight
전체 방문자
오늘
어제
  • 분류 전체보기 (197)
    • Java (7)
    • Spring (5)
    • JPA (2)
    • JavaScript (0)
    • Computer Science (12)
      • 디자인패턴, 프로그래밍 패러다임 (1)
      • 네트워크 (4)
      • 운영체제 (4)
      • 데이터베이스 (3)
      • 자료구조 (0)
    • 알고리즘 (1)
    • 프로그래머스 (13)
    • 백준 (94)
    • 서평 (3)
    • 회고 (1)
    • TIL (58)
    • 기타 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • Java
  • 넥스트스텝
  • TDD
  • 클린코드
  • 라즈베리파이4 #홈서버 #포트포워딩 #dhcp

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ahlight

개발 저장소

백준

백준 3020번 자바 ☆

2022. 12. 10. 15:28

문제

https://www.acmicpc.net/problem/3020

 

3020번: 개똥벌레

개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이

www.acmicpc.net

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main3020 {
	
	static int N,H;
	static int[][] cave;
	static int[] stalactite;
	static List<Integer> list = new ArrayList<Integer>();

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt();
		H = sc.nextInt();
		cave = new int[H][N];
		stalactite = new int[N];
		
		for (int i=0; i<N; i++) {
			stalactite[i] = sc.nextInt();
		}
		
		for (int i=0; i<N; i++) {
			if (i%2 == 0) {
				for (int k=H-1; k>=H-stalactite[i]; k--) {
					cave[k][i] = 1;
				}
			} else {
				for (int k=0; k<stalactite[i]; k++) {
					cave[k][i] = 1;
				}
			}
		}
		
		int test = 0;
		
		for (int i=0; i<H; i++) {
			int count = 0;
			for (int j=0; j<N; j++) {
				if (cave[i][j] == 1) {
					count++;
				} 
			}
			list.add(count);
		}
		
		Collections.sort(list);
		
		System.out.println(list.get(0)+" "+Collections.frequency(list, list.get(0)));
	}
}
import java.util.Scanner;

public class Main3020_1 {
	
	static int N,H;
	static int[] stalacmite; // 석순
	static int[] stalactite; // 종유석
	static int min;
	static int cnt;

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt();
		H = sc.nextInt();
		stalactite = new int[H];
		stalacmite = new int[H];
		min = N;
		
		for (int i=0; i<N/2; i++) {
			stalacmite[sc.nextInt()]++;
			stalactite[sc.nextInt()]++;
		}
		
		for (int i=1; i<H; i++) {
			stalacmite[i] += stalacmite[i-1];
			stalactite[i] += stalactite[i-1];
		}
		
		for (int i=1; i<=H; i++) {
			int sum = 0;
			sum = stalacmite[H-1] - stalacmite[i-1] + stalactite[H-1] - stalactite[H-i];
			
			if (min > sum) {
				min = sum;
				cnt = 1;
			} else if (min == sum) {
				cnt++;
			}
		}
		
		System.out.println(min + " " + cnt);
		
	}
}

1. 첫번째 코드는 메모리초과 발생. 메모리 초과가 아니면 시간 초과가 발생했을 것이다. 처음 접근을 2차원 배열로해서 그런지 2차원 배열안에 계속 갇혀서 생각을 다른쪽으로 해보지 못했다.

 

2. 이번에도 다른 글들을 참고해서 다시 알고리즘을 구성했다. 일단 내가 가장 놓친 중요포인트는 석순,종유석 배열의 값에 직접 각각의 높이를 입력하려 했던 것이다. 각 배열의 인덱스에 높이를 넣고 그 값을 개수로 저장해야했다. 그 다음은 개똥벌레의 구간이 밑에서 부터 올라가기에 종유석 구간합 부분에서 주의해줘야 한다.

 

3. 사실 이전에도 배열의 인덱스에 값을 저장하는 방법으로 푸는 문제들이 있었지만 이번에도 그런쪽으로 생각을 못했다. 

앞으로도 많은 반복이 필요하다.

'백준' 카테고리의 다른 글

백준 2293번 자바 ☆  (0) 2022.12.14
백준 1463번 자바 ☆  (0) 2022.12.13
백준 11660번 자바 ☆  (0) 2022.12.09
백준 10026번 자바  (0) 2022.12.07
백준 2468  (0) 2022.12.06
    '백준' 카테고리의 다른 글
    • 백준 2293번 자바 ☆
    • 백준 1463번 자바 ☆
    • 백준 11660번 자바 ☆
    • 백준 10026번 자바
    ahlight
    ahlight

    티스토리툴바