본문 바로가기

Coding Test/Problem Number

(75)
[Java] 스택 [10828번] https://www.acmicpc.net/problem/10828예제 입력114push 1push 2topsizeemptypoppoppopsizeemptypoppush 3emptytop예제 출력122021-101-103예제 입력27poptoppush 123toppoptoppop예제 출력2-1-1123123-1-1문제 접근제목 그대로 스택 구현 문제문제 해결Stack 클래스와 switch-case문 사용큐 문제처럼 별도로 구현해야하는 명령어는 없음기존 풀이 [메모리 : 21272 KB / 시간 : 220 ms]public static void main(String[] args) throws Exception{ Stack stack = new Stack(); StringBuilder sb = n..
[Java] 큐 [10845번] https://www.acmicpc.net/problem/10845예제 입력115push 1push 2frontbacksizeemptypoppoppopsizeemptypoppush 3emptyfront예제 출력1122012-101-103문제 접근제목대로 Queue를 이용하여 구현문제는 예제의 명령어는 모두 Queue의 메서드로 가능하지만, back의 명령을 처리할 메서드는 존재하지 않음문제 해결Queue와 switch-case문을 이용하여 구현back 명령의 경우 다음의 순서로 구현이 필요가장 마지막에 데이터의 앞에 있는 데이터들, 즉 n-1개의 데이터를 꺼냄(poll)다시 넣음(offer)가장 마지막의 데이터가 오면 출력(peek)가장 마지막 데이터도 다시 꺼내고 넣음 (poll and offer)기존..
[Java] 3의 배수 [1769번] https://www.acmicpc.net/problem/1769예제 입력11234567예제 출력13NO문제 접근알고 있는 3의 배수는 한 자리로 3, 6, 9 밖에 모름즉, X → Y로 변경할 때 10보다 작은 수가 될 때까지 변경을 해야한다는 의미출력10보다 작은 Y가 될 때까지 몇 번의 변경이 일어났는지 출력3의 배수인지 아닌지 YES, NO로 출력문제 해결10보다 클 경우 각 자리수를 모두 더하고 작아질 때까지 반복숫자인 형태로 계산하기 보다 String의 CharAt() 메서드를 이용하는 것이 더 효율적일 것으로 생각 됨기존 풀이 [메모리 : 20100KB / 시간 : 228ms]public static void main(String[] args) throws Exception{ Strin..
[Java] 단어순서 뒤집기 [12605번] https://www.acmicpc.net/problem/12605예제 입력13this is a testfoobarall your base예제 출력1Case #1: test a is thisCase #2: foobarCase #3: base your all문제 접근문자열을 입력 받아 공백 단위로 나눈 뒤 거꾸로 출력하는 문제문제 해결split으로 나눈 뒤 for문을 이용하여 마지막 인덱스부터 출력하는 방법1split으로 나눈 뒤 stack을 이용하여 마지막 알파벳부터 출력하는 방법2위 두 가지 방법으로 풀어보고 메모리, 시간, 구현 시 필요한 라인 수 비교기존 풀이 [메모리 : 13984 KB / 시간 : 116ms]public static void main(String[] args) throws Exc..
[Java] 막대기 [17608번] https://www.acmicpc.net/problem/17608예제 입력16697646예제 출력13예제 입력2554321예제 출력25문제 접근순서대로 막대를 넣은 뒤 가장 마지막에 보았을 때 보이는 막대의 개수를 출력하는 문제즉, 가장 마지막 막대의 높이를 기준으로 그보다 큰 막대들을 출력문제 해결Stack을 이용하여 푸는 간단한 문제Stack에서 pop을 하면서 나온 height와 maxHeight를 비교하여 height가 더 크다면 maxHeight를 height로 바꾸고 개수 카운팅기존 풀이public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamRe..
[Java] N과 M 12 [15666번] https://www.acmicpc.net/problem/15666 예제 입력13 14 4 2예제 출력124예제 입력24 29 7 9 1예제 출력21 11 71 97 77 99 9예제 입력34 41 1 2 2예제 출력31 1 1 11 1 1 21 1 2 21 2 2 22 2 2 2문제 접근 이전 인덱스를 시작값으로 설정하여 현재 인덱스 이전의 값이 나오면 안 됨문제 해결‘N과 M 11’에서 했던 것 처럼 중복 체크 필요Set을 사용할 경우 메모리, 속도의 효율성이 너무 떨어지기 때문에 LastUsed 변수를 사용하여 중복 체크⇒ 입력 받은 숫자들을 오름차순 정렬을 하기 때문에 중복 체크가 가능기존 풀이 [메모리 : 14432 KB / 시간 : 144 ms]static StringBuilder sb = n..
[Java] N과 M 11 [15665번] https://www.acmicpc.net/problem/15665예제 입력13 14 4 2예제 출력124예제 입력24 29 7 9 1예제 출력21 11 71 97 17 77 99 19 79 9예제 입력34 41 1 2 2예제 출력31 1 1 11 1 1 21 1 2 11 1 2 21 2 1 11 2 1 21 2 2 11 2 2 22 1 1 12 1 1 22 1 2 12 1 2 22 2 1 12 2 1 22 2 2 12 2 2 2문제 접근같은 수를 여러 번 골라도 되지만, 중복 수열은 출력해선 안 됨문제 해결i = 0 ~ N 까지 모든 경우의 수 출력기존 풀이 [메모리 : 172780 KB / 시간 : 1348 ms]static StringBuilder sb = new StringBuilder();sta..
[Java] N과 M 10 [15664번] https://www.acmicpc.net/problem/15664예제 입력13 14 4 2예제 출력124예제 입력24 29 7 9 1예제 출력21 71 97 99 9예제 입력34 41 1 2 2예제 출력31 1 2 2문제 접근이전 인덱스와 자기 자신을 포함하지 않음문제 해결재귀 호출 시 현재 인덱스 + 1‘N과 M 9’와 동일하게 Set으로 중복 체크 필요기존 풀이 [메모리 : 14164 KB / 시간 : 108 ms]static StringBuilder sb = new StringBuilder();static int numCount, length;static int[] arr;static List numList = new ArrayList();static Set numSet = new HashSet(..