728x90
https://level.goorm.io/exam/195700/%EC%A4%91%EC%B2%A9-%EC%A0%90/quiz/1
728x90
내 생각
22번 테스트케이스만 fail이 떠서 문제 풀이는 잘한 거 같은데 어떤 예외 상황이 있을지 고민해 봤다.
한 칸에 생기는 중첩 점들의 개수는 세로 선 x 가로 선인데, 한 칸에 세로 선 5만 개, 가로 선 5만 개가 있다면 중첩 점은 int 자료형을 넘어가게 된다.
따라서 중첩 점 개수를 담는 자료형을 int에서 long로 해줘야 22번 테스트케이스를 통과할 수 있다.
import java.io.*;
import java.util.*;
class Main {
static int N;
static long[][][] map;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 정사각형의 크기 N과 반직선의 개수 M 입력
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// 정사각형 정보 입력
map = new long[N + 1][N + 1][2]; // map[i][j][0] := (i, j)의 가로선 개수, map[i][j][1] := (i, j)의 세로선 개수
for(int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
String d = st.nextToken();
line(x, y, d);
}
// 점 개수 구하기
long count = 0;
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= N; j++) {
count += map[i][j][0] * map[i][j][1];
}
}
// 출력
System.out.println(count);
}
static private void line(int x, int y, String d) {
if(d.equals("U")) {
for(int i = 1; i <= x; i++) map[i][y][1]++;
} else if(d.equals("D")) {
for(int i = x; i <= N; i++) map[i][y][1]++;
} else if(d.equals("L")) {
for(int i = 1; i <= y; i++) map[x][i][0]++;
} else if(d.equals("R")) {
for(int i = y; i <= N; i++) map[x][i][0]++;
}
}
}
728x90
'Problem Solving > goorm' 카테고리의 다른 글
[구름톤 챌린지 4주 차 학습 일기] 20일차 미션 문제 20. 연결 요소 제거하기 (java) (0) | 2023.09.10 |
---|---|
[구름톤 챌린지 4주 차 학습 일기] 19일차 미션 문제 19. 대체 경로 (java) (0) | 2023.09.10 |
[구름톤 챌린지 4주 차 학습 일기] 17일차 미션 문제 17. 그래프의 밀집도 (java) (0) | 2023.09.06 |
[구름톤 챌린지 4주 차 학습 일기] 16일차 미션 문제 16. 연합 (java) (0) | 2023.09.04 |
[구름톤 챌린지 3주 차 학습 일기] 15일차 미션 문제 15. 과일 구매 (java) (0) | 2023.09.01 |