Java 로 풀어보는 알고리즘입니다. 📖
코딩테스트를 대비하여 JAVA1.8 부터 제공되는 함수형 API 는 사용하지 않았습니다.

문제 : https://www.algospot.com/judge/problem/read/MAGICPOWER

 

algospot.com :: MAGICPOWER

마력 문제 정보 문제 KAIST에는 우리가 모르는 전설의 마법사(!)가 살고 있다. 전설의 마법사는 아이템을 사용해서 마력을 보충하는데, 아이템에 쓰여 있는 수만큼 마력을 얻을 수 있다고 한다. 그

www.algospot.com

 

풀이입니다. 🤔

 

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
32
33
34
35
36
import java.util.*;
 
public class Main {
    private static final int[] items = new int[100];
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        int cases = scanner.nextInt();
        while (cases-- > 0) {
            int n = scanner.nextInt(), m = scanner.nextInt();
            for (int i = 0; i < n; ++i) items[i] = scanner.nextInt();
 
            int ret = 0;
            while (m-- > 0) {
                int maxIndex = maxIndexOf(n);
                int maxValue = items[maxIndex];
                ret += maxValue;
                items[maxIndex] = Math.max(maxValue - 10);
            }
 
            System.out.println(ret);
        }
    }
 
    private static int maxIndexOf(int n) {
        int ret = 0, max = 0;
        for (int i = 0; i < n; ++i) {
            if (max >= items[i]) continue;
            max = items[i];
            ret = i;
        }
 
        return ret;
    }
}
cs

 

 

이 포스트를 읽어주셔서 감사합니다. 🙇🏻‍♂️

반응형

'개발이야기 > 알고스팟' 카테고리의 다른 글

[FESTIVAL] 록 페스티벌  (0) 2022.01.06
[NOTE] Note  (0) 2022.01.06
[DECODE] Decoding  (0) 2022.01.05
[FIX] 문제 순서는 난이도 순이 아닙니다  (0) 2022.01.05
[CSBASEBALL] 각본 없는 야구  (0) 2022.01.05
Posted by N'

Java 로 풀어보는 알고리즘입니다. 📖
코딩테스트를 대비하여 JAVA1.8 부터 제공되는 함수형 API 는 사용하지 않았습니다.

문제 : https://www.algospot.com/judge/problem/read/DECODE

 

algospot.com :: DECODE

Decoding 문제 정보 문제 Chip and Dale have devised an encryption method to hide their (written) text messages. They first agree secretly on two numbers that will be used as the number of rows (R) and columns (C) in a matrix. The sender encodes an int

www.algospot.com


풀이입니다. 🤔

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.util.*;
 
public class Main {
    private static final int USE = -1;
    private static final int[][] directions = new int[][]{{01}, {10}, {0-1}, {-10}};
 
    public static void main(String[] args) {
        int[] acc = new int[5];
        int[][] boards = new int[20][20];
        Scanner scanner = new Scanner(System.in);
 
        int cases = scanner.nextInt();
        for (int i = 1; i <= cases; ++i) {
            int r = scanner.nextInt(), c = scanner.nextInt();
            char[] matrix = scanner.next().toCharArray();
            for (int j = 0, len = matrix.length; j < len; ++j) boards[j / c][j % c] = matrix[j] - '0';
 
            System.out.printf("%d %s\n", i, getDecode(boards, acc, r, c));
        }
    }
 
    private static String getDecode(int[][] boards, int[] acc, int r, int c) {
        StringBuilder builder = new StringBuilder();
        int y = 0, x = 0, accLength = 0, directionIndex = 0;
        do {
            acc[accLength++= boards[y][x];
            boards[y][x] = USE;
            if (accLength == 5) {
                accLength = 0;
                builder.append(toString(toDecimal(acc)));
            }
 
            if (isMovable(boards, r, c, y, x, directionIndex)
                    || isMovable(boards, r, c, y, x, directionIndex = (directionIndex + 1) % 4)) {
                y += directions[directionIndex][0];
                x += directions[directionIndex][1];
            } else {
                y = x = -1;
            }
        } while (y != -1);
 
        return builder.toString();
    }
 
    private static int toDecimal(int[] acc) {
        return 16 * acc[0+ 8 * acc[1+ 4 * acc[2+ 2 * acc[3+ acc[4];
    }
 
    private static String toString(int decimal) {
        return (decimal == 0) ? " " : String.format("%c",  'A' + (decimal - 1));
    }
 
    private static boolean isMovable(int[][] boards, int r, int c, int y, int x, int directionIndex) {
        int curY = y + directions[directionIndex][0], curX = x + directions[directionIndex][1];
        if (curY < 0return false;
        if (curY >= r) return false;
        if (curX < 0return false;
        if (curX >= c) return false;
        return boards[curY][curX] != USE;
    }
}
cs

 

나선모양으로 이진수를 읽은 뒤, 10진수로 변경 후, 문제에 주어진 방식처럼 문자로 변경하면 해결할 수 있는 문제입니다. 

나선모양으로 변경하기 위해 각 방향에 대한 이동 처리를 코드로 구현한 것이 아닌, 4가지 방향에 대한 상대좌표를 이용하도록 하였습니다.

 

1
    private static final int[][] directions = new int[][]{{01}, {10}, {0-1}, {-10}};
cs

 

 

이 포스트를 읽어주셔서 감사합니다. 🙇🏻‍♂️

반응형

'개발이야기 > 알고스팟' 카테고리의 다른 글

[NOTE] Note  (0) 2022.01.06
[MAGICPOWER] 마력  (0) 2022.01.05
[FIX] 문제 순서는 난이도 순이 아닙니다  (0) 2022.01.05
[CSBASEBALL] 각본 없는 야구  (0) 2022.01.05
[TSP1] Traveling Salesman Problem 1  (0) 2022.01.04
Posted by N'

Java 로 풀어보는 알고리즘입니다. 📖
코딩테스트를 대비하여 JAVA1.8 부터 제공되는 함수형 API 는 사용하지 않았습니다.

문제 : https://www.algospot.com/judge/problem/read/FIX

 

algospot.com :: FIX

문제 순서는 난이도 순이 아닙니다 문제 정보 문제 알고리즘 문제를 푸는 프로그래밍 대회에서, 문제 순서는 난이도와 관계가 없다. 이 문제는 앞에서부터 풀다가 뒤쪽에 있는 쉬운 문제를 놓치

www.algospot.com

 

풀이입니다. 🤔

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        int cases = scanner.nextInt();
        while (cases-- > 0) {
            int n = scanner.nextInt(), count = 0;
            for (int i = 1; i <= n; ++i) if (scanner.nextInt() == i) ++count;
 
            System.out.println(count);
        }
    }
}
cs

 

 

이 포스트를 읽어주셔서 감사합니다. 🙇🏻‍♂️

반응형

'개발이야기 > 알고스팟' 카테고리의 다른 글

[MAGICPOWER] 마력  (0) 2022.01.05
[DECODE] Decoding  (0) 2022.01.05
[CSBASEBALL] 각본 없는 야구  (0) 2022.01.05
[TSP1] Traveling Salesman Problem 1  (0) 2022.01.04
[NQUEEN] N-Queen  (0) 2022.01.04
Posted by N'