Backend
home

5주차

생성일
2025/01/24 05:52
태그

백준 - 세로읽기

첫 번째 풀이방법
package week5.backjoon; import java.io.*; import java.util.ArrayList; import java.util.List; public class Backjoon10798 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); List<String> stringList = new ArrayList<>(); StringBuilder sb = new StringBuilder(); int maxlength = 0; for (int i = 0; i < 5; i++) { stringList.add(br.readLine()); if (maxlength < stringList.get(i).length()) { maxlength = stringList.get(i).length(); } } for (int i = 0; i < maxlength; i++) { for (int j = 0; j < stringList.size(); j++) { sb.append(stringList.get(j).charAt(i)); } } System.out.println(sb); } }
Java
복사
정답풀이
package week5.backjoon; import java.io.*; import java.util.ArrayList; import java.util.List; public class Backjoon10798 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); List<String> stringList = new ArrayList<>(); StringBuilder sb = new StringBuilder(); int maxlength = 0; // 리스트 최대 길이 선언 for (int i = 0; i < 5; i++) { stringList.add(br.readLine()); if (maxlength < stringList.get(i).length()) { // 리스트 요소의 최대 길이 찾기 maxlength = stringList.get(i).length(); } } for (int i = 0; i < stringList.size(); i++) { if (stringList.get(i).length() < maxlength) { // 리스트의 요소 길이를 동일하게 맞춰주기 - repeat 메서드 사용(반복 기능) stringList.set(i, stringList.get(i) + " ".repeat(maxlength - stringList.get(i).length())); } } for (int i = 0; i < maxlength; i++) { for (int j = 0; j < 5; j++) { if (stringList.get(j).charAt(i) == ' ') { // 리스트 문자열의 문자가 ' ' 인 경우 추가하지 않기 continue; } sb.append(stringList.get(j).charAt(i)); } } System.out.println(sb); } }
Java
복사

프로그래머스 - 같은 숫자는 싫어

이 문제는 총 3가지 풀이방법으로 정리
리스트 활용
package week5.programmers; import java.util.*; // 같은 숫자는 싫어 public class Programmers12906 { public int[] solution(int[] arr) { int[] answer = {}; ArrayList<Integer> list = new ArrayList<>(); // 이전 인덱스와 현재 인덱스를 비교하여 리스트에 담는다 for (int i = 1; i < arr.length; i++) { if (arr[i] == arr[i - 1]) { continue; } else { list.add(arr[i - 1]); } } // 비교 과정에서 마지막 인덱스가 제외되므로 마지막 인덱스를 리스트에 추가시켜준다 list.add(arr[arr.length - 1]); answer = new int[list.size()]; for (int i = 0; i < answer.length; i++) { answer[i] = list.get(i); } return answer; } public static void main(String[] args) { Programmers12906 T = new Programmers12906(); T.solution(new int[]{1, 1, 3, 3, 0, 1, 1}); } }
Java
복사
임의의 변수 설정 (배열의 요소가 0부터 9까지 이루어져 있다는 조건을 활용)
package week5.programmers; import java.util.ArrayList; import java.util.Arrays; // 같은 숫자는 싫어 public class Programmers12906_2 { public int[] solution(int[] arr) { ArrayList<Integer> list = new ArrayList<>(); int tempNum = 10; // arr 원소 크기 0 ~ 9 => 무의미한 값으로 10 선언하여 배열 요소값과 비교해준다 for (int num : arr) { if (tempNum != num) { // 같지 않으면 리스트에 추가 list.add(num); } tempNum = num; // 다음 진행 절차를 위해 tempNum을 num으로 } int[] answer = new int[list.size()]; for (int i = 0; i < answer.length; i++) { answer[i] = list.get(i); } return answer; } public static void main(String[] args) { Programmers12906_2 T = new Programmers12906_2(); System.out.println(Arrays.toString(T.solution(new int[]{1, 1, 3, 3, 0, 1, 1}))); } }
Java
복사
스택 활용
package week5.programmers; import java.util.Arrays; import java.util.Stack; // 같은 숫자는 싫어 public class Programmers12906_3 { public int[] solution(int[] arr) { Stack<Integer> stack = new Stack<>(); // 스택안에 비어있으면 1개를 넣기 // 제일 위에 값을 꺼내지 않고 같은 값이면 값을 넣지 않음, 값이 다를 경우 스택에 쌓기 for (int i = 0; i < arr.length; i++) { if (stack.isEmpty() || stack.peek() != arr[i]) { stack.push(arr[i]); } } int[] answer = new int[stack.size()]; for (int i = stack.size() - 1; i >= 0; i--) { answer[i] = stack.pop(); // 스택의 뒤에서 부터 꺼내기 때문에 반대로 반복 } return answer; } public static void main(String[] args) { Programmers12906_3 T = new Programmers12906_3(); System.out.println(Arrays.toString(T.solution(new int[]{1, 1, 3, 3, 0, 1, 1}))); } }
Java
복사

백준 - 커트라인

풀이
package week5.backjoon; import java.io.*; import java.util.*; // 커트라인 public class Backjoon25305 { 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()); int K = Integer.parseInt(st.nextToken()); int[] numlist = new int[N]; StringTokenizer st2 = new StringTokenizer(br.readLine(), " "); for (int i = 0; i < N; i++) { numlist[i] = Integer.parseInt(st2.nextToken()); } Arrays.sort(numlist); System.out.println(numlist[numlist.length - K]); } }
Java
복사

백준 - 소트인사이드

package week5.backjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Backjoon1427 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int[] arr = new int[str.length()]; for (int i = 0; i < str.length(); i++) { arr[i] = Integer.parseInt(str.substring(i, i + 1)); } // 내림차순 정렬이므로 최댓값을 찾아 기준이 되는 자리와 swap 한다. for (int i = 0; i < str.length(); i++) { int max = i; for (int j = i + 1; j < str.length(); j++) { if (arr[j] > arr[max]) { max = j; } } if (arr[i] < arr[max]) { int temp = arr[i]; arr[i] = arr[max]; arr[max] = temp; } } for (int i = 0; i < str.length(); i++) { System.out.print(arr[i]); } } }
Java
복사
풀이과정
i
j
max
arr[j] > arr[max]
arr[i] < arr[max]
temp
arr[i]
arr[max]
배열 상황
0
i + 1
i = 0
arr[1] > arr[0] 1 > 2 (false)
-
-
-
-
-
i + 2
i = 0
arr[2] > arr[0] 4 > 2 (true) max = 2
arr[0] < arr[2] true
temp = arr[i] temp = 2
arr[i] = arr[max] arr[0] = 4
arr[max] = temp arr[2] = 2
4123
1
i + 1 = 2
i = 1
arr[2] > arr[1] 2 > 1 (true) max = 2
arr[0] < arr[2] false
-
-
-
-
i + 1 = 3
i = 2
arr[3] > arr[2] max = 3
arr[1] < arr[3]
temp = arr[i] temp = 1
arr[i] = arr[max] arr[1] = 3
arr[max] = temp arr[3] = 1
4321
2
i + 1 = 3
i = 2
arr[3] > arr[2] 1 > 2 (false)
arr[2] < arr[2] (false)
-
-
-
-
3
i + 1 = 4 (x)
i = 3
arr[4] > arr[3] (false)
arr[3] < arr[3] (false)
-
-
-
-

백준 - 스택

package week5.backjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; // 스택 public class Backjoon10828 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stack<Integer> stack = new Stack<>(); int N = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine(), " "); // " " 구분자 처리 String str = st.nextToken(); if (str.equals("push")) { stack.push(Integer.parseInt(st.nextToken())); } else { switch (str) { case "pop": sb.append((stack.isEmpty() ? -1 : stack.pop())).append("\n"); break; case "size": sb.append(stack.size()).append("\n"); break; case "empty": sb.append((stack.isEmpty()) ? 1 : 0).append("\n"); break; case "top": sb.append((stack.isEmpty()) ? -1 : stack.peek()).append("\n"); break; } } } System.out.println(sb); } }
Java
복사

백준 - 큐 2

package week5.backjoon; import java.io.IOException; import java.io.*; import java.util.LinkedList; import java.util.Queue; // 큐 2 public class Backjoon18258 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); Queue<Integer> queue = new LinkedList<>(); StringBuilder sb = new StringBuilder(); // 큐가 먼저 들어온 데이터가 먼저 나간다는 특징을 활용 -> 큐의 가장 뒤에 있는 정수 = 가장 먼저 큐에 넣은 정수 int rearElement = 0; for (int i = 0; i < N; i++) { String str = br.readLine(); if (str.contains("push")) { String[] strArr = str.split(" "); // " " 구분자 통해 처리 rearElement = Integer.parseInt(strArr[1]); queue.add(rearElement); } else { switch (str) { case "pop": sb.append((queue.isEmpty()) ? -1 : queue.remove()).append("\n"); break; case "size": sb.append(queue.size()).append("\n"); break; case "empty": sb.append((queue.isEmpty()) ? 1 : 0).append("\n"); break; case "front": sb.append((queue.isEmpty()) ? -1 : queue.peek()).append("\n"); break; case "back": sb.append((queue.isEmpty()) ? -1 : rearElement).append("\n"); break; } } } System.out.println(sb); } }
Java
복사

백준 - 덱

package week5.backjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Deque; import java.util.LinkedList; import java.util.StringTokenizer; // 덱 public class Backjoon10866 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Deque<Integer> deque = new LinkedList<>(); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine(), "_"); String str = st.nextToken(); if (str.equals("push")) { // push String pushStr = st.nextToken(); String[] pushArr = pushStr.split(" "); if (pushArr[0].equals("front")) { // push_front deque.addFirst(Integer.parseInt(pushArr[1])); } else if (pushArr[0].equals("back")) { // push_back deque.addLast(Integer.parseInt(pushArr[1])); } } else if (str.equals("pop")) { // pop String popStr = st.nextToken(); String[] popArr = popStr.split(" "); if (popArr[0].equals("front")) { // pop_front sb.append((deque.isEmpty()) ? -1 : deque.removeFirst()).append("\n"); } else if (popArr[0].equals("back")) { // pop_back sb.append((deque.isEmpty()) ? -1 : deque.removeLast()).append("\n"); } } else { switch (str) { // 나머지 명령문 처리 case "size": sb.append(deque.size()).append("\n"); break; case "empty": sb.append((deque.isEmpty()) ? 1 : 0).append("\n"); break; case "front": sb.append((deque.isEmpty()) ? -1 : deque.getFirst()).append("\n"); break; case "back": sb.append((deque.isEmpty()) ? -1 : deque.getLast()).append("\n"); break; } } } System.out.println(sb); } }
Java
복사

백준 - 색종이

package week5.backjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Backjoon2563 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); boolean[][] arr = new boolean[100][100]; // 방문 배열 선언 int sum = 0; for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine(), " "); int x = Integer.parseInt(st.nextToken()); int y = Integer.parseInt(st.nextToken()); for (int j = x; j < x + 10; j++) { for (int k = y; k < y + 10; k++) { if (!arr[j][k]) { arr[j][k] = true; // 방문하지 않았다면 true로 표시 sum++; // 합 변수 1 증가 } } } } System.out.println(sum); } }
Java
복사

백준 - 제로

풀이
package week5.recommand; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; // 제로 public class Backjoon10773 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); Stack<Integer> stack = new Stack<>(); for (int i = 0; i < N; i++) { int num = Integer.parseInt(br.readLine()); if (num == 0) { stack.pop(); } else { stack.add(num); } } int[] arr = new int[stack.size()]; int sum = 0; for (int i = 0; i < arr.length; i++) { sum += stack.pop(); } System.out.println(sum); } }
Java
복사

백준 - 괄호

풀이 1
package week5.recommand; import java.io.*; import java.util.Stack; public class Backjoon9012 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader((System.in))); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int N = Integer.parseInt(br.readLine()); while (N-- > 0) { // 공백("") 기준 문자열 split // 참고) StringTokenizer 는 공백("") 기준 문자열 split 불가 String[] targets = br.readLine().split(""); Stack<String> stack = new Stack<>(); boolean check = true; for (String target : targets) { if (target.equals("(")) { stack.push(target); } else if (target.equals(")")) { if (!stack.isEmpty() && stack.peek().equals("(")) { stack.pop(); continue; } // ")" 의 검사 대상인 "(" 을 찾으려고 하는데 스택 내에 아무런 요소가 없다면, if (stack.isEmpty()) { check = false; bw.write("NO" + "\n"); break; } } } // check 가 true 인 경우는 모든 요소 검사가 정상적으로 다 이뤄졌을 때, if (check) { if (stack.isEmpty()) { bw.write("YES" + "\n"); } else { bw.write("NO" + "\n"); } } } bw.flush(); bw.close(); } }
Java
복사
풀이 2
package week5.recommand; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; public class Backjoon9012_2 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); for (int i = 0; i < N; i++) { sb.append(solve(br.readLine())).append('\n'); } System.out.println(sb); } public static String solve(String s) { Stack<Character> stack = new Stack<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); // 여는 괄호 : 스택에 넣음 if (c == '(') { stack.push(c); } // 아래는 모두 닫는 괄호인 경우 // 스택이 비어있는 경우. 즉, 닫는 괄호를 입력받았으나 pop할 원소가 없을 때 else if (stack.empty()) { return "NO"; } // 그 외의 경우 stack 원소를 pop한다 else { stack.pop(); } } if (stack.empty()) { return "YES"; } else { return "NO"; } } }
Java
복사