java 205

9093. 단어 뒤집기 (자바, Java)

스택 입문문제. 문자를 스택에 쌓았다가, 공백을 만나면 모두 방출해주는걸 끝까지 반복하시면 됩니다. 공백은 스택에 담지않고 그대로 출력. 전 풀때 그냥 StringBuilder를 사용해서 풀었군요...며칠됐다고 기억도안나네; import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuilder ..

백준 문제풀이 2022.11.05

10828. 스택 (자바, Java)

스택의 기본 매소드들을 알 수 있는, 매우 좋은 입문용 문제. 저는 그냥 우직하게 풀었습니다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); Stack stack = new Stack(); St..

백준 문제풀이 2022.11.05

2004. 조합 0의 개수

앞 문제인 1676번 문제와 비슷한데, 팩토리얼 대신 이항계수가 되었습니다. 원리는 똑같습니다. 소인수 분해해서 2*5 = 10의 곱해진 수를 따져줘야하는데, 앞선 팩토리얼은 무조건 2의 제곱수가 5의 제곱수보다 컸지만, 이 문제는 2와 5를 경합해서 최솟값을 뽑아줘야 합니다. 그거말곤 다 똑같습니다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStr..

백준 문제풀이 2022.10.29

1676. 팩토리얼 0의 개수

저는 무식하게 팩토리얼을 전부 구한뒤, 문자를 뒤집고 0의 갯수를 세는 무식한 방법을 떠올렸는데, 이렇게 하니까 출력초과(overflow?) 혹은 틀렸다고 나오더군요. 아무래도 500팩토리얼까지 나오려면 힘들었나 봅니다. 결국 답을 찾아봤는데, 생각보다 간단했습니다. 0의 갯수 = 인수분해를 했을때 10의 제곱수 = 소인수분해를 했을때 2와 5의 제곱수 중 최솟값. 팩토리얼은 순차적으로 곱해지므로, 텀이 짧은 2가 당연히 더 많을 수 밖에 없고, 따라서 5의 제곱수만 구하면 됩니다. 주의할 점은, 5의 제곱수에 해당할때는 5가 더 출몰(?) 한다는 점... 가령 24! 까지는 5, 10, 15, 20에서 각각 등장하여 5^4이지만, 25!부터는 25=5^2이라 5^6이 되어버립니다. 그점만 조심하면 되겠..

백준 문제풀이 2022.10.29

9375. 패션왕 신해빈 (자바, Java)

생각보다는 어렵지 않다. 앞에 의상 이름은 의미없고, 의상의 종류가 중요하다. 각 종류별로 하나만 입을 수 있고, 안 입는 선택지도 존재하나, 모두 안 입는 선택지는 없다. 예를들어 첫 예제는 3가지 옷이 나오고, 종류는 headgear와 eyewear 2가지이다. headgear를 입는 경우의 수는 안입기, hat, turban 3가지, eyewear는 sunglasses와 안입기 2가지. 3*2 에서 모두 안입는 경우 1가지를 빼줘서 5가 된다. 눈치챘겠지만, 각 종류별 가짓수+1을 곱해준 뒤, 모두 안입는 경우의수 1을 빼주면 정답. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashMap; im..

백준 문제풀이 2022.10.25

1010. 다리 놓기 (자바, Java)

이항계수(조합) 문제다. M개중에 N개만큼 골라주는 경우의 수를 따지는 것이기 때문. 크기가 충분히 클 것 같아 BigInteger로 풀었다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()..

백준 문제풀이 2022.10.25

11051 이항 계수 2 (자바, Java)

앞의 문제와 생긴게 똑같지만, 숫자가 확 늘어났다. N의 범위가 10에서 1000으로 떡상. 그에 따라, 숫자의 범위가 엄청나게 커졌다. 나는 BigInteger 자료형을 이용해 풀었다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokeniz..

백준 문제풀이 2022.10.24

11050. 이항계수 (자바, Java)

이항계수(조합) 입문 문제. 사실상 수학의 영역이라, 해당 개념을 모르면 익히고 오는걸 추천한다. 경우의 수, 순열, 팩토리얼, 조합, 이항계수 등만 알면 될것 같다. 사실 이 부분은 제일 중요한게 경우의 수다. 합의법칙과 곱의법칙이 제일 중요하다. 근본적인 개념에 해당되는 부분이라... import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReade..

백준 문제풀이 2022.10.24

3036. 링 (자바, Java)

맞물리는 톱니바퀴는 같은 시간동안 거리를 돈다. 하지만 톱니바퀴 크기에 따라 돌아가는 바퀴 수가 다를 뿐. 원리를 몰라도 눈치채신 분들도 있을것이다. 양쪽 숫자의 최대공약수로 나눠준 몫을 출력하면 된다. 첫 출력값에서 8과 4의 최대공약수는 4이므로, 각각 4로 나눠주면 2, 1이 되어 2/1이 되고, 8과 2의 최대공약수는 2이므로, 각각 2로 나눠주면 4, 1이 되어 4/1이 되는 식이다. 첫 바퀴가 한 바퀴를 도는동안 이동거리는 원의 반지름에 비례한다. (2 * r * pi 로, 정확하게 반지름은 아닌 비례관계) 따라서, 다른 바퀴가 그동안 이동거리도 똑같기 때문에, 바퀴수는 r2/r1이 된다. 이를 기약분수로 나타내려면, 양쪽을 최대공약수로 나눠주면 되는 것이다. import java.io.Buf..

백준 문제풀이 2022.10.24

1934. 최소 공배수 (자바, Java)

앞의 유클리드 호제법을 우려먹는 문제. 모르시는 분은 다음을 참조하자. https://mewtwo.tistory.com/192 2609. 최대공약수와 최소공배수 (자바, Java) 이 문제를 통해 유클리드 호제법을 배웠다. 유클리드 호제법이란, a>b인 두 수 a와 b의 최대공약수는 a를 b로 나눈 나머지인 r과 b의 최대공약수이기도 한다는 것이다. 증명은 다음을 참고. https://ko mewtwo.tistory.com 같은 원리로 풀어주면 된다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Mai..

백준 문제풀이 2022.10.24