※※하기 답안은 제가 작성 한 것으로, 더 나은 답안이 있을 수 있는 점 참고 부탁드립니다※※

 

- 문제 URL

 

코딩테스트 연습 - 자릿수 더하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

- 문제 설명 

 

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

 

- 입출력 예

 

N answer
123 6
987 24

 

 

- 문제 풀이

 

두 가지 방법으로 해당 문제에 접근하였습니다.

 

1. 숫자·문자변환을 통한 방법

2. Math.trunc()와 나머지연산을 통한 방법

 

입니다.

 

 

- 유의 사항

 

특이사항 없습니다.

 

 

- 작성 코드

 

1.

 

function solution(n) {
  let sum = 0;
  // 자릿수를 담을 변수 선언
 
  let s = String(n);
  //받은 숫자를 문자열로 변환
 
  for (let i = 0; i < s.length; i++) {
    sum = sum + Number(s[i]);
    //문자열의 각 자릿수를 다시 숫자로 변환하여 누적
  }
 
  return sum;
  //누적 값 출력
}
cs

 

 

2.

 

function solution(n) {
  let sum = 0;
  // 자릿수를 담을 변수 선언
 
  while (n > 0) {
    //while 문을 통해 반복
 
    sum += n % 10;
    //입력받은 숫자를 10으로 나눴을 때의 나머지를 sum에 누적
 
    n = Math.trunc(n / 10);
    /*Math.trunc()을 통해 입력받은 숫자의 정수부분만을 반환,
    10으로 나눠줌으로써 자릿수가 하나씩 줄어듦*/
  }
 
  return sum;
  //누적 값 출력
}
cs

 

 

 

- 결과

 

조건대로 결과값이 출력됩니다.

 

※※하기 답안은 제가 작성 한 것으로, 더 나은 답안이 있을 수 있는 점 참고 부탁드립니다※※

 

- 문제 URL

 

코딩테스트 연습 - 문자열 내 p와 y의 개수 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

- 문제 설명 

 

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

 

 

- 입출력 예

 

s answer
"pPoooyY" true
"Pyy" false

 

 

- 문제 풀이

 

세 가지 방법으로 해당 문제에 접근하였습니다.

 

1. p와 y 소문자, 대문자갯수 각각 하나의 변수에 담고 크기 비교

2. 받은 문자열을 모두 소문자로 변환, 대소문자에 관계없이 갯수만 세어 크기 비교

3. 문자열 속 문자를 세는 함수를 먼저 생성, 문자열을 모두 소문자로 변환하여 위 함수에 입력하여 개수를 비교

 

문자열 속 문자를 세는 함수를 별도로 선언하여,

함수의 재사용성을 높인 3번이 가장 효율적인 방법인 것 같습니다.

 

 

- 유의 사항

 

특이사항 없습니다.

 

 

- 작성 코드

 

1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(s) {
  let sumOfp = '';
  let sumOfy = '';
  //p와 y의 합계를 담을 빈 변수 선언
 
  for (let i = 0; i < s.length; i++) {
    if (s[i] === 'p' || s[i] === 'P') {
      sumOfp = sumOfp + s[i];
      // 대문자, 소문자 관계없이 p를 셈
    
    } else if (s[i] === 'y' || s[i] === 'Y') {
      sumOfy = sumOfy + s[i];
      // 대문자, 소문자 관계없이 y를 셈
    }
  }
 
  return sumOfp.length === sumOfy.length;
  // p의 개수를 담은 변수와 y의 개수를 담은 변수의 길이를 비교하여 출력
}
cs

 

 

2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function solution(s) {
  s = s.toLowerCase();
    /*입력받은 문자열을 모두 소문자로 변환
    (대소문자 관계없이 문자만 셀 수 있도록 준비)*/ 
 
  let sumOfp = 0;
  let sumOfy = 0;
  //p와 y의 합계를 담을 빈 변수 선언
 
  for (let i = 0; i < s.length; i++) {
    if (s[i] === 'p') {
      sumOfp += 1;
    } // p의 개수를 셈
 
    if (s[i] === 'y') {
      sumOfy += 1;
    } // y의 개수를 셈
  }
 
  return sumOfp === sumOfy;
  //p와 y수의 합이 같은지 비교하여 출력
}
cs

 

 

3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function counter(s, c) {
  let result = 0;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === c) {
      result += 1;
    }
  }
  return result;
//문자열에서 특정 문자를 세는 함수를 생성//
 
function solution(s) {
  s = s.toLowerCase();
  /*입력받은 문자열을 모두 소문자로 변환
    (대소문자 관계없이 문자만 셀 수 있도록 준비)*/
 
  let sumOfp = counter(s, 'p');
  let sumOfy = counter(s, 'y');
  /*12번 줄에서 모든 문자를 소문자로 바꿨으므로,
    두 번째 매개변수로 소문자만 입력해도 무관*/
 
  console.log(sumOfp);
  console.log(sumOfy);
 
  return sumOfp === sumOfy;
  //p와 y개수의 합이 같은지 비교하여 출력
}
cs

 

 

- 결과

 

조건대로 결과값이 출력됩니다.

함수의 재활용성에 관해서도 고려할 수 있도록 해야겠습니다.

※※하기 답안은 제가 작성 한 것으로, 더 나은 답안이 있을 수 있는 점 참고 부탁드립니다※※

 

- 문제 URL

 

코딩테스트 연습 - 약수의 합 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

- 문제 설명 

 

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

 

 

- 입출력 예

 

n return
12 28
5 6

 

 

- 문제 풀이

 

1. 입력값의 약수들을 담을 빈 배열을 선언합니다.

2. 약수들을 더해 줄 변수를 선언합니다.

3. 입력값의 약수를 구하고 빈 배열에 담습니다.

4. 배열에 담긴 수 들을 더합니다.

5. 합산 된 수를 출력합니다.

 

 

- 유의 사항

 

특이사항 없습니다.

 

 

- 작성 코드

 

for문과 arrow function을 활용하여 2가지 표현으로 구현해보았습니다.

 

1. for 문 활용

function solution(n) {
  let arr = [];
  let result = 0;
  for (let i = 0; i <= n; i++) {
    if (n % i === 0) {
      arr.push(i);
    }
  }
 
  for (let i = 0; i < arr.length; i++) {
    sum = arr[i] + sum;
  } // for문으로 배열을 순환하며 값을 누적
 
  return result;
}
cs

 

2. arrow function 활용

function solution(n) {
  let arr = [];
  let result = 0;
  for (let i = 0; i <= n; i++) {
    if (n % i === 0) {
      arr.push(i);
    }
  }
 
  arr.forEach((n) => {
    result = result + n;
  });  // arrow functionfor문으로 배열을 순환하며 값을 누적
 
  return result;
}
cs

 

 

- 결과

 

조건대로 결과값이 출력됩니다.

※※하기 답안은 제가 작성 한 것으로, 더 나은 답안이 있을 수 있는 점 참고 부탁드립니다※※

 

- 문제 URL

 

코딩테스트 연습 - 콜라츠 추측 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

- 문제 설명 

 

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다. 
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

 

 

- 입출력 예

 

input result
6 8
16 4
626331 -1

 

 

- 문제 풀이

 

1. 입력값의 홀짝여부에 따른 연산을 지정합니다.

2. 연산의 지정횟수(500회)를 초과 할 경우의 반환값을 설정합니다.

3. 횟수를 출력합니다.

 

 

- 유의 사항

 

1. i의 증감 후 연산인지, 증감 전 연산인지 정확히 파악 후 i를 출력합니다.

2. 연산 초과 횟수에 따른 i 반환 값에 유의합니다.

 

 

- 작성 코드

 

function solution(num) {
  let answer = 1// i를 담을 변수 answer 선언 및 1로 할당
 
  for (let i = 1; i <= 500; i++) {
 
    if (num === 1) {
      break// num이 1이되면 for 문을 멈춤
    }
 
    if (num % 2 === 0) {
      num = num / 2//num이 짝수 일 경우 2로 나눔
    } else {
      num = num * 3 + 1//num이 홀수 일 경우 3을 곱해주고 1을 더함
    }
    answer = i;
 
    if (answer === 500) {
      answer = -1// 연산이 500번에 다다를 경우 answer를 -1로 할당
    }
 
  }
  return answer;
}
cs

 

 

- 결과

 

조건대로 결과값이 출력됩니다.

※※하기 답안은 제가 작성 한 것으로, 더 나은 답안이 있을 수 있는 점 참고 부탁드립니다※※

 

- 문제 URL

 

코딩테스트 연습 - 서울에서 김서방 찾기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

- 문제 설명 

 

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. 

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

 

 

- 입출력 예

 

seoul return
["Jane", "Kim"] "김서방은 1에 있다"

 

 

- 문제 풀이

 

1. for 문을 작성하여 "Kim"의 index를 확인합니다.

2. 확인 된 index를 answer에 포함하여 문장을 작성하고 출력합니다.

 

 

- 유의 사항

 

백틱기호를 통해 변수를 지정할 시,

문자열 전체를 ``로 감싸고, 변수에만 ${}를 사용하는 것에 유념합니다.

 

 

- 작성 코드

 

function solution(seoul) {
  let answer = '';
  for (let i = 0; i < seoul.length; i++) {
    if (seoul[i] === 'Kim') {
      answer = `김서방은 ${i}에 있다`;
    }
  }
  return answer;
}
cs

 

 

- 결과

 

조건대로 결과값이 출력됩니다.

※※하기 답안은 제가 작성 한 것으로, 더 나은 답안이 있을 수 있는 점 참고 부탁드립니다※※

 

- 문제 URL

 

코딩테스트 연습 - 수박수박수박수박수박수? | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

- 문제 설명 

 

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

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

 

 

- 문제 풀이

 

1. 홀 수 자리에는 '수'를 입력하고, 짝수 자리에는 '박'을 입력합니다.

2. '수'와, '박'을 입력할 때 마다 i를 증가시키며 문자열을 answer에 담습니다.

3. 완성 된 answer를 반환합니다.

 

 

- 유의 사항

 

1. '수'와 '박'이 입력되지 않도록 조건을 정확히 지정합니다.

('박수박수'와 같이 출력되지 않도록 유념)

2. answer가 완성되는 지점을 정확히 파악 후 answer를 반환합니다.

 

 

- 작성 코드

 

function solution(n) {
  let answer = '';
  for (let i = 1; i <= n; i++) {
    if (i % 2 === 1) {
      answer = answer + '수';
    } else {
      answer = answer + '박';
    }
  }
  return answer;
}
cs

 

 

- 결과

 

조건대로 결과값이 출력됩니다.

※※하기 답안은 제가 작성 한 것으로, 더 나은 답안이 있을 수 있는 점 참고 부탁드립니다※※

 

- 문제 URL

 

코딩테스트 연습 - 짝수와 홀수 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

- 문제 설명 

 

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성합니다.

 

 

- 문제 풀이

 

입력값의 홀짝을 판별하기 위해,

입력값을 2로 나눴을 때의 나머지가 1인지 0인지 확인 합니다.

(나머지가 0이면 짝수, 나머지가 1이면 홀수)

 

해당 값에 따라 변수 answer 를 대입합니다.

 

 

- 유의 사항

 

백틱기호를 통해 변수를 지정할 시,

문자열 전체를 ``로 감싸고, 변수에만 ${}를 사용하는 것에 유념합니다.

 

 

- 작성 코드

 

function solution(num) {
    var answer = '';
    if ( num % 2 === 0) {
        answer = 'Even'
    } else if (num % 1 === 0) {
        answer = 'Odd'
    }
    return answer;
}
cs

 

 

- 결과

 

조건대로 결과값이 출력됩니다.

+ Recent posts