예시문제 3 (왕실의 나이트)
행복 왕국의 왕실 정원은 체스판과 같은 8 x 8 좌표 평면입니다. 왕실 정원의 특정한 한 칸에 나이트가 서 있습니다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마합니다.
나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없습니다.
나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있습니다.
- 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 수직으로 두칸 이동한 뒤에 수평으로 한 칸 이동하기.
이처럼 8 x 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하세요. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현합니다.
입력 조건
- 첫째 줄에 8 x 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다.
입력 예시
a1
출력 조건
- 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
출력 예시
2
해결 방법
앞에서 풀었던 상하좌우 문제와 유사하다.
- 나이트가 움직일 수 있는 방향벡터를 배열로 생성한다.
좌표를 문자열로 입력받고 각 행과 열을 정수타입으로 저장한다.
코드
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
int row = input.charAt(1) - '0';
int column = input.charAt(0) - 'a' + 1;
int result = 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 < 8; i++) {
int nextRow = row + dx[i];
int nextColumn = column + dy[i];
if(nextRow >= 1 && nextRow <= 8 && nextColumn >= 1 && nextColumn <= 8) result++;
}
System.out.println(result);
br.close();
예시문제 4 (문자열 재정렬)
- 알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
- 예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.
입력 조건
- 첫째 줄에 하나의 문자열 S가 주어집니다. (1 <= S의 길이 <= 10,000)
입력 예시
K1KA5CB7
출력 조건
- 첫째 줄에 문제에서 요구하는 정답을 출력합니다.
출력 예시
ABCKK13
해결 방법
- 입력받은 문자열에 각 요소가 문자인지 구별하여 문자인것들만 ArrayList에 add 해 준다.
- 문자가 아닌 것들은 모두 더한다.
코드
public class Implement4 {
static ArrayList<Character> arrayList = new ArrayList<>();
static String input;
static int sum = 0;
public static void main(String[] args) throws IOException {
//문자열 재정렬
Scanner sc = new Scanner(System.in);
input = sc.next();
for (int i = 0; i < input.length(); i++) {
if (Character.isLetter(input.charAt(i))) {
arrayList.add(input.charAt(i));
} else {
sum += input.charAt(i) - '0';
}
}
Collections.sort(arrayList);
for (int i = 0; i < arrayList.size(); i++) {
System.out.print(arrayList.get(i));
}
if (sum != 0) System.out.print(sum);
}
}
참고: 이코테2021
'PS' 카테고리의 다른 글
[백준] 스택, 큐 문제들 (10828, 1406, 1966, 1158) (0) | 2024.09.25 |
---|---|
[백준] 1920번 : 수 찾기 (0) | 2023.10.26 |
구현 알고리즘 1 (1) | 2023.10.08 |
그리디 알고리즘 2 (예시 문제 3, 4) (1) | 2023.10.05 |
그리디 알고리즘 1 (0) | 2023.09.22 |