티스토리 뷰
해커랭크 챌린지 11일차다!!
오늘 문제는 지금까지 풀었던 문제중에
가장 막막하고 재밌었다!!(?)
우선 잠깐의 결과 확인부터~
필자의 코딩 문제 풀기 역사 이래로(?)
최초로 부분 테스트 케이스 통과
(즉, 결론적으로 틀린 거임)
근데 확실히 틀린게 아니라 애매하게 틀려서
더 흥미로웠음.(?)
(왜냐면 조금만 수정하면 풀 수 있다는 생각이 드니까 넘 짜릿하고 재밌었다. 😆)
처음엔 문제를 이해하는데 한 10분 이상을 소요했다.
번역기를 돌려도 모래시계 라는 말이 무엇을 의미하는지 몰랐고
번역기 + 예제 소스코드 설명 등을 한참 읽어보다 문제를 이해했다.
네이버 부스트캠프 코딩테스트를 응시하면서도
경험했었던 문제인데
백지에서 내가 직접 구현하는 것보다
입력받는 값까지 구현해두고 빈칸 채우는 식으로 문제 푸는것이
필자에게는 더 어렵다.
(아직 여러 데이터 타입과 입력 방식이 미숙해서 그런 듯,,)
이 문제도 이해하자마자
필자는 이중 배열([][]) 써서 for문 두번 돌려서
문제를 풀고 싶었으나
입력 받는 초기 세팅이
List<List<Integer>> arr = new ArrayList<>();
이렇게 세팅 되어 있었고for문 반복으로 ArrayList를 채우는 것이 아닌
arr.add(
Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList())
);
stream으로 ArrayList를 채우는 방식이었다.
그래서 필자가 처음 생각한 for문으로 먼저 백지에 풀어보았다.
코드를 첨부한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
/*
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
*/
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int arr[][] = new int[6][6];
int sum = 0;
int max = 0;
for (int i = 0; i < 6; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < 6; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
sum = arr[i][j] + arr[i][j + 1] + arr[i][j + 2]
+ arr[i + 1][j + 1] + arr[i + 2][j] + arr[i + 2][j + 1] + arr[i + 2][j + 2];
if (sum > max) max = sum;
}
}
System.out.println(max);
}
}
이러한 방식을 사용했다는 것만 알아두고
일단 계속 읽어보자!!
(위의 소스코드에서 놓친 부분이 있어
테스트 케이스 실행시 일부 테스트 케이스만 실행되므로
꼭 끝까지 읽길 바란다!! ❗❗)
위의 코드를 실행시켜보니
처음 테스트케이스는 통과했어서
주어진 조건에 맞추어 다시 실행해보았다.
그렇게 작성한 코드는 다음과 같다.
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
int max = 0;
List<List<Integer>> arr = new ArrayList<>();
IntStream.range(0, 6).forEach(i -> {
try {
arr.add(
Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList())
);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
bufferedReader.close();
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
sum = arr.get(i).get(j) + arr.get(i).get(j+1) + arr.get(i).get(j+2)
+ arr.get(i+1).get(j+1) + arr.get(i+2).get(j) + arr.get(i+2).get(j+1) + arr.get(i+2).get(j+2);
if (sum > max) max = sum;
}
}
System.out.println(max);
}
}
이제 맞겠지,, 하고
테스트 케이스를 실행시키니
다음과 같이 일부 테스트 케이스만 통과했다.
궁금해서 test 케이스 잠금을 해제하고 확인해보니
음수 arraylist 등장!!
미처 음수는 생각하지 못했고
음수일 때 문제가 발생할 수 있는 부분은
max = 0
밖에 없었다.
음수들의 합이 0보다 작으므로
음수arraylist에선 항상 0이 출력되던 것,,,
그래서 조건에 맞게
(최소 값이 -9이므로
-9*7(모래시계모양)=-63)
max=-64;로 설정해주었다.
그렇게 작성한 최종 코드를 다시 첨부한다.
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
import java.util.regex.*;
import java.util.stream.*;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
int max = -64;
List<List<Integer>> arr = new ArrayList<>();
IntStream.range(0, 6).forEach(i -> {
try {
arr.add(
Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList())
);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
bufferedReader.close();
for (int i = 0; i <= 3; i++) {
for (int j = 0; j <= 3; j++) {
sum = arr.get(i).get(j) + arr.get(i).get(j+1) + arr.get(i).get(j+2)
+ arr.get(i+1).get(j+1) + arr.get(i+2).get(j) + arr.get(i+2).get(j+1) + arr.get(i+2).get(j+2);
if (sum > max) max = sum;
}
}
System.out.println(max);
}
}
이제 테스트 케이스 실행 결과를 보자.
보다 싶이 통과할 수 있었다.
오늘 너무 신나게(?)
설명하다보니 소스코드에 대한 설명도 많이 적혀있었기 때문에
코드를 보면 딱히 이해되지 않는 부분은 없을 것이다!!
만약 이해되지 않거나 궁금한 점이 있다면 댓글로 질문해주길 바란다.
왠지 모르겠는데 오늘 챌린지가
포스팅도 가장 열심히 썼고
문제도 쫀득쫀득 재밌게 잘 풀렸다.
(문제 이해하는데 적당한 고민 + 문제 풀이에 적당한 고민 +
테스트 케이스 불발 + 금세 예외 캐치 + 그걸 신나게 설명하는 지금의 나,,)
최근 슬럼프와 번아웃을 가볍게 잊으라고 준
선물같은 문제가 아닐까 싶다.
그럼 내일 Day12의 챌린지로 다시 만나자.
😊
'해커랭크 챌린지' 카테고리의 다른 글
[hackerrank] hackerrank challenges Day 12 자바 코드 리뷰 (0) | 2022.07.05 |
---|---|
[hackerrank] hackerrank challenges Day 12 자바 강의 리뷰 (0) | 2022.07.05 |
[hackerrank] hackerrank challenges Day 11 자바 강의 리뷰 (0) | 2022.07.04 |
[hackerrank] hackerrank challenges Day 10 자바 코드 리뷰 (0) | 2022.07.03 |
[hackerrank] hackerrank challenges Day 9 자바 코드 리뷰 (0) | 2022.07.02 |
- Total
- Today
- Yesterday
- 풀이
- 자바의 정석
- 챌린지
- 디버깅
- 소스코드
- hackerrank challenges
- 강의
- LinkedList
- 해커랭크 챌린지
- stack
- 22 정보처리 산업기사
- 자바
- 개발자
- 해커랭크 자바 챌린지
- queue
- 해커랭크
- 코드
- challenges
- 22 정보처리산업기사
- JPA
- 정보처리 산업기사
- 백준
- 그리디
- Java
- 정보처리산업기사
- 정보처리산업기사 공부법
- hackerrank
- ORM
- 해커랭크 자바
- BAEKJOON
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |