본문 바로가기
코딩테스트/LV. 0

LV. 0 :: 가까운 수

by KUROMI98 2023. 1. 23.

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

 

프로그래머스

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

programmers.co.kr

 

function solution(array, n) {
    var answer = 0;
    var minus = [];
    var negative = [];
    var positive = [];
    
    array = array.sort((a,b)=>a-b);
    //배열을 순서대로 정리해준다.
    
    for (i=0; i<array.length; i++)
    {
        minus.push(array[i] - n);
        // 배열과 n의 차를 minus라는 배열에 넣어준다.
    }
    
    for (i=0; i<array.length; i++)
    {
        if (minus[i]<0) {negative.push(minus[i]);}
        // minus의 원소가 0보다 작다면 negative라는 배열에 넣어준다.
        else if (minus[i]>=0) {positive.push(minus[i]);}
        // minus의 원소가 0보다 크다면 positive라는 배열에 넣어준다.
    }
    
    var min = Math.max(...negative);
    // negative 배열의 원소 중 최대값(0에 가장 가까운 값)을 min으로 설정
    var max = Math.min(...positive);
    // positive 배열의 원소 중 최소값(0에 가장 가까운 값)을 max으로 설정
    
    if (min+max<0) {answer = n+max;}
    // 최대값과 최소값의 합이 음수라면, n이랑 max를 더한게 answer가 된다
    else if (min+max>=0) {answer = n+min;}
    // 최대값과 최소값의 합이 0이거나 양수라면, n이랑 min을 더한게 answer가 된다
    // (조건에서 '가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.' 랬으니까)
    
    return answer;
}

230527 python

def solution(arr, n):
    answer = 0
    
    arr += [n]
    arr.sort()
    i = arr.index(n)
    
    if arr[i] == arr[-1] : answer = arr[-2]
    elif arr[i] == arr[0] : answer = arr[1]
    else :
        if arr[i+1]-n < n-arr[i-1] : answer = arr[i+1]
        else : answer = arr[i-1]
    
    return answer

230916 C++

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> array, int n) {
    int answer = 0;
    array.push_back(n);
    sort(array.begin(),array.end());
    int index = find(array.begin(), array.end(), n) - array.begin();
    for(int i=0; i<array.size(); i++){ 
        if((array[index+1]-array[index]<(array[index]-array[index-1]))) {
            answer = array[index+1];
        }
        else if ((array[index+1]-array[index]>=(array[index]-array[index-1]))) {
            answer = array[index-1];}
    }

    if (array[0]==n) answer = array[1];
    if (array[array.size()-1]==n) answer = array[array.size()-2];

    return answer;
}

'코딩테스트 > LV. 0' 카테고리의 다른 글

LV. 0 :: 문자열 계산하기  (0) 2023.01.24
LV. 0 :: 잘라서 배열로 저장하기  (0) 2023.01.23
LV. 0 :: A로 B 만들기  (0) 2023.01.23
LV. 0 :: 최댓값 만들기 2  (0) 2023.01.23
LV. 0 :: 가장 큰 수 찾기  (0) 2023.01.23

댓글