알고리즘 표현 방법

  • 자연어: 일상적으로 사용하는 언어
  • 의사코드: 프로그래밍 언어의 형식을 모방하여 알고리즘을 표현한 코드
  • 순서도: 문제해결의 흐름이나 프로세스를 시각적으로 표현
  • 나씨 슈나이더만 차트: 구조적 프로그래밍의 순차, 선택, 반복 구조를 사각형으로 도식화하여 표현
    특징: Goto 구조 표현이 어렵다, 상자도표라고도 불린다
  • UML: 소프트웨어 시스템의 구조와 설계를 시각적으로 표현하는데 표준화된 모델링 언어

 

변수명 표기법

  • 카멜 표기법: 여러 단어가 결합될 경우, 첫 단어를 제외하고 각 단어의 첫 글자를 대문자로 표기 ex) flowChart
  • 파스칼 표기법: 모든 단어의 첫 글자를 대문자로 표기한다. ex) FlowChart
  • 스네이크 표기법: 모든 단어를 소문자로 표기하고 단어 사이에 언더바(_)을 사용한다. ex) flow_chart
  • 헝가리안 표기법: 변수의 자료형이나 특성을 나타내는 접두사를 붙여 변수의 용도를 명시 ex) strFlowChart
  • 케밥 표기법: 모든 단어를 소문자로 표기하고 단어 사이에 하이픈(-)을 사용한다. ex) flow-chart

 

프로그래밍 언어의 유형 분류

개발 편의성 측면에 따른 분류

  • 저급 언어
    컴퓨터가 직접 이해할 수 있는 언어, 실행 속도가 빠르지만, 기계마다 기계어가 달라 호환성이 없고 유지관리가 어렵다
  • 고급 언어
    인간이 이해할 수 있는 소스코드로 되어 있는 언어, 실행을 위해 저급 언어로 번역하는 과정이 필요

 

실행 및 구현 방식에 따른 분류

  • 명령형 언어
  • 함수형 언어 
  • 논리형 언어
  • 객체지향 언어 (객체 간의 메세지 통신을 통해 동작 ex) JAVA, C++ 등)

 

빌드 방식에 따른 분류

  • 컴파일 언어: 소스코드를 컴퓨터가 이해할 수 있는 목적 코드로 변환하여 실행 ex) C, C++ 등
  • 인터프리터 언어: 소스코드를 한 줄씩 실행하며, 컴퓨터가 이해할 수 있는 언어로 통역함 ex) BASIC, Python 등
  • 바이트 코드 언어: 컴파일을 통해 가상 머신이 이해할 수 있는 바이트 코드로 변환되고, 이후 가상 머신이 기계어로 번역함 ex) JAVA, Scale 등
  • 어셈블리 언어: 인간이 이해하기 쉬운 형태의 기호를 사용하여 작성되며, 어셈블러를 통해 기계어로 변환되는 언어, 기계어와 거의 일대일 대응 관계에 있어 하드웨어에 매우 가깝게 작동, 하드웨어 특정적이며, 주로 시스템 레벨 또는 하드웨어 제어 프로그래밍에 사용됨(저급 언어)

 

원시 코드: 인간이 만든 코드

목적 코드: 컴퓨터가 동작할 수 있도록 만든 코드

 

절차적(구조적) 프로그래밍 언어 (하향식)

일련의 처리 절차를 정해진 문법에 따라 순서대로 기술하는 프로그래밍 언어

 

장점

  • 함수를 통한 코드 재활용성 증가
  • 컴퓨터 처리 구조와 유사하여 실행 속도가 빠름

절차적 언어의 종류

  • C 언어: 시스템 프로그래밍 언어로 개발됨, 운영체제 개발에 사용, 이식성이 뛰어남 ex) 리눅스
  • COBOL
  • FORTRAN
  • BASIC

 

 유닉스(90% 어셈블리 언어, 10%  C 언어)

 

객체지향 프로그래밍 언어 (상향식)

소프트웨어 구조를 객체로 만들고, 객체들 간의 상호작용으로 소프트웨어를 동작시키는 프로그래밍 언어

객체를 적절히 조립하고 연결하여 소프트웨어 구성

 

객체지향 프로그래밍 언어 특징

  • 캡슐화
  • 정보은닉
  • 상속: 상위클래스의 데이터와 연산을 하위 클래스가 물려받음 (extends라는 키워드를 사용)
  • 다형성: 같은 이름의 메서드가 상황에 따라 다르게 동작 (오버로딩, 오버라이딩)
  • 추상화

 

캡슐화, 정보은닉 예시

class Person:
    def __init__(self, name, age):
        self.__name = name  # 비공개 속성
        self.__age = age  # 비공개 속성

    def get_info(self):
        return self.__name, self.__age

p = Person("Alice", 30)
print(p.get_info())  # 출력: ('Alice', 30)
# print(p.__name)  # AttributeError: 'Person' object has no attribute '__name'

 

 

  • self.__name과 self.__age는 비공개 속성으로, 클래스 외부에서 p.__name 또는 p.__age로 접근하려고 하면 AttributeError가 발생합니다.
  • 비공개 속성에 접근하기 위해 get_info 메서드를 사용합니다.

 

 

파이썬에서는 클래스 속성 이름 앞에 밑줄 두 개(__)를 붙여서 비공개 속성(private attribute)을 정의합니다. 이는 속성이 클래스 내부에서만 접근 가능하게 하며, 외부에서는 직접 접근할 수 없게 만듭니다.

 

객체지향 프로그래밍 구성 요소

 

클래스는 속성(id, pw..)과 메서드(행위) 으로 이루어져 있고

클래스가 실체화된 걸 객체(인스턴스)라고 한다.

인스턴스끼리 주고 받는 건 메시지라고 한다.

 

객체지향 프로그래밍 언어의 종류

  • JAVA
  • 시뮬라67
  • 스몰토크

 

스크립트 언어

  • 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어
  • 다른 응용 프로그램(ex: html)에 삽입되어 동작하는 프로그래밍 언어
  • 대표적으로 Javascript가 있다. (브라우저를 제어한다)

 

스크립트 언어의 종류

  • 자바스크립트: HTML 문서 내에 삽입되어 사용되며, 동적인 웹 페이지 제작 가능
  • JSP(JavaServer Pages): HTML 페이지 안에 자바 코드를 직접 삽입하여 웹 서버에서 동적 웹 페이지 생성
  • PHP: 서버 측 스크립트 언어로 HTML 문서 안에서 사용(게시판같은 동적인 웹문서 만들 때 사용), 리눅스, 아파치 웹서버, MySQL DB 환경에서 주로 사용됨
  • ASP(Active Server Pages)
  • Perl
  • Python: 객체지향 스크립트 언어, 컴파일 과정이 필요 없으며, 다양한 플랫폼에서 사용 가능
  • VBScript

 

선언형 언어

  • 프로그램이 수행해야 할 문제를 기술하는 언어
  • 목표는 명시하지만, 알고리즘은 명시하지 않는다.
  • 가독성과 재사용성이 좋으며, 오류 발생 가능성이 적음

 

선언형 언어의 종류

  • 하스켈: 순수 함수형 프로그래밍 언어
  • SQL(Structured Query Lanaguage): 데이터베이스를 관리하기 위한 특수 목적의 프로그래밍 언어

'Algorithm' 카테고리의 다른 글

lv 0. 합성수 찾기  (0) 2023.01.24
lv.0 자릿수 더하기  (0) 2023.01.24
lv.0 배열 문제  (0) 2023.01.23
lv 0. 짝수, 홀수 문제  (0) 2023.01.23
lv.0 문자열 문제  (0) 2023.01.23

합성수 찾기

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.

 

function solution(n) {
    var answer = 0;
    
    for (let i = 1; i <= n; i++) {
        let m = [];
        
        for (let j = 1; j <= n; j++) {
            if (i % j === 0) {
                m.push(j);
            }
            
            if (m.length >= 3) {
                answer += 1;
                
                break;
            }
        }
    }
    return answer;
}

'Algorithm' 카테고리의 다른 글

알고리즘 표현방법 & 프로그램언어특성  (0) 2024.05.30
lv.0 자릿수 더하기  (0) 2023.01.24
lv.0 배열 문제  (0) 2023.01.23
lv 0. 짝수, 홀수 문제  (0) 2023.01.23
lv.0 문자열 문제  (0) 2023.01.23

자릿수 더하기

정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요

 

function solution(n) {
    let answer = 0;
    let m = String(n);
    
    for (let i = 0; i < m.length; i++) {
        answer += parseInt(m[i]);
    }
    return answer;
}

 

 

숨어있는 숫자의 덧셈 (1)

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

function solution(my_string) {
    let regex = /[^0-9]/g
    let ans = my_string.replace(regex, "");
    
    let answer = 0;
    let m = String(ans);
    
    for (let i = 0; i < m.length; i++) {
        answer += parseInt(m[i]);
    }
    return answer;
}

'Algorithm' 카테고리의 다른 글

알고리즘 표현방법 & 프로그램언어특성  (0) 2024.05.30
lv 0. 합성수 찾기  (0) 2023.01.24
lv.0 배열 문제  (0) 2023.01.23
lv 0. 짝수, 홀수 문제  (0) 2023.01.23
lv.0 문자열 문제  (0) 2023.01.23

배열 뒤집기

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

 

function solution(num_list) {
    return num_list.reverse();
}

 

function solution(num_list) {
    var answer = [];
    var j = num_list.length
    for(var i = 1; i <= j; i++){
        answer.push(num_list[j-i])
    }
    return answer;
}

 

 

배열 원소의 길이

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

 

function solution(strlist) {
    let num = [];
    for (let i = 0; i < strlist.length; i++) {
        num.push(strlist[i].length);
    }
    return num;
}

 

 

배열 자르기

정수 배열 numbers와 정수 num1num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

 

function solution(numbers, num1, num2) {
    let newNumbers = [];
    for (let i = 0; i < numbers.length; i++) {
        if (i > num1 && i < num2 || i === num1 || i === num2) {
            newNumbers.push(numbers[i]);
        }
    }
    return newNumbers;
}

 

아래가 더 간단했을 듯..

 

function solution(numbers, num1, num2) {
    var answer = [];

    for (let i = num1; i < num2+1; i++) {
        answer.push(numbers[i])
    }

    return answer;
}

 

 

최댓값 만들기 (1)

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.

 

function solution(numbers) {
    let newNumbers = [];
    for (let i = 0; i < numbers.length; i++) {
        for (let j = 0; j < numbers.length; j++) {
            if (i != j) {
                newNumbers.push(numbers[i] * numbers[j]) 
            }
        }
    }
    return Math.max.apply(null, newNumbers)
}

 

오름차순 함수를 활용해서 하는 방법도 있음

 

function solution(numbers) {
    numbers.sort((a,b)=>b-a);
    return numbers[0]*numbers[1];
}

 

 

중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

 

function solution(array) {
    array.sort((a, b) => a-b);
    let arr = parseInt(array.length/2);
    
    return array[arr];
}

 

function solution(array) {
  return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}

 

 

n의 배수 구하기

정수 n과 정수 배열 numlist가 매개변수로 주어질 때, numlist에서 n의 배수가 아닌 수들을 제거한 배열을 return하도록 solution 함수를 완성해주세요.

 

function solution(n, numlist) {
    var answer = [];
    
    for (let i of numlist) {
        if (i % n === 0) {
            answer.push(i);
        }
    }
    
    return answer;
}

 

다른 사람의 풀이

 

function solution(n, numlist) {
    return numlist.filter(num => num % n === 0);
}

'Algorithm' 카테고리의 다른 글

lv 0. 합성수 찾기  (0) 2023.01.24
lv.0 자릿수 더하기  (0) 2023.01.24
lv 0. 짝수, 홀수 문제  (0) 2023.01.23
lv.0 문자열 문제  (0) 2023.01.23
lv.0  (0) 2023.01.17

짝수 홀수 개수

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

 

function solution(num_list) {
    let num1 = [];
    let num2 = [];
    for (let i = 0; i < num_list.length; i++) {
        if (num_list[i] % 2 === 0) {
            num1.push(num_list[i]);
        } else {
            num2.push(num_list[i]);
        }
    }
    let num_result = [num1.length, num2.length];
    return num_result;
}

 

"for - of" 활용해서 하는 게 더 간단하다

 

function solution(num_list) {
    var answer = [0,0];

    for(let a of num_list){
        answer[a%2] += 1
    }

    return answer;
}

 

 

짝수는 싫어요

정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

 

function solution(n) {
    var answer = [];
    
    for (let i = 0; i < n+1; i++) {
        if (i%2 !== 0) {
            answer.push(i);
        }
    }
    
    return answer;
}

 

 

배열 두 배 만들기

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

 

function solution(numbers) {
    var answer = [];
    
    for (let i of numbers) {
        i *= 2;
        answer.push(i);
    }
    
    return answer;
}

 

function solution(numbers) {
    return numbers.reduce((a, b) => [...a, b * 2], []);
}

'Algorithm' 카테고리의 다른 글

lv.0 자릿수 더하기  (0) 2023.01.24
lv.0 배열 문제  (0) 2023.01.23
lv.0 문자열 문제  (0) 2023.01.23
lv.0  (0) 2023.01.17
lv.0 for문  (0) 2023.01.17

문자열 뒤집기

문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

 

function solution(my_string) {
    return my_string.split('').reverse().join('');
}

 

reverse()를 이용하여 문자열의 문자들을 역순으로 변경

  1. 먼저 split('')은 문자열의 문자들을 1개씩 분리하여 배열로 만듭니다.
  2. 그리고 reverse()는 배열에 있는 요소들의 순서를 역순으로 변경합니다.
  3. 마지막으로 join('')은 배열의 요소들을 하나의 문자열로 합칩니다.
  4. 이 과정을 거치면 문자열의 문자들이 역순으로 변경됩니다.

 

 

특정 문자 제거하기

문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

 

function solution(my_string, letter) {
    let answer= [];
    
    for (let i = 0; i < my_string.length; i++) {
        let str = my_string[i];
        
        if (str === letter) {
            continue
        } else {
            answer.push(str);
        }
    }
    return answer.join("");
}

 

join() 함수는 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다.

 

arr.join([separator])

 

  • separator는 옵션
  • join() 함수는 배열의 모든 문자열을 이어 붙여 줍니다.
  • join() 함수의 장점은 문자열을 이어 붙일 때 separator(구분자)를 지정해 줄 수 있다는 것입니다.
  • join() 함수를 잘 활용하면 반복문을 사용하지 않고도, 문자열에 구분자를 넣어서 이어붙여 줄 수 있습니다.

 

 

문자 반복 출력하기

정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

 

function solution(my_string, n) {
    let ans = [];    
    
    for (let i of my_string) {
        i = i.repeat(n);
        ans.push(i);
    }
    return ans.join('');
}

 

다른 사람의 풀이

 

function solution(my_string, n) {
    let ans = '';
    for (let s of my_string) ans+=s.repeat(n);
    return ans;
}

 

나는 괜히 배열로 만들어서 식을 복잡하게 만든 듯

 

 

편지

머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적으려고 하며, 편지를 가로로만 적을 때, 축하 문구 message를 적기 위해 필요한 편지지의 최소 가로길이를 return 하도록 solution 함수를 완성해주세요.

 

function solution(message) {
    return message.length*2;
}

 

 

모음 제거

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

 

function solution(my_string) {
    let ans = '';
    for (let s of my_string) {
        if (s !== 'a' && s !== 'e' && s !== 'i' && s !== 'o' && s !== 'u') ans += s;
    }
    return ans;
    }

 

다른 사람의 풀이

 

function solution(my_string) {
    return my_string.replace(/[aeiou]/g, '');
}

 

 

암호 해독

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

  • 암호화된 문자열 cipher를 주고받습니다.
  • 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.

문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

 

function solution(cipher, code) {
    let answer = '';
    for (let i = code; i <= cipher.length; i++) {
        if (i % code === 0) {
            answer += cipher[i-1];
        }
    }
    return answer;
}

 

 

대문자와 소문자

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

 

function solution(my_string) {
    let answer = "";
    for (let i of my_string) {
        if (i === i.toUpperCase()) {
            answer += i.toLowerCase();
        } else {
            answer += i.toUpperCase();
        }
    } 
    return answer;
}

'Algorithm' 카테고리의 다른 글

lv.0 배열 문제  (0) 2023.01.23
lv 0. 짝수, 홀수 문제  (0) 2023.01.23
lv.0  (0) 2023.01.17
lv.0 for문  (0) 2023.01.17
lv.0 if문  (0) 2023.01.12

양꼬치

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

 

function solution(n, k) {
    k = k - parseInt(n / 10);
    n *= 12000; 
    k *= 2000;
    return n + k;
}

 

피자 나눠 먹기 (1)

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

function solution(n) {
    n /= 7; 
    return Math.ceil(n);
}

 

  • Math.ceil() : 소수점 이하 숫자를 올림하여 정수를 리턴합니다.
  • Math.floor() : 소수점 이하 숫자를 버림하여 정수를 리턴합니다.
  • Math.round() : 소수점 이하 숫자를 반올림하여 정수를 리턴합니다.
function solution(n) {
    return n % 7 === 0 ? n / 7 : parseInt(n / 7) + 1;
}

삼황식 써서 이렇게 했어도 괜찮았겟당

 

 

점의 위치 구하기

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

 

 

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

 

 

 

function solution(dot) {
    if (dot[0] > 0 && dot[1] > 0) {
        return 1; 
    } else if (dot[0] < 0 && dot[1] > 0) {
        return 2;
    } else if (dot[0] < 0 && dot[1] < 0) {
        return 3;
    } else if (dot[0] > 0 && dot[1] < 0) {
        return 4;
    }
    
}

 

 

삼각형의 완성조건 (1)

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

  • 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.

삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

 

function solution(sides) {
    let sum = 0;
    for (let i = 0; i < sides.length; i++) {
        sum += sides[i];
    }
    if (sum - (Math.max.apply(null, sides)*2) > 0) {
        return 1;
    } else {
        return 2;
    }

}

 

 

피자 나눠 먹기 (3)

머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

 

function solution(slice, n) {
    return Math.ceil(n/slice);
}

 

 

아이스 아메리카노

머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

function solution(money) {
    let coffee = Math.floor(money / 5500);
    let lastMoney = money % 5500;
    let answer = [coffee, lastMoney];
    return answer;
}

 

 

순서쌍의 개수

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

 

function solution(n) {
    let answer = 0;
    
    for (let i = 1; i <= n; i++) {
        if(n%i === 0) answer += 1;
    }
    return answer;
}

 

 

옷가게 할인 받기

머쓱이네 옷가게는 10만 원 이상 사면 5%, 30만 원 이상 사면 10%, 50만 원 이상 사면 20%를 할인해줍니다.
구매한 옷의 가격 price가 주어질 때, 지불해야 할 금액을 return 하도록 solution 함수를 완성해보세요.

 

function solution(price) {
    if (500000 < price || 500000 === price) {
        price*=0.8;
    } else if (300000 < price || 300000 === price) {
        price*=0.9; 
    } else if (100000 < price || 100000 === price) {
        price*=0.95; 
    } 
    return parseInt(price);
}

 

 

개미 군단

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

 

function solution(hp) {
    let ans = 0;
    ans += Math.floor(hp / 5); 
    hp %= 5;
    ans += Math.floor(hp / 3); 
    hp %= 3;
    ans += Math.floor(hp / 1); 
    return ans;
}

 

다른 사람의 풀이

 

function solution(hp) {
    return Math.floor(hp/5)+Math.floor((hp%5)/3)+(hp%5)%3;
}

 

 

세균 증식

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

 

function solution(n, t) {
    for (let i = 1; i <= t; i++) {
        n *= 2;
    }
    return n;
}

 

 

약수 구하기

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

function solution(n) {
    var answer = [];
    
    for (let i = 1; i <= n; i++) {
        if (n % i === 0) {
            answer.push(i);
        }
    }
    
    return answer;
}

 

다른 사람의 풀이

 

function solution(n) {
    return Array(n).fill(0).map((v, index) => v+index+1).filter((v) => n%v===0);
}

 

이 식은 이해가 안 감

'Algorithm' 카테고리의 다른 글

lv 0. 짝수, 홀수 문제  (0) 2023.01.23
lv.0 문자열 문제  (0) 2023.01.23
lv.0 for문  (0) 2023.01.17
lv.0 if문  (0) 2023.01.12
lv.0 연산자  (0) 2023.01.12

짝수의 합

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

 

let sum = 0;
function solution(n) {

    for (let i = 0; i < n+1; i++) {
        if (i % 2 == 0) {
            sum = sum + i;
        }
    }
    return sum;
}

 

 

 

배열의 평균값

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

 

function solution(numbers) {
    let sum = 0;
    for (let i = 0; i < numbers.length; i++) {
        sum += numbers[i];
    }
    return sum / numbers.length;
}

for - of 문 활용사례

function solution(numbers) {
    var answer = 0;
    for(i of numbers) {
        answer += i
    }
    return answer / numbers.length;

}

 

배열의 평균값

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

 

function solution(array, height) {
    let answer = [];
    for (let i = 0; i < array.length; i++){
        if (array[i] > height){
            answer.push(i);
        }
    }
    return answer.length;
}

 

function solution(array, height) {
    var answer = 0;
    for (let i = 0; i < array.length; i++) {
        if (array[i] > height) {
            answer++
        }
    }
    return answer;
}

 

중복된 숫자 개수

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

 

function solution(array, n) {
    let answer = [];
    for (i = 0; i < array.length; i++){
        if (array[i] == n) {
            answer.push(i);
        }
    }
    return answer.length;
    
}

 

function solution(array, n) {
    var answer = 0;
    for(var i = 0; i < array.length; i++){
        if(array[i] == n){
            answer++
        }
    }
    return answer;
}

 

 

배열의 유사도

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

 

function solution(s1, s2) {
    let answer = 0;
    
    for (let a1 of s1) {
        for (let a2 of s2) {
            if (a1 === a2) {
                answer += 1;
            }
        }
    }
    return answer;   
}

'Algorithm' 카테고리의 다른 글

lv 0. 짝수, 홀수 문제  (0) 2023.01.23
lv.0 문자열 문제  (0) 2023.01.23
lv.0  (0) 2023.01.17
lv.0 if문  (0) 2023.01.12
lv.0 연산자  (0) 2023.01.12

+ Recent posts