본문 바로가기

전체 글

(88)
백준 2628 <종이자르기> IM 대비 문제 치고는 많이 생각할 점이 있는 문제였다. 이 문제의 핵심은 자른 색종이의 가로와 세로가 가장 큰 길이를 찾는 것이다. 문제 풀이 가로 세로 가장 긴 길이를 탐색하기 위해 각각의 ArrayList에 넣고 정렬을 했다. 투 포인터라는 개념을 기준으로 시작점을 0으로 잡고 하나씩 꺼내 사이의 간격을 비교해준다. 이렇게 가로 세로가 구해지면 곱해준다. 시작점을 0 으로 잡고 다음 지점과 간격을 비교하고 시작점을 이동하고 그렇게 끝까지 계산하면 가장 긴 길이를 구할 수 있다.! 마지막에는 마지막 자른 위치와 총길이를 빼주는 계산이 필수!! 예를 들어 세로 부분 3이 마지막이므로 총길이 8에서 3을 빼주는 것도 포함! 1번 순서 ArrayList에 넣고 정렬! 위에 부분이 가로 아래부분이 세로 전체..
백준 1244 <스위치 켜고 끄기> 시뮬레이션 문제 남학생 여학생인지 확인해서 완전 탐색을 하는 문제이다 이 문제의 시간 복잡도는 스위치 개수와 학생의 수를 곱한 100*100=1만이다. 문제 풀이 남학생 여학생의 경우를 판단 남학생일 경우 배수만큼 이동하면서 바꿔주기 여학생일 경우 그점을 기준으로 양옆으로 가면서 확인 이 문제에서는 System.out.print() 를 사용하는 시간을 줄이기 위해 StringBuilder를 사용해 시간을 단축했다. 전체 코드 더보기 package asd; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class s..
백준 2635 <수 이어가기> 이 문제는 기본적으로 첫 번째 정수를 2로 나눈 것 이상의 수를 두 번째 수로 잡고 전부 계산해보는 문제이다. n을 2로 나눈것 이상을 두 번째 수로 하는 이유는 그렇지 않으면 항상 3번째 오는 수는 2번째 수보다 클 것이고 결과는 3이 나오기 때문이다. 예를 들자면 50 25 25 0 50을 2로 나눈수를 두 번째로 가진 경우 50 23 27 결국 50을 2로 나눈수 25 보다 작으면 세 번 재수는 항상 2번째 수보다 크기 때문이다. 즉 25 미만의 숫자는 50을 2로 나눈 수부터 시작한것보다 전체 크기가 작다. 문제 풀이 n/2로 나눈 수 부터 전부 다 돌려본다. ArrayList를 이용해서 ArrayList 크기가 현재 결과 ArrayList 크기보다 크다면 옮겨 담는다. Stringbuilder을..