성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 8597 2813 2369 34.195%

문제

8*8크기의 체스판에 왕이 하나 있다. 킹의 현재 위치가 주어진다. 체스판에서 말의 위치는 다음과 같이 주어진다. 알파벳 하나와 숫자 하나로 이루어져 있는데, 알파벳은 열을 상징하고, 숫자는 행을 상징한다. 열은 가장 왼쪽 열이 A이고, 가장 오른쪽 열이 H까지 이고, 행은 가장 아래가 1이고 가장 위가 8이다. 예를 들어, 왼쪽 아래 코너는 A1이고, 그 오른쪽 칸은 B1이다.

킹은 다음과 같이 움직일 수 있다.

  • R : 한 칸 오른쪽으로
  • L : 한 칸 왼쪽으로
  • B : 한 칸 아래로
  • T : 한 칸 위로
  • RT : 오른쪽 위 대각선으로
  • LT : 왼쪽 위 대각선으로
  • RB : 오른쪽 아래 대각선으로
  • LB : 왼쪽 아래 대각선으로

체스판에는 돌이 하나 있는데, 돌과 같은 곳으로 이동할 때는, 돌을 킹이 움직인 방향과 같은 방향으로 한 칸 이동시킨다. 아래 그림을 참고하자.

입력으로 킹이 어떻게 움직여야 하는지 주어진다. 입력으로 주어진 대로 움직여서 킹이나 돌이 체스판 밖으로 나갈 경우에는 그 이동은 건너 뛰고 다음 이동을 한다.

킹과 돌의 마지막 위치를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 킹의 위치, 돌의 위치, 움직이는 횟수 N이 주어진다. 둘째 줄부터 N개의 줄에는 킹이 어떻게 움직여야 하는지 주어진다. N은 50보다 작거나 같은 자연수이고, 움직이는 정보는 위에 쓰여 있는 8가지 중 하나이다.

출력

첫째 줄에 킹의 마지막 위치, 둘째 줄에 돌의 마지막 위치를 출력한다.

예제 입력 1 복사

A1 A2 5
B
L
LB
RB
LT

예제 출력 1 복사

A1
A2

예제 입력 2 복사

A1 H8 1
T

예제 출력 2 복사

A2
H8

예제 입력 3 복사

A1 A2 1
T

예제 출력 3 복사

A2
A3

예제 입력 4 복사

A1 A2 2
T
R

예제 출력 4 복사

B2
A3

예제 입력 5 복사

A8 B7 18
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB
RB

예제 출력 5 복사

G2
H1

예제 입력 6 복사

C1 B1 3
L
T
LB

예제 출력 6 복사

B2
A1

정답

package project;

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuffer sb = new StringBuffer();
        
        String move_input = "";
        int cnt = 0;
        
        char[] king_pos, stone_pos, next_king, next_stone;
        
        // 킹 포지션
        king_pos = st.nextToken().toCharArray();
        // 돌 포지션
        stone_pos = st.nextToken().toCharArray();
        // 몇 번 옮기는지 입력
        cnt = Integer.parseInt(st.nextToken());
        
        for(int i = 0; i < cnt; i++){
            move_input = br.readLine();
            next_king = move(move_input, king_pos);
            if(Range(next_king)){ // 킹이 범위 안에 있네
                if(next_king[0] == stone_pos[0] && next_king[1] == stone_pos[1]){ // 옮긴 킹의 위치하고 돌의 위치가 같네?
                    next_stone = move(move_input, stone_pos);
                    if(Range(next_stone)){ // 킹도 범위 안이고 좌표가 같으나 돌이 움직일 수 있으면 둘다 바꾼다.
                        king_pos = next_king;
                        stone_pos = next_stone;
                    }else{ // 돌이 움직일 수 없으면
                        continue;
                    }
                }else{ // 안곂치네? 고럼 움직여야지
                    king_pos = next_king;
                }
                
            }else{ // 킹이 범위에 없네? 그럼 무시
                continue;
            }
        }
        
        for(int i = 0; i < king_pos.length; i++){
            sb.append(king_pos[i]);
        }sb.append(" ");
        for(int i = 0; i < stone_pos.length; i++){
            sb.append(stone_pos[i]);
        }
        
        System.out.print(sb);
    }
    
    // 범위 넘어가는지 여부
    public static Boolean Range(char[] range){
        if(range[0]<'A' || range[0]>'H' || range[1]<'1' || range[1]>'8')
            return false;
        else
            return true;
    }
        
    public static char[] move(String mv, char[] pos){
        char[] result = pos.clone();
        // char로 된 'A', 'B' 는 아스키 코드로 인식되어 ++ --가 가능하다
        switch(mv){
            case "R":
                result[0]++;
                break;
            case "L":
                result[0]--;
                break;
            case "B":
                result[1]--;
                break;
            case "T":
                result[1]++;
                break;
            case "RT":
                result[0]++;    result[1]++;
                break;
            case "LT":
                result[0]--;    result[1]++;
                break;
            case "RB":
                result[0]++;    result[1]--;
                break;
            case "LB":
                result[0]--;    result[1]--;
        }
        return result;
    }
}

'코딩테스트 준비 > 백준' 카테고리의 다른 글

2884번 - 알람시계  (0) 2022.03.20
2490번 - 윷놀이  (0) 2022.03.20
10798번 - 세로읽기  (0) 2022.03.20
2752번 문제 - 백준(bronze4)  (0) 2022.03.17
1964번 문제 - 백준(bronze4)  (0) 2022.02.15

알람 시계 성공다국어

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 239069 89719 76437 38.381%

문제

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다.

상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다.

이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다.

바로 "45분 일찍 알람 설정하기"이다.

이 방법은 단순하다. 원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 알람 소리를 들으면, 알람을 끄고 조금 더 잘 것이기 때문이다. 이 방법을 사용하면, 매일 아침 더 잤다는 기분을 느낄 수 있고, 학교도 지각하지 않게 된다.

현재 상근이가 설정한 알람 시각이 주어졌을 때, 창영이의 방법을 사용한다면, 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다.

입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.

출력

첫째 줄에 상근이가 창영이의 방법을 사용할 때, 설정해야 하는 알람 시간을 출력한다. (입력과 같은 형태로 출력하면 된다.)

예제 입력 1 복사

10 10

예제 출력 1 복사

9 25

예제 입력 2 복사

0 30

예제 출력 2 복사

23 45

예제 입력 3 복사

23 40

예제 출력 3 복사

22 55

정답

package project;

import java.util.Scanner;

public class Main {

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int hour = sc.nextInt();
        int min  = sc.nextInt();
        
        if(min < 45){
            hour--;
            min = (60 + min) - 45;
            if(hour < 0){
                hour = 23;
            }
            System.out.print(hour+" "+min);
        }
        else{
            System.out.print(hour+" "+(min-45));
        }
    }
}

'코딩테스트 준비 > 백준' 카테고리의 다른 글

1063번 - 킹  (0) 2022.03.21
2490번 - 윷놀이  (0) 2022.03.20
10798번 - 세로읽기  (0) 2022.03.20
2752번 문제 - 백준(bronze4)  (0) 2022.03.17
1964번 문제 - 백준(bronze4)  (0) 2022.02.15

윷놀이 성공

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 26640 15351 13470 57.973%

문제

우리나라 고유의 윷놀이는 네 개의 윷짝을 던져서 배(0)와 등(1)이 나오는 숫자를 세어 도, 개, 걸, 윷, 모를 결정한다. 네 개 윷짝을 던져서 나온 각 윷짝의 배 혹은 등 정보가 주어질 때 도(배 한 개, 등 세 개), 개(배 두 개, 등 두 개), 걸(배 세 개, 등 한 개), 윷(배 네 개), 모(등 네 개) 중 어떤 것인지를 결정하는 프로그램을 작성하라.

입력

첫째 줄부터 셋째 줄까지 각 줄에 각각 한 번 던진 윷짝들의 상태를 나타내는 네 개의 정수(0 또는 1)가 빈칸을 사이에 두고 주어진다.

출력

첫째 줄부터 셋째 줄까지 한 줄에 하나씩 결과를 도는 A, 개는 B, 걸은 C, 윷은 D, 모는 E로 출력한다.

예제 입력 1 복사

0 1 0 1
1 1 1 0
0 0 1 1

예제 출력 1 복사

B
A
B

정답

package project;

import java.util.Scanner;

public class Main {

    public static void main(String[] args){
        //TODO Auto-generated method stub
		char[][] answer = new char[3][4];
        //BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Scanner sc = new Scanner(System.in);
        int cnt = 0;
        
		for(int i = 0; i < answer.length; i++){            
            String str = sc.nextLine().trim();
            str = str.replace(" ","");
		    for(int j = 0; j < str.length(); j++){
		        answer[i][j] = str.charAt(j);
		    }
		}
        
        for(int i = 0; i < 3; i++){
            for(int j = 0; j < 4; j++){
                if(answer[i][j] == '1'){
                    cnt += 1;
                }
            }
            switch(cnt){
                case 0:
                    System.out.println("D");
                    break;
                case 1:
                    System.out.println("C");
                    break;
                case 2:
                    System.out.println("B");
                    break;
                case 3:
                    System.out.println("A");
                    break;
                case 4:
                    System.out.println("E");
                    break;
            }
            cnt = 0;
        }
    }
}

'코딩테스트 준비 > 백준' 카테고리의 다른 글

1063번 - 킹  (0) 2022.03.21
2884번 - 알람시계  (0) 2022.03.20
10798번 - 세로읽기  (0) 2022.03.20
2752번 문제 - 백준(bronze4)  (0) 2022.03.17
1964번 문제 - 백준(bronze4)  (0) 2022.02.15

세로읽기

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB 15392 8516 7323 57.238%

문제

아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다. 

이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다. 

A A B C D D
a f z z 
0 9 1 2 1
a 8 E W g 6
P 5 h 3 k x

<그림 1>

한 줄의 단어는 글자들을 빈칸 없이 연속으로 나열해서 최대 15개의 글자들로 이루어진다. 또한 만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다. 

심심해진 영석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다. 세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 세로로 읽는다. 다음에 두 번째 글자들을 세로로 읽는다. 이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동 하면서 동일한 자리의 글자들을 세로로 읽어 나간다. 위의 그림 1의 다섯 번째 자리를 보면 두 번째 줄의 다섯 번째 자리의 글자는 없다. 이런 경우처럼 세로로 읽을 때 해당 자리의 글자가 없으면, 읽지 않고 그 다음 글자를 계속 읽는다. 그림 1의 다섯 번째 자리를 세로로 읽으면 D1gk로 읽는다. 

그림 1에서 영석이가 세로로 읽은 순서대로 글자들을 공백 없이 출력하면 다음과 같다:

Aa0aPAf985Bz1EhCz2W3D1gkD6x

칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.

입력

총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 각 줄의 시작과 마지막에 빈칸은 없다.

출력

영석이가 세로로 읽은 순서대로 글자들을 출력한다. 이때, 글자들을 공백 없이 연속해서 출력한다. 

예제 입력 1 복사

ABCDE
abcde
01234
FGHIJ
fghij

예제 출력 1 복사

Aa0FfBb1GgCc2HhDd3IiEe4Jj

예제 입력 2 복사

AABCDD
afzz
09121
a8EWg6
P5h3kx

예제 출력 2 복사

Aa0aPAf985Bz1EhCz2W3D1gkD6x

정답

package project;

import java.util.Scanner;

public class Main {

    public static void main(String[] args){
        //TODO Auto-generated method stub
		char[][] answer = new char[5][15];
        //BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Scanner sc = new Scanner(System.in);
        
		for(int i = 0; i < answer.length; i++){            
            String str = sc.nextLine().trim();       
		    for(int j = 0; j < str.length(); j++){
		        answer[i][j] = str.charAt(j);
		    }
		}
        
        for(int i = 0; i < 15; i++){
            for(int j = 0; j < 5; j++){
                if(answer[j][i] == ' ' || answer[j][i] == '\0'){
                    continue;
                }
                System.out.print(answer[j][i]);
            }
        }
    }
}

'코딩테스트 준비 > 백준' 카테고리의 다른 글

2884번 - 알람시계  (0) 2022.03.20
2490번 - 윷놀이  (0) 2022.03.20
2752번 문제 - 백준(bronze4)  (0) 2022.03.17
1964번 문제 - 백준(bronze4)  (0) 2022.02.15
백준(bronze4) - (22.01.31)  (0) 2022.01.31

+ Recent posts