Day 8 조건문, 문자열

Day8 8단계 20231025

1. 간단한 논리 연산

class Solution {
    public boolean solution(boolean x1, boolean x2, boolean x3, boolean x4) {
        boolean x1x2 = (x1 == false && x2 == false) ? false : true;
        boolean x3x4 = (x3 == false && x4 == false) ? false : true;
        return (x1x2 == true && x3x4 == true) ? true : false;
    }
}

2. 주사위 게임 3

import java.util.*;

class Solution {
    public int solution(int a, int b, int c, int d) {
        int[] nums = { a, b, c, d };

        Map<Integer, Integer> map = new HashMap<>();
        int count = 1;

        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(nums[i])) {
                count = map.get(nums[i]) + 1;
            } else {
                count = 1;
            }
            map.put(nums[i], count);
        }

        int same = 0;
        int diff = 0;
        int answer = 0;

        Set<Integer> keys = map.keySet();
        switch (map.size()) {
        case 1:
            answer = nums[0] * 1111;
            break;
        case 2:
            for (int i : keys) {
                if (map.get(i) == 2) {
                    if (same == 0) {
                        same = i;
                    } else {
                        diff = i;
                        answer = (same + diff) * Math.abs((same - diff));
                        break;
                    }
                } else {
                    if (map.get(i) == 3) {
                        same = i;
                    } else if (map.get(i) == 1) {
                        diff = i;
                    }
                    answer = (int) Math.pow(10 * same + diff, 2);
                }
            }
            break;
        case 3:
            answer = 1;
            for (int i : keys) {
                if (map.get(i) != 2) {
                    answer *= i;
                }
            }
            break;
        case 4:
            Arrays.sort(nums);
            answer = nums[0];
            break;
        }

        return answer;
    }
}
import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(int a, int b, int c, int d) {
        int answer = 0;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(a, map.getOrDefault(a, 0) + 1);
        map.put(b, map.getOrDefault(b, 0) + 1);
        map.put(c, map.getOrDefault(c, 0) + 1);
        map.put(d, map.getOrDefault(d, 0) + 1);
        if (map.size() == 1) return a * 1111;
        if (map.size() == 2) {
            if (map.containsValue(3)) {
                for (Map.Entry<Integer, Integer> el : map.entrySet())
                    answer += el.getKey() * (el.getValue() == 3 ? 10 : 1);
                return answer * answer;
            }
            int x = (a + b + c + d - 2 * a) / 2;
            return (a + x) * Math.abs(a - x); // 이 부분은 잘 이해가 안간다
        }
        if (map.size() == 3) {
            answer = 1;
            for (Map.Entry<Integer, Integer> el : map.entrySet())
                if (el.getValue() != 2) answer *= el.getKey();
            return answer;
        }
        return Math.min(Math.min(a, b), Math.min(c, d));
    }
}

3. 글자 이어 붙여 문자열 만들기

class Solution {
    public String solution(String my_string, int[] index_list) {
        StringBuilder sb = new StringBuilder();
        for(int i : index_list) {
            sb.append(my_string.charAt(i));
        }
        return sb.toString();
    }
}
StringBuilder sb = new StringBuilder();
for(int i : index_list) {
	sb.append(my_string.charAt(i));
}
Arrays.stream(indexList).mapToObj(i -> String.valueOf(myString.charAt(i))).collect(Collectors.joining());

4. 9로 나눈 나머지

import java.util.stream.Stream;
class Solution {
    public int solution(String number) {
        return Stream.of(number.split("")).mapToInt(i->Integer.parseInt(i)).sum()%9;
    }
}
  1. 루프를 돌려서 각 String 위치의 char를 읽어서 정수로 변환
    • 다른 사람 풀이
int sum = 0;
for(int i = 0; i < str.length; i++) {
	sum += str.charAt(i) - '0'; // 여기선 '0'과의 연산으로 int형 변환을 했다
}
int answer = sum%9;
  1. 문자열을 IntStream으로 변환하는 chars()와 Stream의 map() 메소드 사용
    • 다른 사람 풀이
return number.chars().map(i -> str.charAt(i)).sum()%9;
  1. String 전체를 Stream으로 변환 후 합산
    • 내 풀이
    • 사이즈가 큰 데이터가 아니라서 스트림을 거치기 때문에 for-loop보다 느리다.
return Stream.of(number.split("")).mapToInt(i->Integer.parseInt(i)).sum()%9;

5. 문자열 여러 번 뒤집기

class Solution {
    public String solution(String my_string, int[][] queries) {
        StringBuilder sb = new StringBuilder(my_string);
        StringBuilder rev = new StringBuilder();

        for (int i = 0; i < queries.length; i++) {
            rev.append(sb.substring(queries[i][0], queries[i][1]+1)).reverse();
            sb.replace(queries[i][0], queries[i][1]+1, rev.toString());
            rev.setLength(0);
        }
        return sb.toString();
    }
}