[20230221_프로그래머스 알고리즘_Lv.1]

YunTrollpark·2023년 2월 21일
0

1. 문자열 다루기 기본

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항
• s는 길이 1 이상, 길이 8 이하인 문자열입니다.
• s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

function solution(s) {
return s.search(/[a-zA-Z]/g) === -1 && (s.length === 4 || s.length === 6) 
}


// 해설
// 1. 정규식 활용 해서 search 메소드를 활용해서 알파벳을 찾음, 알파벳이 없으면 -1을 반환해서 -1이면 true를 반환
// 2. 두번째 조건으로 s의 길이가 4 또는 6인지 판별!
// 3. 위의 조건이 전부 맞을 경우만 true 반환
const str = /^\d{6}$|^\d{4}$/

// 이건 다른분이 사용하신 정규식인데 넘 신기했다... 담에 정규식도 추가로 공부해야지!

2. 부족한 금액 계산하기

문제 설명

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

제한 조건
• 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
• 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
• 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

function solution(price, money, count) {
  let sum = 0
  for(i=1; i<count+1; i++){
    sum += price*i
  }
  return money - sum > 0 ? 0 : -(money-sum)
}
}

// 해설
// 1. sum 선언
// 2. 반복문 돌면서 sum에 가격에 1부터 카운트까지 곱해준 후 그 모든수를 더 함
// 3. return 값으로 money에서 sum을 뺐을때 양수면 0 return 아니면 음수를 양수로 변화한 수 return
  • 가우스 공식이 풀다 보면 자주 보이는데 이것도 찾아 봐야지

3. 행렬의 덧셈

문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건
• 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

const arr1 = [[1,2,4],[2,3,7]]
const arr2 = [[3,4,9],[5,6,8]]

function solution(arr1, arr2) {
  for(i=0;i<arr1.length; i++){
    for(j=0; j<arr1[i].length; j++){
     arr1[i][j] = arr1[i][j] + arr2[i][j]
    }
  }
return arr1
}

// 해설
// 1. 예문을 보면 배열 안에 배열이 있는 구조임, 그래서 반복문 2번 돌아야함
// 2. 첫번째 반복문은 어차피 arr1의 길이와 arr2의 길이가 같아서 arr1의 길이만큼 반복돔
// 예시로 가지고 온건 여기서 2번 반복
// 3. 두번째 반복문은 그렇게 해서 arr1[i]의 길이 만큼 반복을 돔
// 예시로 가지고 온건 여기서 3번 반복돔
// 4. arr1[i][j] 번째는 arr1[i][j] + arr2[i][j] 값을 할당
// 5. 그래서 새로운 값이 할당된 arr1을 return

4. 직사각형 별찍기

문제 설명

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

제한 조건
• n과 m은 각각 1000 이하인 자연수입니다.

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0])
    const b = Number(n[1]);
    const first = '*'.repeat(a) + '\n'
const second = first.repeat(b)
console.log(second.replace(/\\n/gi,'</br>'))

});

// 해설
// 1. n, a, b는 프로그래머스에서 예시로 준거
// 2. first는 '*'문자를 a번 만큼 반복후 + \n을 해줌
// 3. second는 first를 b번만큼 반복
// 4. 최종값은 second 문자열에 replace 메서드를 활용해서 /n을 </br>줄바꿈으로 변경해줌

오늘은 첫 번째 문제에서 길이도 프로그래머스에서 이미 조건 처리 되서 나온게 아니라 내가 조건 처리 해줘야 하는거라서 그거 때문에 좀 헤맨거 말고는 어제보다 무난하게 풀었다!
오늘은 유독 정규 표현식을 많이 사용했다... 주말에 정규식 쓰는 규칙 정리해서 올려야 겠다! 그거랑 가우스 공식도!
오늘도 힌트는 안보고 풀었다 키킼! 빠이탱이다

profile
코딩으로 세상에 이야기하는 개발자

0개의 댓글