백준 22935번 - 이진 딸기

박진형·2021년 8월 17일
0

algorithm

목록 보기
65/111

문제 풀이

먼저 1에서 15까지의 숫자에 대응하는 이진 딸기 문자열을 만들어줬다.
숫자를 이진수로 바꾸고 1에는 딸기 0에는 V를 붙이면된다.

이제 N을 입력받는데, N이 1~15라면 그냥 리스트에서 바로 찾아서 쓰면된다.
만약에 16을 넘어간다면 순서는 15에서 1로 내려가고 2에서 15로 올라가는 14개씩 반복되는 패턴을 가진다.
그러면 이것을 나누기 연산으로 올라가는 구간인지, 내려가는 구간인지 찾아주고 나머지 연산으로 그 중에 몇번째인지 찾을 수 있다.

N이 16보다 크다면 N - 16을 해주어서 패턴에 돌입한다.
14로 나누어서 몫이 짝수면 내려가는 구간이고, 홀수면 올라가는 구간이다.
그 후 나머지 연산으로 list에서 몇번째를 꺼내야할지만 고려하면된다.

문제 링크

boj/22935

소스코드

PS/22935.java

    import java.util.*;


    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));



        public static void main(String[] args) throws IOException {
            List<String> list = new ArrayList<>();
            for (int i = 1; i <= 15; i++) {
                int num = i;
                String s = "";
                for (int j = 0; j < 4; j++) {
                    s += num % 2;
                    num /= 2;
                }
                String s2 = "";
                for (int j = s.length()-1; j >=0; j--) {
                    if (s.charAt(j) == '0') {
                        s2 += "V";
                    } else
                        s2 += "딸기";
                }

                list.add(s2);
            }

            int T = Integer.parseInt(br.readLine());
            for (int i = 0; i < T; i++) {
                int n = Integer.parseInt(br.readLine());
                if (n <= 15) {
                    bw.write(list.get(n-1));

                } else {
                    int n2 = n - 16;
                    int p = n2 / 14;
                    int q = n2 % 14;
                    if (p % 2 == 0) {
                        bw.write(list.get(13 - q));
                    } else {
                        bw.write(list.get(q + 1));
                    }
                }
                bw.write("\n");
                bw.flush();
            }
        }
    }

0개의 댓글