[JS]_daily coding #11

seul·2022년 6월 8일
0

Algorithm

목록 보기
10/31

코플릿 데일리코딩 10번 insertDash


수도코드

  1. 문자열을 입력받아 원소를 한개씩 쪼개서 배열에 담아준다.
  2. 결과 배열을 선언하고 문자열의 첫번째 원소를 담아준다.
  3. 반복문을 순회한다.
  4. 결과 배열에 문자열의 모든 인덱스 값을 담아준다.
  5. 이전 인덱스 값과 현재 인덱스의 값이 모두 홀수인 경우(조건문)에만 -를 추가해준다
  6. 결과 배열의 모든 요소를 연결한 문자열을 리턴한다.

첫번째 코드

문자열도 배열처럼 인덱스를 이용해서 접근할 수 있지만 각 원소는 숫자타입이 아닌 문자타입이기때문에 입력받은 문자열을 배열로 바꿔줬다.

function insertDash(str) {
  let arr = str.split('');
  let result = []
  result.push(str[0])
  for (let i = 1; i < arr.length; i++) {
    if (arr[i-1] %2 && arr[i] %2) {
      result.push('-')
    }
    result.push(arr[i])
  }
  return result.join('') 
}

두번째 코드

반복문을 순회하고 조건에 맞는 경우에 -를 추가하는 같은 논리지만, 문자열을 배열로 변형하는 과정을 거치지 않고 Number()를 이용해서 문자열을 숫자타입으로 변환해서 풀었다.

function insertDash(str) {
  let result = str[0]
  for (let i = 1; i < str.length; i++) {
    if(Number(str[i-1]) % 2 && Number(str[i]) % 2) {
      result += '-'
    }
    result += str[i]
  }
  return result 
}

프로그래머스 Lv.1_직사각형 별찍기

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

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


첫번째 코드

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" "); // 입력받은 숫자(data)를 배열로 변경 
    const a = Number(n[0]), b = Number(n[1]); // a는 한줄에 들어갈 별의 갯수, b는 출력할 줄 수 
    for (let i = 0 ; i < b ; i++) { // 반복문 순회- 반복문 안에 선언한 i-b줄 만큼 반복 
        let result = ''             //출력할 문자열을 담아줄 변수 선언 
        for(let j = 0; j < a; j++) { // 반복문 순회- j - 한 줄에 a만큼 별을 반복한다
            result += '*'      //출력할 변수에 별을 담는다. 
        }
        console.log(result)  //결과 출력 
    }
});

두번째 코드

repeat() 메소드를 사용해서 a만큼 반복해서 넣은 한 줄을 먼저 만들고, 이걸 반복문을 통해 b만큼 반복한다.

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" ");
    const a = Number(n[0]), b = Number(n[1]);
    const row = '*'.repeat(a)
    for (let i = 0; i < b; i++) {
        console.log(row)
    } 
});
profile
Connecting dots

0개의 댓글