본문 바로가기

전체 글

[Java] 1959 달팽이3 문제M줄 N칸으로 되어 있는 표 위에, 달팽이 모양으로 선을 그리려고 한다.ㅇ 위의 그림은 M=5, N=3의 예이다.이제 표의 왼쪽 위 칸(○)에서 시작하여, 오른쪽으로 선을 그려 나간다. 표의 바깥 또는 이미 그려진 칸에 닿아서 더 이상 이동할 수 없게 되면, 시계방향으로 선을 꺾어서 그려나간다.ㅇ → ↘↗ ↘ ↓↑ ↓ ↓↑ 끝 ↓↖ ← ↙위의 표는 선을 그려 나간 모양을 나타낸 것이다. 선이 꺾어진 부분은 대각선으로 나타내었다. 표의 모든 칸이 채워질 때까지 선을 몇 번 꺾게 될까? 또, 어디에서 끝나게 될까?입력첫째 줄에 M과 N이 빈 칸을 사이에 두고 주어진다. (2 ≤ M, N ≤ 2,100,000,000)출력첫째 줄에 표의 모든 칸이 채워질 때까지 선.. 더보기
[Java] 20056 마법사 상어와 파이어볼 문제문제어른 상어가 마법사가 되었고, 파이어볼을 배웠다.마법사 상어가 크기가 N×N인 격자에 파이어볼 M개를 발사했다. 가장 처음에 파이어볼은 각자 위치에서 이동을 대기하고 있다.i번 파이어볼의 위치는 (ri, ci), 질량은 mi이고, 방향은 di, 속력은 si이다.위치 (r, c)는 r행 c열을 의미한다.격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고,1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있다.파이어볼의 방향은 어떤 칸과 인접한 8개의 칸의 방향을 의미하며, 정수로는 다음과 같다.7 0 16 25 4 3마법사 상어가 모든 파이어볼에게 이동을 명령하면 다음이 일들이 일어난다.모든 파이어볼이 자신의 방향 di로 속력 si칸 만큼 이동한다.이동하는 중에.. 더보기
[Java] 15558 점프 게임 문제문제상근이는 오른쪽 그림과 같은 지도에서 진행하는 게임을 만들었다.지도는 총 2개의 줄로 나누어져 있으며, 각 줄은 N개의 칸으로 나누어져 있다. 칸은 위험한 칸과 안전한 칸으로 나누어져 있고, 안전한 칸은 유저가 이동할 수 있는 칸, 위험한 칸은 이동할 수 없는 칸이다.가장 처음에 유저는 왼쪽 줄의 1번 칸 위에 서 있으며, 매 초마다 아래 세 가지 행동중 하나를 해야 한다.한 칸 앞으로 이동한다. 예를 들어, 현재 있는 칸이 i번 칸이면, i+1번 칸으로 이동한다.한 칸 뒤로 이동한다. 예를 들어, 현재 있는 칸이 i번 칸이면, i-1번 칸으로 이동한다.반대편 줄로 점프한다. 이때, 원래 있던 칸보다 k칸 앞의 칸으로 이동해야 한다.예를 들어, 현재 있는 칸이 왼쪽 줄의 i번 칸이면, 오른쪽 줄의.. 더보기
[Java] 16927 배열 돌리기 2 문제문제크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다.A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5]예를 들어, 아래와 같은 .. 더보기
[Java] 16926 배열돌리기 1 문제문제크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다.A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5]예를 들어, 아래와 같은 .. 더보기
[Java] 2290 LCD Test 문제문제지민이는 새로운 컴퓨터를 샀다. 하지만 새로운 컴퓨터에 사은품으로 온 LC-디스플레이 모니터가 잘 안나오는 것이다.지민이의 친한 친구인 지환이는 지민이의 새로운 모니터를 위해 테스트 할 수 있는 프로그램을 만들기로 하였다.입력첫째 줄에 두 개의 정수 s와 n이 들어온다.(1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다.출력길이가 s인 '-'와 '|'를 이용해서 출력해야 한다. 각 숫자는 모두 s+2의 가로와 2s+3의 세로로 이루어 진다. 나머지는 공백으로 채워야 한다. 각 숫자의 사이에는 공백이 한 칸 있어야 한다.문제 풀이아래 처럼 패널의 영역을 나누어서 숫자별로 영역들에 표시를 하도록 작성한다.자바 코드import.. 더보기
[Java] 16931 겉넓이 구하기 문제문제크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다.종이의 각 칸에 놓인 정육면체의 개수가 주어졌을 때, 이 도형의 겉넓이를 구하는 프로그램을 작성하시오.위의 그림은 3×3 크기의 종이 위에 정육면체를 놓은 것이고, 겉넓이는 60이다.입력첫째 줄에 종이의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 종이의 각 칸에 놓인 정육면체의 수가 주어진다.출력첫째 줄에 도형의 겉넓이를 출력한다.문제 풀이기본골자는 위, 아래, 좌우전후 6방향에서 검사를 진행하여 각 면의 겉넓이를 구하는 것.겉넓비 구하는 공식은 아래처럼 한다.맨 앞의 면은 겉넓이에 그냥 더한다.2.바로 뒷 쪽의 높이에서 앞 쪽의 높이.. 더보기
[Java] 16967 배열 복원하기 문제문제크기가 H × W인 배열 A와 두 정수 X와 Y가 있을 때,크기가 (H + X) × (W + Y)인 배열 B는 배열 A와 배열 A를 아래로 X칸,오른쪽으로 Y칸 이동시킨 배열을 겹쳐 만들 수 있다. 수가 겹쳐지면 수가 합쳐진다.즉, 배열 B의 (i, j)에 들어있는 값은 아래 3개 중 하나이다.(i, j)가 두 배열 모두에 포함되지 않으면, Bi,j = 0이다.(i, j)가 두 배열 모두에 포함되면, Bi,j = Ai,j + Ai-X,j-Y이다.(i, j)가 두 배열 중 하나에 포함되면, Bi,j = Ai,j 또는 Ai-X,j-Y이다.배열 B와 정수 X, Y가 주어졌을 때, 배열 A를 구해보자.입력첫째 줄에 네 정수 H, W, X, Y가 주어진다. 둘째 줄부터 H + X개의 줄에 배열 B의 원소가.. 더보기