Study

[ javascript && Python ] 알고리즘 챌린지 "Part1"

wookjae 2023. 1. 17. 02:20

Question1. 몫 구하기 

정수 "Num1", "Num2" 가 매개변수로 주어질 때. "Num1"을 "Num2" 로 나눈몫을 return 하도록 solution 함수를 완성해 주세요. 

 

# javascript 답안

function solution(num1, num2) {

   // Math floor - 내림 (몫만 구할 수 있다.)

   //var answer = Math.floor(num1 / num2);

   // 다른방법 (~~연산)
   // -(n+1)
   var answer2 = ~~(num1 / num2);

   return answer2 || answer;
}

solution(10, 4);     // 2 
solution(7, 2);       // 3

 

Question2. 나머지 구하기 

정수 "Num1", "Num2" 가 매개변수로 주어질 때. "Num1"을 "Num2" 로 나눈 나머지를 return 하도록 solution 함수를 완성해 주세요. 

 

# python 답안 

def solution(num1, num2) {
   
   answer = num1 % num2     # 나머지 구하기 
   mock    = num1 / num2       # 나누기 (결과물 실수)
   mock    = num1 // num2      # 몫만 (소수점 제외)

   return answer
}

 

Question3. 숫자 비교하기 

정수 "Num1", "Num2" 가 매개변수로 주어질 때. 두수가 같으면 1 다르면 -1을 return 하도록 solution함수를 

완성해주세요

 

# python 답안 

def solution(num1, num2): 
    if num1 == num2: 
        answer = 1
    else: 
        answer = -1

    return answer
    
def solution2(num1, num2):
    return 1 if num1 == num2 else -1       # if앞에 true 값 
        

 

Question4. 각도기 

각에서 0도초과 90도 미만은 예각, 90도는 직각, 90도초과 180미만은 둔각, 180도는 평각으로 분류합니다. 각  "angle" 이 매개변수로 주어질 때. 예각일때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return 하도록 solution함수를 완성 해 주세요.

 

# javascript 답안

function solution(angle) {

   if (angle < 90) {
      return 1;
   } else if (angle == 90) {
      return 2;
   } else if (angle < 180) {
      return 3;
   } else {
      return 4;
   }
}

# python 답안 

def solution(angle): 

    if angle < 90:
        return 1
    elif angle == 90: 
        return 2
    elif angle < 180: 
        return 3
    else: 
        return 4

 

Question5. 양꼬치

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원 입니다. 정수 n과  k가 매개변수로 주어졌을 때, 양꼬치 n인분과, 음료수k개를 먹었다면 총 얼마를 지불해야 하는지 return 하도록 solution함수를 완성해보세요.

 

# javascript 답안

function solution(n, k) {

   if (n >= 10) {

      // ~~연산자는 몫만 출력 한다.
      k -= ~~(n / 10);
   }
   
   return 12000 * n + 2000 * k;
}

# python 답안 

def solution(n,k):
    
   if n >= 10:
       k -= n//10     # 소수점을 제외한 정수 (몫) 
        
   return n*12000 + 2000*k 

 

Question6. 짝수의 합

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution함수를 완성해보세요.

 

# javascript 답안

function solution(n) {

   // 빈 배열공간을 만들기 (공간 100)
   //const eArr = Array(100);

   // "0".repeat(100) -- 0이 100개 인 문자열
   // "0".repeat(100).split("") -- 0이 100개인 배열
   //let checkVal = "0".repeat(100).split("");

   // fill은 배열에 특정 값 으로 배열 전체를 채우는 것
   // fill 펑션에 인자를 넣지 않을 시.. undefined로 채워진다.
   // javascript 에서 사용하지 않는 변수는 언더바(_) 사용..
   return Array(n).fill().map((_, idx) => idx+1)
                                 .filter(v => v % 2 === 0)
                                 .reduce((accVal, curVal) => accVal+curVal, 0);
}

// reduce함수의 콜백(CallBack)함수 인자 값 
   * reduce(  ( 누적 값, 현재 값, 인덱스, 원본배열 )  => ... , [초기 값] );

# python 답안 

def solution(n): 
   
   # range함수 ( [start], [stop], [step] )
    
   return sum(range(0, n+1, 2))

 

Question7. 배열의 평균 값 

정수배열 numbers 가 매개변수로 주어집니다. numbers 의 원소의 평균값을 return 하도록 solution함수를 완성해보세요.

 

# javascript 답안

function solution(numbers) {

   return numbers.reduce((accVal, currVal) => accVal + currVal, 0) / numbers.length;
}

# python 답안 

# import numpy as np
# TODO: 넘 파이 (np)를 활용해서 합산 구해보기 np.sum([합산 대상배열]) ..구글링 필요 

def solution(numbers): 

       
   return sum(numbers)/len(numbers)

 

Question8. 머쓱이보다 키 큰 사람 

머쓱이는 학교에서 키 큰 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어졌을 때, 머쓱이보다 키 큰 사람수를 return 하도록 solution함수를 완성해보세요.

 

# javascript 답안

function solution(array, height) {

   /********************* Method(1) Start... ****/
   // let result = 0;

   // for (i of array) {
   // if (i > height) {
      // result += 1;
      // }
   // }

   // return result;
   /********************* Method(1) End... ****/

   /********************* Method(2) Start... ****/

   return array.filter((v) => v > height).length;
  /********************* Method(2) Start... ****/
}

# python 답안 

def solution(array, height):

   #   count = 0
   #   for i in array: 
   #       if i > height: 
   #          count += 1
   #   return count
   
   #   array.append(height)
   #   return sorted(array, reverse=True).index(height)

   return len(list(filter(lambda x: x > height, array)))   

 

Question9. 중복된 숫자 개수 

정수가 담긴 정수 배열 arrayn이 매개변수로 주어졌을 때, array에 n이 몇 개 있는 지를  return 하도록 solution함수를 완성해보세요.

( 추가적으로 생각해야될 문제 "배열 요소가 아닌 배열에 포함된 특정 수 의 전체 갯 수

  cf). 임의배열 [ 1, 2, 3, 11, 1, 5, 111, 6 ] 에서 1의 전체 수 ?)

 

# javascript 답안

function solution(array, n) {

   return array.filter((v) => v === n).length;
}

console.log("1의 갯수: ", solution([1, 2, 1, 1, 3, 4, 1, 5, 2, 5], 1));  // 결과: 4

# python 답안 

# 카운터 라이브러리를 활용한 방법 
# from collections import Counter    

def solution(array, n):
   return array.count(n)
   # return Counter(array).get(n)
    
# str함수를 사용할 시 배열을 스트림(문자열)로 변형한다.
print ('solution Result: ', str(['1', '11', '111', '2', '3', '4']).count('1') )    


########################################
##### 피자 계산 ##########

# import math 

def solution(n):
   if n // 7 == n / 7 :
      return n // 7
   else: 
      return n // 7 + 1

   # return math.ceil(n / 7)    # ceil(올림) 처리..

 

Question10. 짝수 홀수 개수 

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution함수를 완성해보세요.

 

# javascript 답안

function solution(num_list) {

   var answer = [0, 0];

   for (item of num_list) {
 
      answer[item % 2] += 1

      // [ Other Case ] 
      // if (item % 2 == 0) {
      // answer[0] += 1;
      // }else {
      // answer[1] += 1;
      // }
   }
 
   return answer;
}

# python 답안 

def solution(num_list):
    answer = [0,0]
    
    for i in num_list: 
        
        answer[i % 2] += 1
        
        # if i % 2 == 0:
        #     answer[0] += 1
        # else: 
        #     answer[1] += 1

    return answer    

print ('solution Result: ', solution([1,2,3,4,5,6,8]))   

 

 

NEXT...