문제 해석
틀린 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.close();
int tmp = 6; //거듭제곱을 하기 위한
int room = 0;
int findroom = 1;
while(true){
if(findroom >= n){ //만약 입력받은 방번호가 해당 라인의 최대값보다 작은 거면 해당 방 최소 개수는 구한것!
break;
}
findroom += room*tmp; //6의 거듭제곱
room++;
}
System.out.println(room);
}
}
또 틀린 코드2
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.close();
int room = 0; //찾을 방 최소 루트
int findroom = 1; //최소 루트(기본값)
while(findroom <= n){ //만약 입력받은 방번호가 해당 라인의 최대값보다 작은 거면 해당 방 최소 개수는 구한것!
//6*0이 하면 0이 나오는데 시작 주소 1을 입력받을때 0을 받게되는 오류가 생김
findroom += findroom + (room*6); //그래서 최소방 루트값 1을 추가로 더해줌(그렇게 누적더하기한다.)
room++; //여기까지 왔다는 건 아직 찾지 못했다는 것이니 room++해줌
}
System.out.println(room);
}
}
맞은 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.close();
int room = 1; //찾을 방 최소 루트
int findroom = 2; //최소 루트(기본값) => 1을 따로 뺐으니 최소 루트(기준값)가 2이다.
if(n == 1) {
System.out.print(room);
}else{
while(findroom <= n) { //찾을 방번호가 더 클 경우에 반복문 계속
findroom = findroom + (6 * room);
room++;
}
System.out.print(room);
}
}
}
-> 이유를 찾았다.
findroom = findroom + (6 * room); //이부분을 누적 더하기 하는 것이 아니다!
//왜냐 거듭제곱하는 것이기 때문에 누적더하기하면 문제가 생긴다 -> 로직을 잘못 이해!!!! 하고 있던 것!
처음 틀렸던 코드(고침)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.close();
int room = 1;
int findroom = 1;
while(true){
if(findroom >= n){ //만약 입력받은 방번호가 해당 라인의 최대값보다 작은 거면 해당 방 최소 개수는 구한것!
break;
}
findroom += (room*6); //6의 거듭제곱 (1은 시작점임으로 +1을 해준다)
room++;
}
System.out.println(room);
}
}
결과
참고한 코드 결과값
처음 코드 고친 결과값
느낀점