해결된 질문
작성
·
260
·
수정됨
0
안녕하세요. 선생님 강의 정말 잘 보고 있습니다.
저는 for문으로 4개의 합을 한꺼번에 계산했는데 시간복잡도는 O(n^2)로 같으니 괜찮은걸까요?
그리고 알고리즘 공부가 처음이라 시간복잡도를 구글링해서 찾아봤는데.. 원래 강의에서 따로 설명하는 부분이 없는건지 아니면 진도가 좀 더 나가야 설명해주시는건지 궁금합니다~
(split해서 자르지않고 바로 2차배열로 저장할 수 있네요..
스캐너 메소드를 좀 더 공부해야겠습니다.)
public class INF0209 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
int[][] grid = new int[n][n];
for (int i = 0; i < n; i++) {
String s = sc.nextLine();
String[] split = s.split(" ");
for (int j = 0; j < n; j++) {
grid[i][j] = Integer.parseInt(split[j]);
}
}
INF0209 inf = new INF0209();
System.out.println(inf.solution(grid, n));
}
public int solution(int[][] grid, int n) {
int max = 0;
for (int i = 0; i < n; i++) {
int[] sums = new int[4];
for (int j = 0; j < n; j++) {
sums[0] += grid[i][j];
sums[1] += grid[j][i];
sums[2] += grid[j][j];
sums[3] += grid[j][n-j-1];
}
//최댓값 구하기
for (int sum : sums) {
if(sum > max) {
max = sum;
}
}
}
return max;
}
}
답변 2
0
안녕하세요^^
네. 대각선을 여러번 구하는게 조금 신경쓰이지만 괜찮은 코드입니다. 시간복잡도는 제 강의 "입문자를 위한 코딩테스트 핵심(파이썬)" 에 미리 보기로 열어놓았습니다.
0
안녕하세요 hyun 님, 인프런 AI 인턴이에요.
for문을 이용하여 4개의 합을 한꺼번에 계산하는 방법을 사용하셨는데, 시간 복잡도가 O(n^2)로 나왔다고 하셨네요. 이 경우에도 문제에 따라서 괜찮을 수도 있습니다. 하지만 보통은 시간 복잡도가 더 효율적인 알고리즘을 선택하는 것이 좋습니다.
알고리즘의 시간 복잡도는 알고리즘의 실행 시간이 입력 크기에 어떻게 영향을 받는지를 나타냅니다. 강의에서 시간 복잡도에 대한 설명이 조금 더 나중에 나올 수도 있으며, 경우에 따라서는 자체적으로 학습해야 할 수도 있습니다. 알고리즘과 시간 복잡도 체계적으로 공부하는 것이 좋습니다.
덧붙여, split() 메소드를 사용하지 않고 바로 2차원 배열에 저장할 수도 있습니다. 각 줄을 읽어서 문자열을 분리하지 않고, 그대로 정수로 변환하여 2차원 배열에 저장하는 방법도 가능합니다.
스캐너 메소드에 대해 공부하시는 것은 좋은 생각입니다. Java에서는 다양한 입력 방법을 제공하기 때문에, 스캐너를 활용하여 편리하게 입력을 받을 수 있습니다.
프로그래밍에 대한 궁금한 점이나 도움이 필요하신 부분이 있다면 언제든지 물어보세요. 감사합니다!
감사합니다!