본문 바로가기

연습문제/JAVA

(66)
[백준 java] 7576 - 토마토 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 분명 이전에 토마토 문제를 풀었는데 아직 안푼문제라고 적혀있길래 이전에 푼 문제들을 찾아봤더니 7569-토마토 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100 dwc04112.tistory.com 이전에 푼 문제는 7569 토마토 문제였다. (같은 문제인줄 알았는데 아니더라) 이왕..
[백준 java] 1874 - 스택 수열 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제 푸는시간보다 문제를 이해하는데 좀 걸린 것 같다. 예제 입력의 첫번째 줄 숫자 N은 수열의 길이 두번 째 부터 N+1 번째 줄 까지 숫자는 출력해야하는 수열이다. 문제풀이 만약 N이 8이 들어온다면 1 2 3 4 5 6 7 8 순서로 push와 pop을 사용하여 4 3 6 8 7 5 2 1 을 만들어야한다. ( pop이 출력 ) 즉 아래와 같은 순서로 수열이 만들어진다. 1 ..
[백준 java] 10866 - 덱 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 덱을 사용하면 쉽게 구현가능한 문제. 입력과 동시에 연산을 수행하고 출력한다. 주석 참고! 출력은 StringBuilder를 사용하여 출력하였다. 순서대로 System.out.print와 / StringBuilder 를 사용하여 출력한 결과물이다. 비교하면 약 두배의 속도가 차이난다. SystemOut은 매번 String을 선언하고 (생성되는 String 주소값) 메모리를 쓰지만 StringBuilder는 하나의 주소값에서 연산을 수행한다. // ..
[java 백준] 1021 - 회전하는 큐 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net LinkedList 를 통해 구현하였다 전체 범위의 숫자를 LinkedList에 담아두고 뽑아야 하는 숫자를 만나면 삭제하는 방식으로 구현했다 뽑아야 하는 숫자를 int[] 에 담고 int[] 에 들어있는 숫자를 다 뽑을때 까지 while문을 수행한다. while문에서 list의 맨 앞 숫자를 뽑아서 해당 숫자와 int[] 의 첫번째 숫자와 비교한다. 만약 다른 숫자라면 LinkedList를 오른쪽 혹은 왼쪽으로 옮긴다 1 2 3 4 5 -> 2 3 4 5 ..
[백준 java] 3425 - 고스텍 3425번: 고스택 각각의 입력값에 대해서, 해당하는 프로그램을 수행한 뒤, 출력값을 출력하면 된다. 출력값이란 스택에 저장되어 있는 숫자이다. 만약, 프로그램 에러가 발생하거나, 모든 수행이 종료됐을 때 www.acmicpc.net 풀다가 환장할뻔한 문제다. 문제가 어려운건 아닌데 꼼꼼하게 풀어야 할 문제 정답비율 14%가 괜히 14%가 아니었다... 한 프로그램을 입력받고 해당 프로그램에 관한 결과를 출력하다가 문자열"QUIT" 를 받으면 끝내는 문제이다. 문제의 첫번째 숫자는 스택의 맨 위에 숫자 그리고 두번째 숫자는 맨 위에서 두번째 숫자라는것을 알아두자 만약 문자열 NUM X 가 들어온다면 문자열 NUM은 cmd list에 넣고 숫자 Long 은 numArr에 추가하였다. NUM을 연산할때는 n..
[백준 java] 1654 - 랜선자르기 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 2512번 문제인 예산 문제와 같이 이진 탐색 알고리즘을 사용하였다 while문 제일 긴 랜선 길이(최대값)와 최소값 0을 더한 값에 2를 나누어 중심값을 구하고 K개의 랜선을 해당 중심값으로 나누고 (가진 랜선을 잘라 랜선만들기) 나눈 수를 더하여 만든 랜선의 수를 구한다. (가진 랜선으로 만들어진 랜선 수) 1. 해당 수가 M(만들어야 하는 랜선 수) 보다 작으면 중심값을 줄여 랜선 수를 더 만들어야 하므로 max = mid-1 ..
[백준 java] 7662 - 이중 우선순위 큐 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net - 문제설명 첫번째 줄은 테스트케이스의 수, 두번째 줄 입력은 첫번째 테스트 케이스의 입력 데이터 수 각각의 테스트 데이터는 "문자 숫자"의 형태로 이루어져있다 문자가 들어오면 해당 문자가 I인지 D인지 확인하고 I이면 input, D이면 delete를 수행한다 D문자가 들어오면 숫자가 -1이면 최소값을 빼주고 1이면 최대값을 빼준다 - 실패와 원인 처음에는 두개의 우선순위 큐를 사용하여 (최댓값 정렬하는 maxQ, 최소값 정렬하는 minQ) 각각의 큐에 데..
[백준 java] 1068 - 트리 BFS를 사용하여 Leaf를 구하도록 구현하였다 주의할점은 1. 트리의 시작점은 여러개일 가능성도 있다 (여러개 트리) 2. 트리의 시작점은 꼭 0번째에 위치하지 않는다 둘째줄 0~N-1노드를 입력받을 때 입력값이 -1 이면 바로 큐에 담아주고 방문처리를 한다. 셋째줄 삭제할 노드를 입력받고 해당 노드를 가리키는 자식노드들을 재귀함수를 통해 모두 삭제처리를 해주었다. (직접 삭제가 아닌 삭제 노드에는 -2의 값을 주었다) searchLeaf에서는 삭제된 노드 -2를 만나면 건너뛰고 방문하지 않은 자식노드를 찾으면 큐에 넣어준다. (해당 노드는 자식노드가 있으니 isLeaf는 false) 자식노드를 찾지못하면 Leaf 수를 ++ 해줘서 리프노드의 수를 구하였다 여러가지 반례 //ex1 4 -1 0 1 2 ..