본 페이지는 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;
}
'알고리즘 > [프로그래머스]Lv.1' 카테고리의 다른 글
[프로그래머스]Lv1. 제일 작은 수 제거하기<미제> (0) | 2022.11.02 |
---|---|
[프로그래머스]Lv1. 서울에서 김서방 찾기 (0) | 2022.10.31 |
[프로그래머스]Lv1. 약수의 개수와 덧셈 (0) | 2022.10.31 |
[프로그래머스]Lv1. 문자열 다루기 (0) | 2022.10.31 |
[프로그래머스]Lv1. 핸드폰 번호 가리기 (0) | 2022.10.26 |