-
[백준 10250번] ACM 호텔 (java)알고리즘 문제 풀기 2021. 4. 16. 10:38
나의 풀이
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { public static void main(String[] args) { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String s = ""; // 입력받는 문자열 int T, H, W, N; ArrayList<Integer> answer = new ArrayList<>(); try { s = bf.readLine(); } catch (IOException e) { System.out.println(e); } T = Integer.parseInt(s); // T 개의 테스트 실시 for (int i = 0; i < T; i++) { try { s = bf.readLine(); } catch (IOException e) { System.out.println(e); } StringTokenizer st = new StringTokenizer(s); H = Integer.parseInt(st.nextToken()); W = Integer.parseInt(st.nextToken()); N = Integer.parseInt(st.nextToken()); // H W N = 세로 가로 번호 // n1 = 백의 자리 (N % H) // 단, N이 H의 배수일 경우 (나머지가 0일 경우) // 가장 꼭대기 층이므로 n1에 H를 대입 // 그 외에는 나머지로 처리 // n2 = 일의 자리 (N / H) // 001호부터 시작하기 때문에 +1을 처리함. // 단, 꼭대기 층이 아닐 때에만. // (호실을 몫으로 계산하기 때문에, 꼭대기 층은 1이 늘어나버림) int n1 = (N % H); int n2 = N / H; if (n1 == 0) { n1 = H; } else { n2++; } answer.add((n1 * 100) + n2); } for (int a : answer) { System.out.println(a); } } }
H와 N을 이용하여 호실을 부여한다. 특히, 호실은 101부터 시작하기 때문에 이와 관련하여 헷갈리지 않게 유의해야한다.
몫과 나머지를 이용하여 처리했는데, 꼭대기 층의 경우 N / H 와 N % H 가 다른 층들과 다르기 때문에 별도로 처리했다.내가 생각한 다른 사람 모범 답안
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; // public class BJ_10250_ACM호텔 { public class Main { static StringTokenizer st; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); st = new StringTokenizer(br.readLine()); int T = Integer.parseInt(st.nextToken()); for (int tc = 1; tc <= T; tc++) { st = new StringTokenizer(br.readLine()); int H = Integer.parseInt(st.nextToken()); // int W = Integer.parseInt(st.nextToken()); st.nextToken(); //// W 는 그냥 버린다. int N = Integer.parseInt(st.nextToken()); // if (N%H == 0) { sb.append(H*100+ N/H).append('\n'); }else { sb.append((N%H)*100+ ((N/H)+1)).append('\n'); } }//for System.out.println(sb); } }
꼭대기 층일 때 (N % H == 0) 일 때로 더욱 코드가 간략해졌다. W도 사용하지 않기 때문에 저장하지 않고 흘렸다.
이런 사소한 차이에서 코드가 더욱 간결해지고, 실행 속도도 더 빠른 것 같다.실행 결과
- 내 코드 : 140 ms
- 모범 답안 : 132 ms
'알고리즘 문제 풀기' 카테고리의 다른 글
[프로그래머스 60057] 문자열 압축 (java) (0) 2021.04.21 [프로그래머스 12899] 124 나라의 숫자 (java) (0) 2021.04.20 [백준 2869번] 달팽이는 올라가고 싶다 (java) (0) 2021.04.19 [백준 2775번] 부녀회장이 될테야 (java) (0) 2021.04.16 [백준 1193번] 분수찾기 (java) (0) 2021.04.15