<문제 제시>
<예시 입출력>
<문제 해결 과정>
먼저 Scanner 클래스를 이용해 변수에 nextInt() 방식으로 하나하나 담고자 하였다.
비효율적인 데이터 담기인것을 알면서도 문제를 차근차근 풀어보고 싶어 진행을 해보았다.
변수를 말의 종류인 6종류에 맞춰 6개를 만들고 (king, queen, rook...)
각각 sc.nextInt() 처리로 데이터를 담고 밑에서 if 문을 통해 처리하고자하였다.
if문에서 king이 1이 아니고, 1보다 클때
king이 1이 아니고, 1보다 작을때 를 하나하나 조건 붙이다보니 코드가 매우 길어졌다.
효율적인 방법이 없을까 고민하다가 ArrayList 나 배열을 사용하기로했다. ArrayList는 문자를 담는 것이라고 알고 있어서 배열을 사용해 구현하고자하였다.
int[] cnt = new int[6]; // 총 말의 종류
그러나 체스 말이 총 16개인 것을 어떻게 표현해야하는지 좋은 생각이 떠오르지 않아, 다른 블로그의 도움을 받았다.
int[] full = new int[]{1, 1, 2, 2, 2, 8};
new int[]{ ... } 처럼 배열에 바로 값을 넣는 방식으로 총 말의 수를 지정해줄 수 있었다.
<전체코드>
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] cnt = new int[6]; // 총 말의 종류
int[] full = new int[] {1, 1, 2, 2, 2, 8}; // 말 별 총 갯수
for(int i = 0; i < 6; i++) {
cnt[i] = sc.nextInt(); // 임의의 말 입력받기
}
for(int i = 0; i < full.length; i++) {
cnt[i] = full[i] - cnt[i]; // 입력받은 말 업데이트
System.out.print(cnt[i] + " ");
}
}
}
두번의 for문을 통해 연산이 가능하였다. 첫번째 for문에서는 임의의 말을 입력받았고,
두번째 for문에서는 전체 말의 수를 담은 full 배열에서 임의의 배열 cnt 를 뺄셈하여
출력을 위한 cnt로 업데이트 할 수 있었다.
참고)
https://chung-develop.tistory.com/101
문제링크)
https://www.acmicpc.net/problem/3003
'Algorithms > 백준' 카테고리의 다른 글
[백준] 2753번 '윤년' - Java (0) | 2022.09.02 |
---|---|
[백준] 10172번 '개' - Java (2) | 2022.09.01 |
[백준] 10430번 '나머지' - Java (0) | 2022.08.31 |
[백준] 18108번 '1998년생인 내가 태국에서는 2541년생?!' - Java (0) | 2022.08.30 |
[백준] 1008번 'A/B' - Java (0) | 2022.08.25 |