[Java] 컬렉션 자료구조를 이용한 연습문제
자바 컬렉션 자료구조를 이용해 가장 많이 등장한 문자, 가장 많이 등장한 수, 문자열 뒤집기, 중복 없이 문자열 뒤집기, 정수형 배열 정렬, 중복 문자 제거 등의 문제를 풀이했습니다.
Jan 19, 2024
[가장 많이 등장한 문자]
문제 설명
주어진 문자열"hi, my name is donghee. nice to meet you" 에서 각 문자의 등장 횟수와 가장 많이 등장한 문자를 출력하는 프로그램을 작성하시오. 단, 가장 많이 등장한 문자를 출력할 때, 공백은 제외한다.
출력 예>
: 8
a : 1
c : 1
d : 1
e : 6
g : 1
h : 2
i : 3
, : 1
m : 3
n : 3
. : 1
o : 3
s : 1
t : 2
u : 1
y : 2
가장 많이 등장한 문자: e
가이드>
public static void main(String[] args) { String str = "hi, my name is donghee. nice to meet you"; Map<Character, Integer> map = new HashMap<>(); /* 자유롭게 변수 추가 및 코드 작성 */ }
CharFrequeny.java
package ch15.practice; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class CharFrequeny { public static void main(String[] args) { String str = "hi, my name is donghee. nice to meet you"; Map<String, Integer> map = new HashMap<>(); String[] str_arr = str.split(""); int maxVal = 0; String maxString = ""; for (String s : str_arr) { if (!map.containsKey(s)) { map.put(s, 1); } else { map.put(s, map.get(s) + 1); } } for (Entry<String, Integer> e : map.entrySet()) { System.out.println(e.getKey() + " : " + e.getValue()); if (e.getValue() > maxVal && e.getKey().equals(" ") == false) { maxVal = e.getValue(); maxString = e.getKey(); } } System.out.println("가장 많이 등장한 문자: " + maxString); } }
[가장 많이 등장한 수]
문제 설명
주어진 정수형 배열[1,1,4,7,3,5,5,4,3,1,6]에서 각 값의 개수와 가장 많이 등장한 수를 출력하는 프로그램을 작성하시오.
출력 예>
1 : 3
3 : 2
4 : 2
5 : 2
6 : 1
7 : 1
가장 많이 등장한 수 : 1
hint>
- map컬렉션에 값(value) 저장(put)시 getOrDefault메서드를 활용할 것.
가이드>
public static void main(String[] args) { int[] nums = {1,1,4,7,3,5,5,4,3,1,6}; Map<Integer, Integer> map = new HashMap<>(); /* 자유롭게 변수 추가 및 코드 작성 */ }
intFrequency.java
package ch15.practice; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class intFrequency { public static void main(String[] args) { int[] num = { 1, 1, 4, 7, 3, 5, 5, 4, 3, 1, 6 }; Map<Integer, Integer> map = new HashMap<>(); int maxVal = 0; Integer maxInt = 0; for (Integer s : num) { if (!map.containsKey(s)) { map.put(s, 1); } else { map.put(s, map.getOrDefault(s, 0) + 1); } } for (Entry<Integer, Integer> e : map.entrySet()) { System.out.println(e.getKey() + " : " + e.getValue()); if (e.getValue() > maxVal) { maxVal = e.getValue(); maxInt = e.getKey(); } } System.out.println("가장 많이 등장한 수: " + maxInt); } }
[문자열 뒤집기]
문제 설명
주어진 문자열 "ABCDE"를 문자 단위로 컬렉션에 추가하고, StringBuilder를 활용하여 뒤집힌 형태의 새로운 문자열을 출력하는 프로그램을 작성하시오.
출력 예>
기존 문자열 : ABCDE
변경된 문자열 : EDCBA
가이드>
public static void main(String[] args) { String str = "ABCDE"; StringBuilder sb = new StringBuilder(); List<Character> arr = new ArrayList<>(); /* 자유롭게 변수 추가 및 코드 작성 */ }
ReverseString .java
package ch15.practice; import java.util.ArrayList; import java.util.List; public class ReverseString { public static void main(String[] args) { String str = "ABCDE"; StringBuilder sb = new StringBuilder(); List<Character> arr = new ArrayList<>(); System.out.println("기존 문자열: " + str); char c, tmp; for (char ch : str.toCharArray()) { // for each문과 str.toCharArray()를 통해 간결하게 작성할 수 있다. arr.add(ch); } // 0번 인덱스에 지정해서 넣으면 거꾸로 저장될 것이다. // for (char ch : str.toCharArray()) { // arr.add(0, ch); // } for (int i = arr.size() - 1; i > -1; i--) { sb.append(arr.get(i)); } System.out.println("변경된 문자열: " + sb); } }
[문자열 뒤집기2]
문제 설명
주어진 문자열 "aabbbcdddde"를 '문자 단위'로 컬렉션(Stack)에 추가하고 StringBuilder를 활용하여 중복이 없고, 뒤집힌 형태의 새로운 문자열을 출력하는 프로그램을 작성하시오.
출력 예>
기존 문자열 : aabbbcdddde
변경된 문자열 : edcba
가이드>
public static void main(String[] args) { String str = "aabbbcdddde"; Stack<Character> st = new Stack<>(); StringBuilder sb = new StringBuilder(); /* 자유롭게 변수 추가 및 코드 작성 */ }
ReverseString2.java
package ch15.practice; import java.util.Stack; public class ReverseString2 { public static void main(String[] args) { String str = "aabbbcdddde"; Stack<Character> st = new Stack<>(); StringBuilder sb = new StringBuilder(); System.out.println("기존 문자열: " + str); char c, tmp; for (int i = 0; i < str.length(); i++) { st.push(str.charAt(i)); } c = st.pop(); sb.append(c); while (!st.isEmpty()) { tmp = st.pop(); if (c != tmp) { sb.append(tmp); c = tmp; } } System.out.println("변경된 문자열: " + sb); } }
[정돈된 숫자]
문제 설명
주어진 정수형 배열[1,1,4,7,3,5,5,4,3,1,6]에서 중복된 숫자를 제거하고, 오름차순으로 정렬된 값을 순서대로 다음과 같이 출력하는 프로그램을 작성하시오.
출력 예>
수정된 배열 : [1, 3, 4, 5, 6, 7]
가이드>
public static void main(String[] args) { int[] nums = {1,1,4,7,3,5,5,4,3,1,6}; Set<Integer> set = new TreeSet<>(); /* 자유롭게 변수 추가 및 코드 작성 */ }
NumberSorting.java
package ch15.practice; import java.util.Set; import java.util.TreeSet; public class NumberSorting { public static void main(String[] args) { int[] nums = { 1, 1, 4, 7, 3, 5, 5, 4, 3, 1, 6 }; Set<Integer> set = new TreeSet<>(); for (Integer i : nums) { set.add(i); } System.out.print("수정된 배열: " + set); } }
[중복된 문자 제거]
문제 설명
주어진 문자열 배열["apple", "banana"]에서 각 문자열 내 중복된 문자를 제거 후 다음 출력 예와 같이 출력하는 프로그램을 작성하시오.
출력 예>
apple -> aple
banana -> ban
hint>
- set의 add메서드는 값이 정상적으로 추가되면 true를 반환한다. 즉, 중복된 값이 이미 있으면 false를 반환한다.
- StringBuilder를 초기화 하는 방법 : sb.setLength(0)
가이드>
public static void main(String[] args) { String[] str = {"apple", "banana"}; StringBuilder sb = new StringBuilder(); Set<Character> set = new HashSet<>(); /* 자유롭게 변수 추가 및 코드 작성 */ }
DuplicateNum.java
package ch15.practice; import java.util.HashSet; import java.util.Set; public class DuplicateNum { public static void main(String[] args) { String[] str = { "apple", "banana" }; StringBuilder sb = new StringBuilder(); Set<Character> set = new HashSet<>(); for (int i = 0; i < str.length; i++) { System.out.print(str[i] + " -> "); for (char c : str[i].toCharArray()) { if (!set.contains(c)) { sb.append(c); set.add(c); } } System.out.println(sb.toString()); set.clear(); sb.delete(0, sb.length()); // sb.setLength(0); // 위와 같다. } } }
결론
해당 문제들을 풀면서 자바에서의 다양한 컬렉션 자료구조의 성질을 이해하고, 이를 활용하는 방법을 익힐 수 있었다.
Share article