2022-05-07(토) TIL

황인호·2022년 6월 7일
0

TIL 모음

목록 보기
45/119
  • 오늘해야할일들

api client tool로 다찍어보기 30분 정도 (완료)

nodemailer 활용하기 (못함...)

알고리즘 1문제 풀기 (진행예정)

Node.js로 백준 문제 풀이할때 유의할 점들

//1. 하나의 값을 입력받을때
const input = require('fs').readFileSync('/dev/stdin').toString().trim();

//2. 공백으로 구분된 한 줄의 값들을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(' ');

//3. 여러 줄의 값들을 입력받을 때
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

// 4. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄에 공백으로 구분된 n개의 값들을 입력받을 때
const [n, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);

// 5. 첫 번째 줄에 자연수 n을 입력받고, 그 다음줄부터 n개의 줄에 걸쳐 한 줄에 하나의 값을 입력받을 때
const [n, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');

// 6. 하나의 값 또는 공백으로 구분된 여러 값들을 여러 줄에 걸쳐 뒤죽박죽 섞여서 입력받을 때
// ex) n 입력 - 공백으로 구분된 n개의 값 입력 - m 입력 - 여러 줄에 걸쳐 m개의 값 입력
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s/);
const n = input[0];
const n_arr = input.slice(1, n+1);
const [m, ...m_arr] = input.slice(n+1);

// 2~6에서 입력받는 값들을 모두 String에서 Number로 바꾸려면 split()뒤에 .map(v => +v)를 추가

진짜 궁금했던 부분

Q. trim( )은 왜 쓰는 건가요??

⇒ 일부 입력값의 마지막에 개행문자가 포함된 경우가 종종있다.

이런 경우 split(”\n”)할 경우 공백문자 하나를 더 갖는 배열을 반환한다. 이를 방지하기 위해서 trim()을 사용한다.

예시 코드
const text = '가\n나\n다\n';
console.log(text.split('\n')); // ['가', '나', '다', '']
console.log(text.trim().split('\n')); // ['가', '나', '다']

Mac OpenSSL 설치 방법(링크 참고 바람)

https://freestrokes.tistory.com/154

  • 프로그래머스 알고리즘 문제풀이(콜라츠 추측) 문제설명 ⇒1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. `1-1. 입력된 수가 짝수라면 2로 나눕니다.
    1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
    1. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.`

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

      제한 사항

    • 입력된 수, num은 1 이상 8000000 미만인 정수입니다.

      입출력 예

      제목 없음

      입출력 예 설명

      입출력 예 #1문제의 설명과 같습니다.

      입출력 예 #216 -> 8 -> 4 -> 2 -> 1 이되어 총 4번만에 1이 됩니다.

      입출력 예 #3626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야합니다.

      function solution(num) {
      		let answer = 0
      	//최대 500번 반복한다고하였으니 500번 반복실행시킨다.
      		for (let i = 0; i < 500; i ++) {
      			if (num !== 1) { //만약 num이 1이 아닐경우에는
      				//짝수는 2를 나누고 홀수는 3을 곱하고 1을 더한다.
      				num = num % 2 === 0 ? num / 2 : num * 3 + 1
      			} else { // num이 1인 경우에는
      				// 몇번이나 반복 실행하였는지 출력한다.
      				return answer = i
      			}
      		}
      	// 500번을 반복하였는데도 1이 나오지 않는다면 -1을 출력한다.
      	return answer = -1;
      }
function solution(num) {
		let answer = 0
	//최대 500번 반복한다고하였으니 500번 반복실행시킨다.
		for (let i = 0; i < 500; i ++) {
			if (num !== 1) { //만약 num이 1이 아닐경우에는
				//짝수는 2를 나누고 홀수는 3을 곱하고 1을 더한다.
				num = num % 2 === 0 ? num / 2 : num * 3 + 1
			} else { // num이 1인 경우에는
				// 몇번이나 반복 실행하였는지 출력한다.
				return answer = i
			}
		}
	// 500번을 반복하였는데도 1이 나오지 않는다면 -1을 출력한다.
	return answer = -1;
}
profile
성장중인 백엔드 개발자!!

0개의 댓글