λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🎯PS - Baekjoon, etc/κ΅¬ν˜„

[이것이 μ½”λ”©ν…ŒμŠ€νŠΈλ‹€] μ™•μ‹€μ˜ λ‚˜μ΄νŠΈ (Java)

by hyeon-z 2023. 3. 4.

 

μ‹œκ°„μ œν•œ

1초

 

문제

행볡 μ™•κ΅­μ˜ μ™•μ‹€ μ •원은 μ²΄μŠ€νŒκ³Ό κ°™μ€ 8 X 8 μ’Œν‘œ ν‰λ©΄μ΄λ‹€. 

μ™•μ‹€ μ •μ›μ˜ νŠΉμ •ν•œ ν•œ μΉΈμ— λ‚˜μ΄νŠΈκ°€ μ„œ μžˆλ‹€.
λ‚˜μ΄νŠΈλŠ” λ§€μš° μΆ©μ„±μŠ€λŸ¬μš΄ μ‹ ν•˜λ‘œμ„œ λ§€μΌ λ¬΄μˆ μ„ μ—°λ§ˆν•œλ‹€.
λ‚˜μ΄νŠΈλŠ” λ§μ„ νƒ€κ³  μžˆκΈ° λ•Œλ¬Έμ— μ΄λ™μ„ ν•  λ•ŒλŠ” L자 ν˜•νƒœλ‘œλ§Œ μ΄λ™ν•  μˆ˜ μžˆμœΌλ©° μ •원 λ°–μœΌλ‘œλŠ” λ‚˜κ°ˆ μˆ˜ μ—†λ‹€.
λ‚˜μ΄νŠΈλŠ” νŠΉμ •ν•œ μœ„μΉ˜μ—μ„œ λ‹€μŒκ³Ό κ°™μ€ 2κ°€μ§€ κ²½μš°λ‘œ μ΄λ™ν•  μˆ˜ μžˆλ‹€.

1. μˆ˜ν‰μœΌλ‘œ λ‘ μΉΈ μ΄λ™ν•œ λ’€μ— μˆ˜μ§μœΌλ‘œ ν•œ μΉΈ μ΄λ™ν•˜κΈ°
2. μˆ˜μ§μœΌλ‘œ λ‘ μΉΈ μ΄λ™ν•œ λ’€μ— μˆ˜ν‰μœΌλ‘œ ν•œ μΉΈ μ΄λ™ν•˜κΈ°

이처럼 8 X 8 μ’Œν‘œ ν‰λ©΄μƒμ—μ„œ λ‚˜μ΄νŠΈμ˜ μœ„μΉ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ λ‚˜μ΄νŠΈκ°€ 이동할 수 μžˆλŠ” 경우의 수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.
μ΄λ•Œ μ™•μ‹€μ˜ μ •μ›μ—μ„œ ν–‰ μœ„μΉ˜λ₯Ό ν‘œν˜„ν•  λ•ŒλŠ” 1λΆ€ν„° 8둜 ν‘œν˜„ν•˜λ©°, μ—΄ μœ„μΉ˜λ₯Ό ν‘œν˜„ν•  λ•ŒλŠ” aλΆ€ν„° h둜 ν‘œν˜„ν•œλ‹€.

 

μž…λ ₯

첫째 μ€„에 8 x 8 μ’Œν‘œ ν‰λ©΄μƒμ—μ„œ ν˜„μž¬ λ‚˜μ΄νŠΈκ°€ μœ„μΉ˜ν•œ κ³³μ˜ μ’Œν‘œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ‘ λ¬Έμžλ‘œ κ΅¬μ„±λœ λ¬Έμžμ—΄μ΄ μž…λ ₯λœλ‹€.
μž…λ ₯ λ¬ΈμžλŠ” a1처럼 μ—΄κ³Ό ν–‰μœΌλ‘œ μ΄λ€„μ§„λ‹€.

μž…λ ₯ μ˜ˆμ‹œ

a1

 

좜λ ₯

첫째 μ€„에 λ‚˜μ΄νŠΈκ°€ μ΄λ™ν• μˆ˜ μžˆλŠ” κ²½μš°μ˜ μˆ˜λ₯Ό μΆœλ ₯ν•˜μ‚¬μ˜€.

좜λ ₯ μ˜ˆμ‹œ

2

문제 풀이 κ³Όμ •

μž…λ ₯ κ°’ λΆ„λ¦¬ν•œ ν›„ 숫자둜 λ³€ν™˜ν•˜κΈ°

μž…λ ₯ κ°’μ˜ ν˜•μ‹μ€ a1으둜 μ—΄ + ν–‰μ˜ 문자둜 이루어져 μžˆλ‹€.

 

1. μ—΄κ³Ό 행을 λΆ„λ¦¬ν•œλ‹€.

μ—΄κ³Ό 행을 μ‚΄νŽ΄λ³΄λ©΄ λͺ¨λ‘ ν•œμžλ¦¬ μˆ˜μ΄λ―€λ‘œ charAt()을 μ‚¬μš©ν•˜μ—¬ λΆ„λ¦¬ν•œλ‹€.

char column = input.charAt(0);  // 'a'
char row = input.charAt(1);  // '1'

 

2. κ³„μ‚°ν•˜κΈ° νŽΈν•˜λ„λ‘ μ—΄κ³Ό 행을 숫자둜 λ°”κΎΌλ‹€.

- μ—΄μ˜ 경우

문자 a, b, c, d, e, f, g, hλ₯Ό 숫자 1, 2, 3, 4, 5, 6, 7, 8둜 λ°”κΎΌλ‹€.

int column = input.charAt(0) - 'a' + 1;

 

- ν–‰μ˜ 경우

문자 1, 2, 3, 4, 5, 6, 7, 8을 숫자 1, 2, 3, 4, 5, 6, 7, 8둜 λ°”κΎΌλ‹€.

int row = input.charAt(1) - '0';

 

λ‚˜μ΄νŠΈκ°€ 이동할 수 μžˆλŠ” 경둜 μ‚΄νŽ΄λ³΄κΈ°
1. μˆ˜ν‰μœΌλ‘œ λ‘ μΉΈ μ΄λ™ν•œ λ’€μ— μˆ˜μ§μœΌλ‘œ ν•œ μΉΈ μ΄λ™ν•˜κΈ°
2. μˆ˜μ§μœΌλ‘œ λ‘ μΉΈ μ΄λ™ν•œ λ’€μ— μˆ˜ν‰μœΌλ‘œ ν•œ μΉΈ μ΄λ™ν•˜κΈ°

μˆ˜ν‰(μ—΄)으둜 두 μΉΈ 이동: col - 2, col + 2

수직(ν–‰)으둜 ν•œ μΉΈ 이동: row - 1, row + 1

=>  (col - 2, row - 1), (col - 2, row + 1), (col + 2, row - 1), (col + 2, row + 1)

 

수직(ν–‰)으둜 두 μΉΈ 이동: row - 2, row + 2

μˆ˜ν‰(μ—΄)으둜 ν•œ μΉΈ 이동: col - 1, col + 1

=> (row - 2, col - 1), (row - 2,  col + 1), (row + 2, col - 1), (row + 2, col + 1)

 

λ‚˜μ΄νŠΈκ°€ 이동할 수 μžˆλŠ” 경둜: 총 8κ°€μ§€

 

ν•΄λ‹Ή 경둜λ₯Ό dx, dy의 ν˜•νƒœλ‘œ ν‘œν˜„ν•˜μ—¬ κ³„μ‚°ν•œλ‹€.

 

int[] dx = {-1, 1, -1, 1, -2, -2, 2, 2};
int[] dy = {-2, -2, 2, 2, -1, 1, -1, 1};

for (int i = 0; i < dx.length; i++) {
    int nextRow = row + dx[i];
    int nextColumn = column + dy[i];
}

 

λ‚˜μ΄νŠΈκ°€ 정원 λ°–μœΌλ‘œ λ‚˜κ°€λŠ” κ²½μš°λŠ” 이동할 수 μ—†λ‹€.

 

for (int i = 0; i < dx.length; i++) {
    int nextRow = row + dx[i];
    int nextColumn = column + dy[i];

    if (nextRow < 1 || nextRow > 8 || nextColumn < 1 || nextColumn > 8)
        continue;

    count++;
}

κ΅¬ν˜„ μ½”λ“œ

public class TC_4_1 {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        int column = input.charAt(0) - 'a' + 1;
        int row = input.charAt(1) - '0';
        int count = 0;

        int[] dx = {-1, 1, -1, 1, -2, -2, 2, 2};
        int[] dy = {-2, -2, 2, 2, -1, 1, -1, 1};

        for (int i = 0; i < dx.length; i++) {
            int nextRow = row + dx[i];
            int nextColumn = column + dy[i];

            if (nextRow < 1 || nextRow > 8 || nextColumn < 1 || nextColumn > 8)
                continue;

            count++;
        }
        System.out.println(count);
    }
}

 

 

Reference

이것이 취업을 μœ„ν•œ μ½”λ”©ν…ŒμŠ€νŠΈλ‹€ - λ‚˜λ™λΉˆ

λŒ“κΈ€