같은 숫자는 싫어!
문제에도 나와있듯 배열안에 같은 숫자를 모두 지우는게 아니라, '연속적으로 나타나는' 숫자만 제거해주면 되는 문제이다.
처음에는 반복문을 하나만 쓸까 두개를 만들어서 쓸까 생각을 많이 해봤는데, 엄청 단순하게 배열로만 풀어야한다고 생각을해서 이중포문을 만들어서 문제를 풀려고 했으나, 진짜 도저히 풀 수가 없었다.. 아는게 그만큼인건지 애초에 푸는 방식이 잘못됐던건지 지금은 알 수 없지만 ㅠㅠ..
결국 ArrayList를 사용해서 문제를 풀기로 했다. 실무에서 ArrayList를 본 적도 있고 내가 사용해본적도 있었는데, 알고리즘 문제를 풀면서 다시 쓰니까 느낌이 새로웠다.
해답을 보기전에 문제를 정리해보자면 이렇다.
숫자로만 이루어져있는 배열이 하나 있는데, 이 배열에서 연속된 숫자는 모두 제거하고 남은 숫자들로만 배열을 구성해서 사용자에게 출력해주면 된다.
말로만 쉽지 으휴!
Integer타입으로 ArrayList배열 하나를 만들어주고, 비교할 배열의 크기만큼 반복문을 실행한다.
이때 중요한게 배열의 인덱스의 숫자를 비교해줄 int형 변수를 하나 만들어줘야한다.
s[i]가 1이라고 가정해보면, 최초의 compNum(비교해줄 숫자)은 10이니까 1이 배열에 들어갈 수 있는 조건이 충족되어 배열에 1이 입력되고 compNum이 1이 된다.
바로 다음으로 비교되는 s[i]도 1이라고 가정하면 이미 compNum은 1이니까 조건문에서는 false처리가 되어 배열에 들어가지 않는다.
이런식으로 배열의 끝까지 반복문을 실행하며 compNum과 일치하지 않으면 모두 배열에 add하고 결과 리턴해주면 된다.
설명이 너무 이상한가..?
아래는 해답
package list;
import java.util.ArrayList;
import java.util.Arrays;
public class Programmers_SameNumberHate {
public static int[] solution(int[] s) {
// 값을 넣어줄 배열 하나 생성
ArrayList<Integer> resultArr = new ArrayList<Integer>();
// 반복문이 실행되면서 배열의 값을 비교할 변수 생성
int compNum = 10;
// 반복문
// s의 크기만큼 제일 반복문을 실행
for (int i = 0; i < s.length; i++) {
if (s[i] != compNum) {
resultArr.add(s[i]);
compNum = s[i];
}
}
// 반복문을 실행하며 연속되는 숫자는 제거하고 넘어가야한다.
// s[i]가 1이라고 가정해보면, 최초의 compNum은 10이니까 1이 배열에 들어갈 수 있는 조건이 충족되어 배열에 1이 입력되고 compNum이 1이 된다.
// 그 후 비교되는 s[i]가 1이라고 가정하면 이미 compNum은 1이니까 조건문에서는 false처리가 되어 배열에 들어가지 않는다.
// 이런식으로 s배열의 끝까지 돌리면서 compNum과 일치하지 않으면 모두 배열에 add하고 결과 리턴
// ArrayList의 toString을 사용하게되면 String으로 반환하여 문제 통과가 불가능하다.
// 따라서 int로 형변환을 해서 반환해줘야한다!
int[] answer = new int[resultArr.size()];
for (int i = 0; i < resultArr.size(); i++) {
answer[i] = resultArr.get(i);
}
return answer;
}
public static void main(String[] args) {
// 파라미터 숫자가 들어간 배열 생성
int[] s = solution(new int[]{1, 1, 3, 3, 0, 1, 1});
// 리턴 값 씨스아웃
System.out.print(Arrays.toString(s));
}
}
ㅎㅅㅎ
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Java 프로그래머스 레벨1 자바 직사각형 별찍기 해답(자바 별찍기) (0) | 2021.08.30 |
---|---|
[Programmers] Java 프로그래머스 레벨1 자바 문자열 내림차순으로 배치하기 해답 (0) | 2021.08.29 |
[Programmers] Java 프로그래머스 문자열을 정수로 바꾸기 문제 해답 (0) | 2021.08.27 |
[Programmers] Java 프로그래머스 짝수와 홀수 (자바 짝수 홀수) 문제 해답 (0) | 2021.08.26 |
[Programmers] Java 프로그래머스 서울에서 김서방 찾기 문제 풀이 및 해석 (0) | 2021.08.25 |