본문 바로가기

알고리즘/[프로그래머스]Lv.1

[프로그래머스]Lv1. 없는 숫자 더하기

본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+  Java언어 내용도 포함되어있습니다. )

 

https://school.programmers.co.kr/learn/courses/30/lessons/86051

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1.문제설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers 가 매개변수로 주어집니다. 
numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록
solution 함수를 완성해주세요.

 

2. 문제해결 접근

  • 반복문을 이용, 배열의 값을 체크하여, 없는 값을 뽑아낼 수 있을 것 같다.
  • 이때 이중반복문을 이용하여, 0~9까지의 수가, 배열의 각 인덱스와의 값을 대조할 수 있을것 같다.
  • 조건문을 통해, 0~9까지의 값이 있을 때- continue / 값이 없을 때를 대조하여/ 값이 없을 때의 값만 합산한다 
  • 배열안에 특정값이 없는 조건은 array.contains()를 이용하면 확인할 수 있다.

 

3.답안 : [언어 : java ]

1차시도.

		int answer = 0;
		
		// 반복문으로 배열의 값을 체크하여, 없는 값을 더해준다.
		for (int i = 0; i < numbers.length; i++) {
			// 이때, 조건문에서는 배열의 값중에 어떠한 것이라도, i와 같을 경우로 채크한다?? 이중포문?
			for (int j = 0; j <= 9 ; j++) {
				if( numbers[] != j ) answer + = j;
				
			}
			
		}
		System.out.println( "answer : " + answer );

위와같이 처리할경우, j는 없는값 이외에도, 일치하지 않은 모든 값을 합산하기에 적합하지 않다.

접근에서의 contains()를 이용하기 위해서는 list를 사용해줘야 한다.

 

2차시도 - 반대로, 0~9 숫자에 인덱스값을 대조하는 방법도 있었다.

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        for(int i=0;i<=9;i++){
            for(int j : numbers){
                if(i==j) break;
                else if(j==numbers[numbers.length-1]) answer+=i;
            }
        }
        return answer;
    }
}

 

3. 0~9까지의 합인 45에서 반복문을 통해 모든 값들을 빼서, 없는값을 남겨두는 형태도 있었다.

class Solution {
    public int solution(int[] numbers) {
        int sum = 45;
        for (int i : numbers) {
            sum -= i;
        }
        return sum;
    }
}

 

조금의 생각의 전환으로 다양한 풀이 방법이 있었다...

 

4. C++ 답안

위의 풀이를 토대로 간결한 C++ 코드를 작성하였다

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> numbers) {
    int answer = 0;
	// sort()함수로 배열을 정렬한다.
    sort(numbers.begin(), numbers.end());
	
    //배열의 인덱스를 조정할 변수를 선언한다.
    int index = 0;
     // 0~9숫자를 반복문으로서 대입한다.
    for (int i = 0; i < 10; i++)
    {
    	// i와 number 배열의 값을 비교하여 값이 없을 경우 합산한다.
        if (i != numbers[index])
        {
            answer += i;
        }
        else
            index++;
    }


    return answer;
}