인프런 강좌 유형별 정리 📋 String & Array 1탄
📌 Anagram
String s = "123444a";
int[] anagram = new int[256];
for(int i=0;i<s.length();i++){
anagram[s.charAt(i)]++;
}
for (int i : anagram) {
System.out.print(i + " ");
}
String s = "123444a";
int[] anagram = new int[256];
for(int i=0;i<s.length();i++){
anagram[s.charAt(i)]++;
}
for (int i : anagram) {
System.out.print(i + " ");
}
int 배열안에 들어가는 index가 int가 아니라 Char 이기 때문에
anagram[1] 여기에 값이 들어가는게 아니고
anagram['1'] 1인 Char 값이 들어가기 때문에 그 값에 맞는 index를 따라가는 것
📌 문자 Anagram
같은 문자열인지 확인하는 문제
public class AnagramTest {
public static void main(String[] args) {
String ab = "abcd";
String ba = "badc";
int[] check = new int[256];
for(int i=0;i<ab.length();i++){
check[ab.charAt(i)]++;
}
int[] baChecking = new int[256];
for(int i=0;i<ab.length();i++){
baChecking[ba.charAt(i)]++;
}
if(Arrays.equals(check, baChecking)){
System.out.println("true");
}
}
}
🎯 output
true
- String을 charAt을 활용하여 int 배열에 담는 것이 idea
📌 숫자 Anagram
두 배열에서 같은 숫자의 index를 반환
public class FindAnagramMapping {
public static void main(String[] args) {
int[] a = {11,27,1,324,12};
int[] b = {27,11,324,12,1};
int[] result = solution(a,b);
for (int i : result) {
System.out.print(i + " ");
}
}
private static int[] solution(int[] a, int[] b) {
int [] result = new int[a.length];
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<a.length;i++){
map.put(b[i],i);
}
for(int i=0;i<a.length;i++){
result[i] = map.get(a[i]);
}
return result;
}
}
🎯 output
1 0 4 2 3
- Map을 활용 Map에
value,index
를 넣고, Map.get(value)
하면 index가 가져와 질 것
📌 같은 문자끼리 묶는 Anagram
public class ScratchPad {
public static void main(String[] args) {
String[] list = {"eat","tea","tan","ate","nat","bat"};
System.out.println(solution(list));
}
private static List<List<String>> solution(String[] list) {
/*
list -> char
char sorting
sorting 한 값이 같으면 추가
같은 값 = map
*/
Map<String,List<String>> map = new HashMap();
List<List<String>> result = new ArrayList<>();
for(String s : list){
char[] chars = s.toCharArray();
Arrays.sort(chars);
String sortingString = String.valueOf(chars);
System.out.println(sortingString);
System.out.println(" ==== ");
if(map.containsKey(sortingString)){
map.get(sortingString).add(sortingString);
}else{
List<String> stringList = new ArrayList<>();
stringList.add(s);
map.put(sortingString,stringList);
}
}
result.addAll(map.values());
return result;
}
}
🎯 output
[[eat, aet, aet], [bat], [tan, ant]]
-
함수 들어가기 전에 위처럼 주석 달아놓고 풀이 들어가는게 좋다
String sortingString = String.valueOf(chars);
같은 문자열인지 확인하는 문제
public class AnagramTest {
public static void main(String[] args) {
String ab = "abcd";
String ba = "badc";
int[] check = new int[256];
for(int i=0;i<ab.length();i++){
check[ab.charAt(i)]++;
}
int[] baChecking = new int[256];
for(int i=0;i<ab.length();i++){
baChecking[ba.charAt(i)]++;
}
if(Arrays.equals(check, baChecking)){
System.out.println("true");
}
}
}
true
두 배열에서 같은 숫자의 index를 반환
public class FindAnagramMapping {
public static void main(String[] args) {
int[] a = {11,27,1,324,12};
int[] b = {27,11,324,12,1};
int[] result = solution(a,b);
for (int i : result) {
System.out.print(i + " ");
}
}
private static int[] solution(int[] a, int[] b) {
int [] result = new int[a.length];
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<a.length;i++){
map.put(b[i],i);
}
for(int i=0;i<a.length;i++){
result[i] = map.get(a[i]);
}
return result;
}
}
🎯 output
1 0 4 2 3
- Map을 활용 Map에
value,index
를 넣고,Map.get(value)
하면 index가 가져와 질 것
📌 같은 문자끼리 묶는 Anagram
public class ScratchPad {
public static void main(String[] args) {
String[] list = {"eat","tea","tan","ate","nat","bat"};
System.out.println(solution(list));
}
private static List<List<String>> solution(String[] list) {
/*
list -> char
char sorting
sorting 한 값이 같으면 추가
같은 값 = map
*/
Map<String,List<String>> map = new HashMap();
List<List<String>> result = new ArrayList<>();
for(String s : list){
char[] chars = s.toCharArray();
Arrays.sort(chars);
String sortingString = String.valueOf(chars);
System.out.println(sortingString);
System.out.println(" ==== ");
if(map.containsKey(sortingString)){
map.get(sortingString).add(sortingString);
}else{
List<String> stringList = new ArrayList<>();
stringList.add(s);
map.put(sortingString,stringList);
}
}
result.addAll(map.values());
return result;
}
}
🎯 output
[[eat, aet, aet], [bat], [tan, ant]]
-
함수 들어가기 전에 위처럼 주석 달아놓고 풀이 들어가는게 좋다
String sortingString = String.valueOf(chars);
public class ScratchPad {
public static void main(String[] args) {
String[] list = {"eat","tea","tan","ate","nat","bat"};
System.out.println(solution(list));
}
private static List<List<String>> solution(String[] list) {
/*
list -> char
char sorting
sorting 한 값이 같으면 추가
같은 값 = map
*/
Map<String,List<String>> map = new HashMap();
List<List<String>> result = new ArrayList<>();
for(String s : list){
char[] chars = s.toCharArray();
Arrays.sort(chars);
String sortingString = String.valueOf(chars);
System.out.println(sortingString);
System.out.println(" ==== ");
if(map.containsKey(sortingString)){
map.get(sortingString).add(sortingString);
}else{
List<String> stringList = new ArrayList<>();
stringList.add(s);
map.put(sortingString,stringList);
}
}
result.addAll(map.values());
return result;
}
}
[[eat, aet, aet], [bat], [tan, ant]]
함수 들어가기 전에 위처럼 주석 달아놓고 풀이 들어가는게 좋다
String sortingString = String.valueOf(chars);
이 부분에서 밑에처럼 잘못 생각할 수 있다.
String sortingString = Arrays.toString(chars);
// output : [a,e,t] , [a,n,t] ....
String sortingString = chars.toString();
// output : 주소값 ( @[C@27d6c5e0 )
Map<String,List<String>> map = new HashMap();
이거를 for loop 안에서 선언하는 실수를 했음
- 마지막에 값 추가는 result.addAll() 로 한다.
🔥 자꾸 기억에 의존해서 문제를 풀려고 한다. 나의 사고에 자신이 없기 때문. 그냥 내 생각대로 쭉 해봐도 된다.
📌 Priority Queue
🎯 문제
두 번째로 큰 숫자?
- Arrays.sort로 풀어도 되지만, Priority Queue 를 활용해보자.
public class KthLargestElementInAnArray {
public static void main(String[] args) {
Comparator<Integer> comp = (o1, o2) -> o1-o2;
int[] arrays = {4,2,1,5,7,10,232};
PriorityQueue<Integer> pq = new PriorityQueue<>(comp);
for (Integer i :arrays) {
pq.offer(i);
if(pq.size()>=3){
pq.poll();
}
}
System.out.println(pq.peek());
}
}
🔥 idea
두 번째로 큰 숫자?
public class KthLargestElementInAnArray {
public static void main(String[] args) {
Comparator<Integer> comp = (o1, o2) -> o1-o2;
int[] arrays = {4,2,1,5,7,10,232};
PriorityQueue<Integer> pq = new PriorityQueue<>(comp);
for (Integer i :arrays) {
pq.offer(i);
if(pq.size()>=3){
pq.poll();
}
}
System.out.println(pq.peek());
}
}
priority queue 의 comparator를 정의 해놓고, queue.size() 가 3이 넘어가면 poll을 해서 2개를 유지한다. 오름차순으로 정의해놨으므로
- 두번째로 큰놈 - 첫번째로 큰놈
이런 식으로 존재할 것이다.
📌 StringBuilder 문제
🎯 output
🎯 intput : "8F3Z-2e-9-wadwqdas"
🎯 output : 8F3-Z2E9-WADW-QDAS
🔥 idea
-
String 추가할 때 StringBuilder를 활용하면 편하다.
-
추가는 append, 인덱스에 추가는 insert를 활용한다.
for(int i=k;i<length;i=i+k){
sb.insert(length-i,"-");
}
🎯 intput : "8F3Z-2e-9-wadwqdas"
🎯 output : 8F3-Z2E9-WADW-QDAS
String 추가할 때 StringBuilder를 활용하면 편하다.
추가는 append, 인덱스에 추가는 insert를 활용한다.
for(int i=k;i<length;i=i+k){
sb.insert(length-i,"-");
}
뒤에서부터 추가하는 for loop 아이디어
String str = "8F3Z-2e-9-wadwqdas";
int k=5;
String solution = solution(str, k);
System.out.println(solution);
}
private static String solution(String str, int k) {
StringBuilder sb = new StringBuilder();
String replace = str.replace("-", "");
String s = replace.toUpperCase();
int length = s.length();
for(int i=0;i<length;i++){
sb.append(s.charAt(i));
}
for(int i=k;i<length;i=i+k){
sb.insert(length-i,"-");
}
String s1 = String.valueOf(sb);
return s1;
}
📌 구간 합 최대
🎯 output
🎯 input : int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
🎯 output : 6
🔥 idea
sum = Math.max(loop[i], sum+loop[i])
max = Math.max(max,sum)
🎯 input : int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
🎯 output : 6
sum = Math.max(loop[i], sum+loop[i])
max = Math.max(max,sum)
sum = 현재의 최대치 계산
max = 지금까지의 최대치 저장
public class MaximumSubArray {
public static void main(String[] args) {
int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
System.out.println(solution(nums));
}
public static int solution(int nums[]){
int newSum = nums[0];
int max = nums[0];
for(int i=1;i<nums.length;i++){
newSum = Math.max(nums[i],newSum+nums[i]);
max = Math.max(newSum,max);
}
return max;
}
}
Author And Source
이 문제에 관하여(인프런 강좌 유형별 정리 📋 String & Array 1탄), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@camel-man-ims/인프런-강좌-유형별-정리-String-Array저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)