같은 숫자는 싫어
class Solution {
public int[] removeRepeat(int[] arr){
List<Integer> list = new ArrayList<>();
for(int i = 0; i < arr.length; i++){
if(i < arr.length-1 && arr[i] == arr[i+1]){
continue;
}
list.add(arr[i]);
}
System.out.println(list);
int[] result = list.stream().mapToInt(i -> i).toArray();
return result;
}
public int[] solution(int []arr) {
// arr은 부터 9까지
// 연속적으로 나타나는건 하나만 남기고 다 제거
// 기존의 순서는 유지해야함
int[] answer = removeRepeat(arr);
return answer;
}
}
효율성 검증 문제가 달려있어 잘못 짜면 통과를 하지 못 하는 수가 있다. 하지만 웬만하면 통과할 수 있을 정도로 널널하게 범위를 지정해준 것 같다. 그냥 생각나서 풀어본 쉬운 문제였다.
시저 암호
class Solution {
public String solution(String s, int n) {
String answer = "";
char[] chars = s.toCharArray();
for(int i = 0; i < chars.length; i++){
if(chars[i] != ' '){
if( chars[i] >= 'a' && chars[i] <= 'z' ){
chars[i] += n;
if(chars[i] < 'A' || chars[i] > 'z'){
chars[i] -= 26;
}
}else if( chars[i] >= 'A' && chars[i] <= 'Z'){
chars[i] += n;
if(chars[i] > 'Z'){
chars[i] -= 26;
}
}
}
}
answer = String.valueOf(chars);
return answer;
}
}
if문을 하나만 써서 코드를 간소화시킬 수 없을까 하는 생각을 하면서 풀어봤는데 안 됐다. 다른 사람들 풀이 보니 없는 것 맞는 것 같았다. 그렇게 되고나니 남은건 오버플로 체크뿐이었는데, 이 부분을 빼면 단순한 문제였다. 같은 코드 여러번 쓰기 싫어서 여러 방법을 강구해봤지만 결국 이렇게 풀게 됐다. 마음에 안 든다.
제일 작은 수 제거하기
class Solution {
public int[] solution(int[] arr) {
List<Integer> list = new ArrayList<>();
int min_idx = 0;
if(arr.length > 1){
for(int i = 0; i < arr.length; i++){
list.add(arr[i]);
if(arr[min_idx] > arr[i]){
min_idx = i;
}
}
list.remove(min_idx);
}else{
list.add(-1);
}
return list.stream().mapToInt(i->i).toArray();
}
}
옆 조원분 도와드리던 중에 얼떨결에 풀게됐다. 나름 재밌게 풀었다.
'내가 배운 것들 > 알고리즘' 카테고리의 다른 글
항해99 11/12(금) 알고리즘 (0) | 2021.11.12 |
---|---|
항해99 11/11(목) 알고리즘 (0) | 2021.11.11 |
항해99 11/10(수) 알고리즘 - 알아서 푼 것들 (0) | 2021.11.10 |
항해99 11/9(화) 알고리즘 (0) | 2021.11.09 |
항해99 11/9(화) 알고리즘 - 알아서 푼 것들 (0) | 2021.11.09 |
댓글