- 문제
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
- 풀이
import java.io.*;
import java.util.*;
public class Main {
//여러가지의 답이 나올 수 있는 문제입니다.
//처음 문제를 보았을 때, 꽤 어려운 문제라는 생각을 했습니다.
//bfs를 써야하나? 영역안에 1~N까지의 숫자가 들어오는 방법이 다양할텐데, 계속 다음 영역을 찾다가 더이상
//나오지 않으면 백트래킹으로 다시 살펴야 하나? 와 같은 생각을 하고 있었습니다.
//하지만 천천히 문제를 다시 읽어보니 바로 해답이 나왔습니다.
//문제에서 주어지는 조건에 다음과 같이 적혀있습니다.
//같은 가로줄에 있는 수들은 모두 달라야하고,
//같은 세로줄에 있는 수들도 모두 달라야한다.
//위 두 조건을 보면 이미 내가 찾고자 하는 영역들은 이미 나누어져있다는 사실을 알 수 있었습니다.
//따라서 가로줄로만 영역을 나누어도 이미 같은 수가 없기 때문에 영역으로 인정될 수 있었고,
//세로줄로만 영역을 나누어도 영역이 인정될 수 있었습니다.
//이 해법을 찾고 문제를 풀었습니다.
public static void main(String[] args) throws Exception {
//BufferedReader를 이용해 board의 크기 N을 입력받았습니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
//사실 위의 규칙에 따르면 주어지는 board의 내용은 볼 필요가 없습니다.
//N X N 크기를 가지는 board에 가로줄, 또는 세로줄로 영역을 나누어만 주면 되기 때문입니다.
//영역을 구분해줄 idx를 1으로 선언해줍니다.
int idx = 1;
//이제 답을 반환해줄 StringBuilder에 board 모양으로 각 영역을 입력해줍니다.
//저는 가로줄로 영역을 나누어 주기로 하였습니다.
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
//각 i라인에 같은 idx로 채워준 뒤,
for(int j=0; j<N; j++){
sb.append(idx+" ");
}
//줄바꿈을 해주고 idx를 증가시켜줍니다.
sb.append("\n");
idx++;
}
//이렇게 완성된 StringBuilder를 출력합니다.
System.out.println(sb.toString());
}
}
'Coding Test > Softeer' 카테고리의 다른 글
[소프티어] 바이러스, java (0) | 2025.02.21 |
---|---|
[소프티어] 나무 공격, java (0) | 2025.02.21 |
[소프티어] CPTI, java (0) | 2025.02.16 |
[소프티어] GPT식 숫자 비교, java (0) | 2025.02.07 |
[소프티어] 주행거리 비교하기, java (0) | 2025.02.07 |