[백준/자바/JAVA] 14652 : 나는 행복합니다~
[문제]
“나는 행복합니다~ 한화라서 행복합니다~”
행복한 이 노래 가사! 그렇다. 욱제는 한화 이글스의 열렬한 이다. 욱제는 여름방학을 맞아 치킨과 맥주를 챙겨 야구장을 방문했다! 하지만 이게 웬걸? 치맥에 정신이 팔린 욱제는 그만 자신의 관중석 위치가 담긴 티켓을 잃어버리고 말았다. 욱제가 유일하게 기억하는 것이라고는 자신의 관중석 번호 K뿐이다.
당신은 한화 이글스의 감독이다. 열혈인 욱제의 방문에 깊은 감동을 받은 당신은 욱제가 잃어버린 자리를 찾아주려고 한다. 오늘 경기가 펼쳐지는 잠실구장은 세로 길이가 N, 가로 길이가 M인 N*M 크기의 관중석을 가지고 있다. 관중석의 왼쪽 위는 (0, 0), 오른쪽 아래는 (N-1, M-1)으로 표시된다. 각 관중석에는 번호가 아래 그림처럼 매겨져있다. (0, 0)에서부터 0번으로 시작하여 오른쪽으로, 끝에 다다르면 그 아래에서 또 오른쪽으로 숫자가 증가해나가는 식이다.
당신은 관중석의 크기와 욱제 자리의 번호를 알고 있다. 욱제가 잃어버린 자리는 어디일까? 자리를 찾아서 욱제에게 알려주도록 하자!
{ 입 출력 예제 }
[문제풀이]
문제의 이해
- 내 좌석번호가 위치한 행과 열 찾기
접근법
- 2중 for문으로 하는 방법
- 수학적 계산식을 통해 접근하는 방법
수학적 계산법)
(행열의 정의)N = 열의 개수
M = 행의 개수
K = 열 기준 증감번호 ( 내 좌석 번호 )
--행 찾기--
행 번호(rnum)
는 열 기준 증감하는 번호이기 때문에 열로 나누어지면 행이 나온다.
--열 찾기--
열 번호(cnum)
위 그림을 예로 들면 내 좌석은 6번 즉 1행에 있다.
열의 개수(4) 행 번호(1) = 4또 만약 내 좌석을 9로 예를 들어보자
열의 개수(4) 행 번호(2) = 8 (내 좌석의 위 두줄)즉 열의 개수 행번호 는
내 좌석으로부터 윗줄 전부를 의미하며
그 위줄 칸의 총 개수 이기도 하다.
즉, 열을 구하기 위해서 마지막으로
내 좌석 번호 에 위의 식 좌석이 위치한 행으로부터 윗줄 칸의 총 개수 를 빼주면 된다.
[코드작성]
방법1) 2중 for문
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int row = Integer.parseInt(st.nextToken());
int column = Integer.parseInt(st.nextToken());
int mysit = Integer.parseInt(st.nextToken());
int count = 0;
for(int i=0;i<row;i++) {
for(int j=0;j<column;j++) {
if(mysit==count) {
bw.write(i+" "+j);
bw.flush();
}
count++;
}
}
bw.close();
}
}
방법2) 수학적 계산
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
bw.write(String.valueOf((K / M)+" "+(K - (M * (K / M)))));
bw.flush();
bw.close();
}
}
Author And Source
이 문제에 관하여([백준/자바/JAVA] 14652 : 나는 행복합니다~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@osk3856/BOJ-JAVA-Bronze5-14652저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)