enoch012 / JavaBasicStudy

Java 기초 스터디 (2023.09 ~ 10)
0 stars 1 forks source link

10월 23일 / 코딩테스트 연습 (gwangho) #25

Open SDeung01 opened 1 year ago

SDeung01 commented 1 year ago

문제1 : 문자열 나누기

문제

입출력 예

s | result -- | -- "banana" | 3 "abracadabra" | 6 "aaabbaccccabba" | 3

문제풀이

회고

SDeung01 commented 1 year ago

문제 2 : 음양 더하기

최근 길거나 복잡한 문제를 위주로 풀다보니 사소한 실수가 잦은 듯 하여 기본적인 문제를 다시 풀어보았다.

문제

문제풀이

class Solution { public int solution(int[] absolutes, boolean[] signs) { int answer = IntStream.range(0,signs.length) .map(i -> signs[i] ? absolutes[i] : -1 * absolutes[i]) .sum(); return answer; } }


## 회고
- 간단한 문제 일수록 코드를 간결하고 가독성있게 작성하는 것에 대해 생각해보기 좋은 듯 하여 앞으로도 종종 풀어봄이 좋을 듯하다. 물론 가능하다면 이번처럼 stream과 같이 여러가지 방식으로 접근해보는 것 또한 함께 하는 것이 좋을 듯 하다.
- stream을 사용함에 있어 삼항연산자의 사용이 가능한지 긴가민가 했는데 전혀 문제가 없었다. 아무래도 람다 표현식에 좀 더 익숙해질 필요를 느꼈다.
SDeung01 commented 1 year ago

문제 3 : 같은 숫자는 싫어

문제

입출력 예

arr | answer -- | -- [1,1,3,3,0,1,1] | [1,3,0,1] [4,4,4,3,3] | [4,3]

문제풀이

public class Solution { public int[] solution(int []arr) { int[] temp = new int[arr.length]; Arrays.fill(temp, Integer.MAX_VALUE); int idx = 0; for(int i = 0; i < arr.length; i++){ int prevNum = i == 0 ? Integer.MAX_VALUE : temp[idx - 1]; if(prevNum != arr[i]){ temp[idx] = arr[i]; idx++; } }

    return Arrays.copyOfRange(temp, 0, idx);
}

}

![image](https://github.com/enoch012/JavaBasicStudy/assets/145359737/3f0877e4-6bf3-4c5e-8d9e-6e65d1b4adef)
![image](https://github.com/enoch012/JavaBasicStudy/assets/145359737/bc5d6b70-cb27-4a64-99c0-48459f7ff1f7)

## 회고
- 다음은 앞서 얘기했던 List를 사용한 일반적인 방법으로 작성한 코드이다.
- 정확성 테스트(위)에서는 앞서 작성한 코드와 마찬가지로 큰 편차없이 고르게 빠른 속도를 보여주지만 효율성 테스트(아래)에서는 앞서 작성한 코드가 조금 더 빠른 것을 확일 할 수 있다. 여기서 int배열로 전환하기 위해 for문이 아닌 stream을 썼다면 차이가 더 크게 났을 듯 하다.
```java
import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        ArrayList<Integer> tempList = new ArrayList<Integer>();
        int preqNum = Integer.MAX_VALUE;
        for(int num : arr) {
            if(preqNum != num) tempList.add(num);
            preqNum = num;
        }       
        int[] answer = new int[tempList.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = tempList.get(i).intValue();
        }
        return answer;
    }
}

image image