최대공약수와 최소공배수 (Level 1)

문제

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환해주는 gcdlcm 함수를 완성해 보세요.

배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다.

예를 들어 gcdlcm(3,12) 가 입력되면, [3, 12]를 반환해주면 됩니다.

풀이

function gcdlcm(a, b) {
  let gcd = 1, lcm = 1;
  for (let i = 1; i <= Math.min(a,b); i++) {
      if ((a%i == 0) && (b%i == 0)) {
        gcd = i
    }
  }
  lcm = a*b/gcd
  return [gcd, lcm]
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(gcdlcm(3,12));

s에서 p와 y가 매치되는 배열의 길이가 같을 때, p와y의 개수가 0개일 때, 나머지 경우로 나눠 조건문 생성

다른 사람의 풀이

function greatestCommonDivisor(a, b) {return b ? greatestCommonDivisor(b, a % b) : Math.abs(a);}
function leastCommonMultipleOfTwo(a, b) {return (a * b) / greatestCommonDivisor(a, b);}
function gcdlcm(a, b) {
    return [greatestCommonDivisor(a, b),leastCommonMultipleOfTwo(a, b)];
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(gcdlcm(3,12));

재귀함수를 통한 최대공약수 구하기. 상당히 신기하고 이해하는데 시간이 좀 걸렸지만, 유용하게 사용할 수도 있을듯함

그냥 첫줄만 써주면 되는거였다..

p, y 둘다 0인경우도 어짜피 0으로 동일하기 때문에 두 조건을 합쳐주고 나머지는 자동으로 false가 리턴되도록 작동함.


문자열 내 p와 y의 개수 (Level 1)

문제

numPY함수는 대문자와 소문자가 섞여있는 문자열 s를 매개변수로 입력받습니다.

s에 ‘p’의 개수와 ‘y’의 개수를 비교해 같으면 True, 다르면 False를 리턴하도록 함수를 완성하세요.

‘p’, ‘y’ 모두 하나도 없는 경우는 항상 True를 리턴합니다.

예를들어 s가 “pPoooyY”면 True를 리턴하고 “Pyy”라면 False를 리턴합니다.

풀이

function numPY(s){
  if ( s.match(/p/gi).length == s.match(/y/gi).length ) {
    return true
  } else if ( /p|y/gi == 0 ) {
      return true
  } else {
    return false
  }
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( numPY("pPoooyY") )
console.log( numPY("Pyy") )

s에서 p와 y가 매치되는 배열의 길이가 같을 때, p와y의 개수가 0개일 때, 나머지 경우로 나눠 조건문 생성

다른 사람의 풀이

function numPY(s) {
  return s.match(/p/ig).length == s.match(/y/ig).length;
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( numPY("pPoooyY") )
console.log( numPY("Pyy") )

그냥 첫줄만 써주면 되는거였다..

p, y 둘다 0인경우도 어짜피 0으로 동일하기 때문에 두 조건을 합쳐주고 나머지는 자동으로 false가 리턴되도록 작동함.


문자열 다루기 기본 (Level 1)

문제

alpha_string46함수는 문자열 s를 매개변수로 입력받습니다.

s의 길이가 4혹은 6이고, 숫자로만 구성되있는지 확인해주는 함수를 완성하세요.

예를들어 s가 “a234”이면 False를 리턴하고 “1234”라면 True를 리턴하면 됩니다.

풀이

function alpha_string46(s){
  if ((s.length == 4 || s.length == 6) && (s.match(/\D/gi) != 0)) {
      return true
  } else {
      return false
  }
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( alpha_string46("a234") );

필요한 조건을 그대로 구현했음.

다른 사람의 풀이

function alpha_string46(s){
  var result = false;
  if((s.length == 4 || s.length == 6) && /^[0-9]+$/.test(s)) {
    result = true;
  }
  return result;
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( alpha_string46("a234") );

/^[0-9]+$는 전체가 숫자열인지 확인

test는 문자열 안에 정규식 패턴이 있는지 확인할 때 사용하며, 있으면 true 없으면 false 반환


삼각형 출력하기 (Level 1)

문제

printTriangle 메소드는 양의 정수 num을 매개변수로 입력받습니다.

다음을 참고해 *(별)로 높이가 num인 삼각형을 문자열로 리턴하는 printTriangle 메소드를 완성하세요

printTriangle이 return하는 String은 개행문자(‘\n’)로 끝나야 합니다.

높이가 3일때

*
**
***

풀이

function printTriangle(num) {
  let res = '';
  for (let i = 1; i <= num; i++ ) {
      res += "*".repeat(i) + "\n"
  }
  return res
}


// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( printTriangle(3) );

역삼각형 별찍기에서 다른사람이 만든 코드처럼 한줄로 줄이고 싶었지만 너무 어렵다.

다른 사람의 풀이

다 비슷비슷한 코드


서울에서 김서방 찾기 (Level 1)

문제

findKim 함수(메소드)는 String형 배열 seoul을 매개변수로 받습니다.

seoul의 element중 “Kim”의 위치 x를 찾아, “김서방은 x에 있다”는 String을 반환하세요.

seoul에 “Kim”은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

풀이

function findKim(seoul){
  return `김서방은 ${seoul.indexOf("Kim")}에 있다`
}

// 실행을 위한 테스트코드입니다.
console.log( findKim(["Queen", "Tod", "Kim"]));

템플릿 문자열로 한줄에 처리

indexOf로 배열에서 위치를 찾아냄

다른 사람의 풀이

내 코드가 가장 맘에 든다ㅎㅎ


수박수박수박수박수박수? (Level 1)

문제

water_melon함수는 정수 n을 매개변수로 입력받습니다.

길이가 n이고, 수박수박수…와 같은 패턴을 유지하는 문자열을 리턴하도록 함수를 완성하세요.

예를들어 n이 4이면 ‘수박수박’을 리턴하고 3이라면 ‘수박수’를 리턴하면 됩니다.

풀이

function waterMelon(n){
  let res = '';
  for ( let i = 1; i <= n; i++ ) {
      (i % 2 == 1) ? res += "수" : res += "박"
  }
  return res
}

// 실행을 위한 테스트코드입니다.
console.log("n이 3인 경우: "+ waterMelon(3))
console.log("n이 4인 경우: "+ waterMelon(4))

아까 본 삼항연산자를 이용했지만, for문을 안써도 될 것 같은데..싶지만 썼다.

다른 사람의 풀이

const waterMelon = n => {
    return '수박'.repeat(n/2) + (n%2 === 1 ? '수' : '');
}

// 실행을 위한 테스트코드입니다.
console.log("n이 3인 경우: "+ waterMelon(3))
console.log("n이 4인 경우: "+ waterMelon(4))

repeat 뒤의 숫자가 소수면 버리는것을 이용한 것. 개인적으로 좋은 코드인지는 잘 모르겠다


스트링을 숫자로 바꾸기 (Level 1)

문제

strToInt 메소드는 String형 str을 매개변수로 받습니다.

str을 숫자로 변환한 결과를 반환하도록 strToInt를 완성하세요.

예를들어 str이 “1234”이면 1234를 반환하고, “-1234”이면 -1234를 반환하면 됩니다.

str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

풀이

function strToInt(str){
  return parseInt(str)
}

// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(strToInt("-1234"));

이걸 왜 문제로 낸건지 모르겠다

다른 사람의 풀이

function strToInt(str){
  return str/1
  }


// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(strToInt("-1234"));

문자열에 연산을 하면 숫자형으로 바뀌는것을 이용


역삼각형 출력하기 (Level 1)

문제

printReversedTriangle 메소드는 양의 정수 num을 매개변수로 입력받습니다.

다음을 참고해 *(별)로 높이가 num인 삼각형을 문자열로 리턴하는 printReversedTriangle 메소드를 완성하세요

높이(num)가 3일때 다음과 같은 문자열을 리턴하면 됩니다.

***
**
*

풀이

function printReversedTriangle(num) {
  let result = "";
  for ( let i = num; i > 0; i-- ) {
    for ( let j = 0; j < i; j++ ) {
          result += "*"
    }
    result += "\n"
  }
  return result
}

좀 다른 방법을 떠올리려 했는데 이 방법밖에 생각이 나지 않았다..

매우 안좋은 코드인건 분명하다

다른 사람의 풀이

좋은 방법이 두가지나 있어 둘다 가져왔다.

function printReversedTriangle(num) {
  var result = ''

  while(num>0){result+=Array(num+1).join("*")+'\n';num--}

  return result
}

생각치도 못한 방법이다.

join은 그냥 배열을 문자열로 바꿀때 쓴다고만 생각했는데,

빈 배열을 만들고 그 원소를 *로 잇는다는 생각은 매우 신박하며 응용해보려 해야겠다.

function printReversedTriangle(num) {
  return '*'.repeat(num) + (num && '\n' + printReversedTriangle(num - 1) || '');
}

repeat!! 이 문제에 가장 어울리는 메서드인듯하다. 재귀함수로 반복출력

적재적소에 메서드를 사용할 수 있도록 익숙해져야겠다

+ Recent posts