비전공자 코딩 배우기 _5주차 알고리즘 문제풀이

Jinny·2021년 6월 11일
0

코딩테스트

목록 보기
2/3
post-thumbnail

📝 알고리즘 문제풀이

미래에 취직을 하게 된다면 코딩테스트를 통해 내가 얼마나 코딩에 대해 이해하고 있는지 시험을 본다고 하여 알고리즘 문제풀이를 시작해보았다.

프로그래머스 라는 사이트에서 자바스크립트를 지원해주고 있어서 도전해보았다.


☝🏻 자릿수 더하기

문제 설명

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

제한사항

  • N의 범위 : 100,000,000 이하의 자연수

입출력 예

입출력 예 설명

입출력 예 #1 문제의 예시와 같습니다.

입출력 예 #2 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

나의 풀이

function solution(n) {
  var answer = 0;

	// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
  console.log('Hello Javascript')
  return answer;
}

라고 기본적으로 함수 형식이 들어있고 내용을 채우면 된다.

먼저 자릿수를 다 더하려면 for문을 이용하여 한 자리씩 탐색하고 그 값들을 모두 answer에 담아주는 방법을 생각해 보았다.

function solution(n) {
  var answer = 0;
  let str = String(n) // 먼저 for문을 사용하기 
  		      // 위해 숫자를 문자열로 바꾸어 주었다.

  for(let i = 0; i < str.length; i++) {
	answer += parseInt(str[i])
  }
	//for문을 사용하여 한 자리씩 탐색하고, 
	// 자릿수를 문자열에서 숫자로 parseInt를 
  	// 사용해서 바꿔준 후 answer에 담았다.

	// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
  console.log('Hello Javascript')
  return answer;
}

123을 예로 들면,

let str = String(n)

"123"

for(let i = 0; i < str.length; i++) {
  answer += parseInt(str[i])
}

0번째 Index부터 '123'의 길이인 3번째 전까지 반복문이 실행된다.

0번째 자리인 "1"을 숫자로 담아준다.
answer는 1이 되었다.

1번째 자리인 "2"를 숫자로 담아준다.
answer에 1이 있었는데, 1 + parseInt(str[1])를 하여 3이 되었다.

2번째 자리인 "3"을 숫자로 담아준다.
answer에 3이 있었는데, 3 + parseInt(str[2])를 하여 6이 되었다.


✌🏻 핸드폰 번호 가리기

문제 설명

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 '*'으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

제한 조건

  • s는 길이 4 이상, 20이하인 문자열입니다.

입출력 예

나의 풀이

function solution(phone_number) {
  var answer = '';
  return answer;
}

이 문제를 보면서 '뒤에 4자리빼고 나머지는 별모양으로 바꿔주면 되겠구나'생각이 들었다.

function solution(phone_number) {
  var answer = '';
  for(let i = 0; i < phone_number.length; i++) { // 먼저 for문을 이용해 한 자리씩 탐색한다.
	if(i < phone_number.length - 4) { // 만약 총 길이의 4를 뺀것보다 작으면
	  answer += '*';  // *로 바꿔준다.
      } else {
	answer += phone_number[i]; // 아니면 그냥 그 자리에 해당하는 문자열을 담아준다.
      }
  }
  return answer;
}

027778888을 예로 들면,

for(let i = 0; i < phone_number.length; i++) {
	if(i < phone_number.length - 4) {
	answer += '*';
}

0번째 Index부터 '027778888'의 길이인 9번째 전까지 반복문이 실행된다.

만약 9-4 = 5번째 보다 i가 작으면, 별 모양으로 바꿔준다
'02777'가 0~4번째 Index라서 if문에 해당되어 별 모양으로 바뀌었다.

else {
  answer += phone_number[i];
}

if문에 해당되지 않는 '8888'은 5~8번째 Index라서 else에 해당되어 answer += phone_number[i] 가 실행되고, 문자열이라서 '8'+'8'+'8'+'8' = '8888'로 answer에 담겼다.


간단한거지만 처음 문제 풀었을때는 '이걸 어떻게 해'하면서 당황했었다..

내가 문제를 풀면 다른 사람의 풀이를 볼 수가 있는데, 정말 한 줄로 끝내는 사람들도 있고 신박한 방법으로 푸는 사람들도 많다.

내가 아직 모르는 함수를 이용해서 푸는 사람들도 많고.. 풀이 방법은 정말 다양한 것 같다.
앞으로 더 험난한 문제들이 많은데 매일 꾸준히 알고리즘 문제를 풀면서 익숙해지는 방법밖에는 없다.

profile
코린이

0개의 댓글