[백준] 3단계(반복문)

JH Cho·2022년 8월 2일
0

알고리즘

목록 보기
8/12

3-1(2739) 구구단

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();

let value = input[0];

for (let i = 1; i <= 9; i++) {
  console.log(`${value} * ${i} = ${value * i}`);
}

3-2(10950)


const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
// console.log(input); ["5", "1 1", "2 3", "3 4", "9 8", "5 2"];

for (let i = 1; i <= input[0]; i++) {
  let numbers = input[i].split(" ").map((item) => +item);
  // console.log(numbers); [ 1, 1 ]  [2, 3][3, 4][9, 8][5, 2];
  console.log(numbers[0] + numbers[1]);
  // 2  5  7  17  7
}

3-3(8393) 합

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();

input = Number(input);
//console.log(input); 3

let sum = 0;

for (let i = 1; i <= input[0]; i++) {
  sum += i;
}
console.log(sum);
----------결과는 뜸 but 실패-------
  
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();

input = Number(input);
//console.log(input); 3

let sum = 0;

for (let i = 1; i <= input; i++) {
  sum += i;
}
console.log(sum);
//인풋을 숫자로 만들어주니 해결 됨.

3-4(15552)

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
//console.log(input); ["5", "1 1", "12 34", "5 500", "40 60", "1000 1000"];

let addCount = +input[0];
// console.log(addCount); 5

for (let i = 1; i <= addCount; i++) {
  let addValue = input[i].split(" ");
  let result = Number(addValue[0]) + Number(addValue[1]);
  console.log(result);
}


시간초과 걸림(반복문 내에 콘솔로그로 계속 출력하면 생기는 문제)
밖으로 빼주고 한번에 나올 수 있게 해보자.
-----------수정---------
  const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
//console.log(input); ["5", "1 1", "12 34", "5 500", "40 60", "1000 1000"];

let addCount = +input[0];
// console.log(addCount); 5
let result = ""; //공백 값을 선언해주고

for (let i = 1; i <= addCount; i++) {
  let addValue = input[i].split(" ");
  //result += Number(addValue[0]) + Number(addValue[1]); //result에 결과를 계속 덧 붙여주게 됨. 결과 2465051002000
  result += Number(addValue[0]) + Number(addValue[1]) + "\n"; //백슬레쉬 줄바꿈을 이용해 각 줄마다 출력되게
}

console.log(result);
  • 내 힘 만으로 풀지 못함. 2회차 풀 때는 꼭 잘 풀기를.

3-5(2741) 5찍기

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();

let result = "";

for (let i = 1; i <= input; i++) {
  result += i + "\n";
}
console.log(result);

처음에 input 값을 숫자로 변환하여 선언 후 그 값을 넣었는데
실패가 떠서 당황.

3-6(2742) 기찍5

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();
input = +input;
let result = "";

for (let i = input; i > 0; i--) {
  result += i + "\n";
}
console.log(result);

처음엔 input을 숫자 변환 안하고 넣었음.
출력 형식이 잘못됐다고 떠서
인풋을 숫자로 선언해줌. 해결 성공 !

3-7(11021) A + B - 7

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
// console.log(input);
let countNum = +input[0]; //countNum == 5

let result = "";

for (let i = 1; i <= countNum; i++) {
  let number = input[i].split(" ").map((item) => +item);
  result += `Case #${i}: ` + (number[0] + number[1]) + "\n";
}
console.log(result);

중간에 좀 머리가 아팠는데 알고보니 간단한 문제였다.

3-8(11022) A + B - 8

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
let countNum = +input[0];
let result = "";
for (let i = 1; i <= countNum; i++) {
  let number = input[i].split(" ").map((item) => +item);
  result +=
    `Case #${i}: ${number[0]} + ${number[1]} = ` +
    (number[0] + number[1]) +
    "\n";
}
console.log(result);

걍 2-7에서 출력 수정만 하면 됨.

3-9(2438) 별찍기

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();

//input = +input[0]; 

let star = "";

for (let i = 1; i <= input; i++) {
  star += "*";
  console.log(star);
}

3-10(

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();
let num = input[0];
let star = "";
let blank = "";

for (let i = 1; i <= num; i++) {
  star += "*";
  for (let j = 0; j < num - i; j++) {
    blank += " ";
  }
  console.log(blank + star);
  blank = ""; // 초기화해줌 초기화 안해주면 스타처럼 공백도 쌓여
  // *
  //  **
  //    ***
  //     ****
  //     ***** 이렇게 됨
}

------틀렸다라네--------if문 활용 풀이----

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();
let num = Number(input);

for (let i = 0; i < num; i++) { 
  let star = "";
                                       //i = 0 1 2 3 4 
  for (let j = num - 1; j >= 0; j--) { //j = 4 3 2 1 0
    star += j <= i ? "*" : " "; // i가 0이면 j가 4 3 2 1일 때는 j>i니까 공백 4개에 별 한 개
                               // i가 4면 모두 i>=j니까 별만 추가.
  }

  console.log(star);
}
---------join메서드 활용---------------
  const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();
let num = Number(input);

let star = new Array(num).fill(" ");
//length가 num(5)인 빈 객체를 생성하고 빈 공간에 공백을 채워넣는다.
console.log(star);
[" ", " ", " ", " ", " "];
for (let i = num - 1; i >= 0; i--) {
  //배열의 마지막 인덱스부터 시작해서 star를 하나씩 채워넣음.
  star[i] = "*";

  console.log(star.join(""));
  //join('') 공백없이 배열의 요소들을 공백없이 문자열로 만들어 합쳐줌.
} // 얘도 결과 제대로 나오는데 왜 틀렸다는지 모르겠다.

3-11(10871)

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
/*console.log(input);
console.log(input[1]);*/

let compareNum = input[0].split(" ").map((item) => +item);
/*console.log(compareNum);
[10, 5];*/
let num = compareNum[0]; //10
let compare = compareNum[1]; // 5

let numbers = input[1].split(" ").map((item) => +item);
/*console.log(numbers);
[1, 10, 4, 9, 2, 3, 8, 5, 7, 6];*/

let result = "";

for (let i = 0; i < numbers.length; i++) {
  if (numbers[i] < compare) {
    result += numbers[i] + " ";
  }
}
console.log(result); //1 4 2 3 
------ 맞았지만 깔끔하게 짜고 싶다.----

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
// console.log(input);

let compareNum = input[0].split(" ").map((item) => +item);
// console.log(compareNum); [10, 5];

let numbers = input[1].split(" ").map((item) => +item);
//console.log(numbers);[1, 10, 4, 9, 2, 3, 8, 5, 7, 6];

let result = "";

for (let i = 0; i < compareNum[0]; i++) {
  if (numbers[i] < compareNum[1]) result += numbers[i] + " "; //return 한줄이라 줄이고 중괄호 생략 가능.
}
console.log(result); //1 4 2 3

3-12(10952)

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
// console.log(input);
// ["1 1", "2 3", "3 4", "9 8", "5 2", "0 0"];

// let nums = input[0].split(" ").map((value) => +value);
// console.log(nums);

let arr = [];
for (let i = 0; i < input.length; i++) {
  arr.push(input[i].split(" ").map((value) => +value));
}

// console.log(arr); //[ [ 1, 1 ], [ 2, 3 ], [ 3, 4 ], [ 9, 8 ], [ 5, 2 ], [ 0, 0 ] ]

let result = "";

for (let j = 0; j < arr.length; j++) {
  result += arr[j][0] + arr[j][1] + "\n";
}
console.log(result);

/* 결과
2
5
7
17
7
0
*/
0이 안나오게 하려면 어떻게 해야할까.
---------if 문을 사용
or (let j = 0; j < arr.length; j++) {
  if (arr[j][0] + arr[j][1] == 0) {
    break;
  } else {
    result += arr[j][0] + arr[j][1] + "\n";
  }
} //결과 값이 0이 나오면 break를 걸고 
//아니라면 result에 반환하도록 해봤다.
  • 훨씬 간단하고 짧은 다른 분의 풀이
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
// console.log(input);
// ["1 1", "2 3", "3 4", "9 8", "5 2", "0 0"];

// let nums = input[0].split(" ").map((value) => +value);
// console.log(nums);

for (let i = 0; i < input.length; i++) {
  let A = Number(input[i].split(" ")[0]);
  let B = Number(input[i].split(" ")[1]);
  let result = A + B;

  if (result === 0) {
    break;
  } else {
    console.log(result);
  }
}

3-13(10951)

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
//console.log(input);
// ["1 1", "2 3", "3 4", "9 8", "5 2"];

// A = input[0].split(" ").map((item) => +item)[0];
// console.log(A);  결과 1

let result = "";

for (let i = 0; i < input.length; i++) {
  let A = Number(input[i].split(" ")[0]);
  let B = Number(input[i].split(" ")[1]);
  result += A + B + "\n";
}

console.log(result);

----값은 제대로 나오는데 틀렸다고 나옴---
  
  const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString().split("\n");
//console.log(input);
// ["1 1", "2 3", "3 4", "9 8", "5 2"];

// A = input[0].split(" ").map((item) => +item)[0];
// console.log(A);  결과 1

for (let i = 0; i < input.length; i++) {
  let A = Number(input[i].split(" ")[0]);
  let B = Number(input[i].split(" ")[1]);
  console.log(A + B);
}
------이것도 아니고 -----
  

3-14(1110)

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";

let input = fs.readFileSync(filePath).toString();
let initNum = Number(input); //초기 숫자 고정!
let count = 0; // 0부터 카운트
//input 값 26으로 설명 
while (true) {
  let sum = Math.floor(input / 10) + (input % 10); // 2 + 6 = 8
  //인풋을 10으로 나눠서 나온 정수와 10으로 나눈 나머지를 더하면 = 8
  input = (input % 10) * 10 + (sum % 10);
  // 2 +      "6" =              "8"    68이 다음 input으로 지정
  count++;
  if (initNum === input) break; //  26 != 68이니 돌아가서 반복. and count 는 +1;
}
console.log(count);

이해하면 쉬운데 처음 보면 막막하다.

profile
주먹구구식은 버리고 Why & How를 고민하며 프로그래밍 하는 개발자가 되자!

0개의 댓글