백준 1057(토너먼트) - Python(파이썬) - 수학
반응형
접근 방법
ex ] 16 8 9 인 경우 (김지민 임한수 )
이런식으로 토너먼트가 진행되는데 김지민의 번호(8)과 임한수의 번호(9)를 2로 계속 나누어서 반올림하였을 때 값이 같은 경우 그만둔다.
-> 서로 대결을 하지 않는 경우는 없다.
풀이방법
① while 문으로 계속 2로 나누게 하기 -> 올림
② 단 반올림(김지민의 번호)== 반올림(임한수의 번호) whil문 끝내기
Python
import math
import sys
#사람수,김지민,임한수
n,kim,lim = map(int,sys.stdin.readline().split())
cnt=0
while True:
#둘의 반올림이 같은 경우 whil문 끝내기
if math.ceil(kim)==math.ceil(lim):
break
#김지민,임한수/2로 나누고 반올림 한 값 대입
kim=math.ceil(kim/2)
lim=math.ceil(lim/2)
cnt+=1
print(cnt)
import math
import sys
#사람수,김지민,임한수
n,kim,lim = map(int,sys.stdin.readline().split())
cnt=0
#둘의 반올림한 값이 다른 경우 while문 하기
while math.ceil(kim)!=math.ceil(lim):
kim=math.ceil(kim/2)
lim=math.ceil(lim/2)
cnt+=1
print(cnt)
Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N= Integer.parseInt(sc.next());
double kim = sc.nextDouble();
double lim = sc.nextDouble();
int cnt=0;
while(true){
if(Math.ceil(kim)==Math.ceil(lim)) break;
kim = kim/2;
lim= lim/2;
cnt+=1;
}
System.out.println(cnt);
}
}
역시 BufferedReader 가 훨씬 빠르다
import java.util.*;
import java.io.*;
public class Main {
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());
double kim = Double.parseDouble(st.nextToken());
double lim = Double.parseDouble(st.nextToken());
int cnt=0;
while(true){
if(Math.ceil(kim)==Math.ceil(lim)) break;
kim = kim/2;
lim= lim/2;
cnt+=1;
}
System.out.println(cnt);
}
}
반응형
'[백준] Python,Java로 풀기📖 > 수학' 카테고리의 다른 글
백준 1743(음식물 피하기) - Python(파이썬) - 수학 (0) | 2022.06.24 |
---|---|
백준 13458(시험 감독) - Python(파이썬),Java(자바) - 수학 (0) | 2022.05.25 |