예전에 풀었던 파이썬 코드를 참고하면서 풀었다.
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
// [2, 2]
const a = Number(n[0]), b = Number(n[1]);
// 각 item 분리하여 숫자로 표현, "2, 2"
for (i=0;i<b;i++){
// 바깥쪽부터 돌기
let star = ""
// *이 들어갈 값 먼저 지정
for(j=0;j<a;j++){
// 안쪽 루프
star += "*"
// 들어갈 값 지정
}
console.log(star)
// 출력
}
});
function solution(num) {
//num을 매개변수로 받는 solution 함수
var answer = '';
if (num % 2 === 0){
answer = "Even"
// num의 나머지가 0이면 짝수
}else{
answer = "Odd"
// num의 나머지가 1이면 홀수
}
return answer;
}
function solution(s) {
var answer = '';
let newS = Array.from(s)
// 먼저 입력된 s 를 배열로 변경
let first = newS.indexOf(newS[0]);
// 첫번째 배열의 인덱스 넘버 = 0
let last = newS.length -1;
// 마지막 배열의 인덱스 넘버
//첫 인덱스 + 마지막 인덱스의 반값이 가운데 이므로 구했음.
if (newS.length % 2 === 1) {
// 나머지가 홀수, 즉 배열이 홀수개일 때 하나만 출력
answer = newS[(first + last) / 2]
}else{
answer = ([newS[(first + last) -2], newS[(first + last)-1]]).join("")
// 짝수 개일 때, 두 글자가 나와야 하므로 인덱스 게산하여 조인으로 문자열 만들기
}
return answer;
}
짝수인 경우 / 홀수인 경우가 반환되는 값이 다름(if) -> 자바스크립트 문자열 길이 체크하기
function solution(s) {
var answer = '';
if(s.length % 2 === 0){
const firstIndex = s.length/2 -1;
const secondIndex = s.length/2;
const firstWord = s[firstIndex]
const secondWord = s[secondIndex]
answer = firstWord + secondWord
// 짝수일 때
}else{
const index = Math.floor(s.length/2)
const word = s[index]
answer = word
// 홀수일 때
}
return answer;
}
너무 복잡하게 생각했다. 인덱스로만으로도 간단히 풀 수 있는 문제였다.
function solution(a, b) {
var answer = 0;
if (a > b){
// a가 b보다 크다면
let newArray = Array(a - b + 1).fill().map((d, i) => i + b);
// 배열로 먼저 만들어준다. 두 수 빼기 1을 해야 전체 수가 나오고 이를 fill로 채운 뒤 map해준 화살표 함수로 값을 지정해준다. 파이썬에 range(b, a)와 유사
for (let i=0;i<newArray.length;i++){
answer += newArray[i]
} // 반복문 이용하여 모두 더한다. sum 함수가 있으면 편하게 할 수 있으나 js에는 없으니 이걸 사용한다.
}else if (a === b){
return a
// 값이 같으면 한 값만 리턴한다. a건 b건 상관 없다.
}else{
let newArray = Array(b - a + 1).fill().map((d, i) => i + a);
// 위와 동일
for (let i=0;i<newArray.length;i++){
answer += newArray[i]
}
}
return answer;
}
function solution(s) {
var answer = 0;
answer = Number(s)
// Number : Number 는 37이나 -9.25와 같은 숫자를 표현하고 다룰 때 사용하는 원시 래퍼 객체입니다.(by MDN)
return answer;
}
function solution(numbers) {
var answer = 0;
// 초기값 0으로 세팅
let originArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// 먼저 원래 배열 설정. 0~9까지라고 했으니 이렇게 설정
let newArray = originArray.filter(x => !numbers.includes(x))
// 차집합 구하기 : 원래 배열에서 필터를 건 후 numbers에서 includes된 건 !하기
for (let i = 0; i < newArray.length; i++){
answer += newArray[i]
}
// 배열의 합 구하기
return answer;
}
function solution(absolutes, signs) {
var answer = 0;
// answer값 초기화
// 먼저 true, false값을 1, -1로 바꿔준느 것이 중요하다.
for (let i = 0; i<signs.length; i++){
if(signs[i] === true) {
signs[i] = 1
}else {
signs[i] = -1
}
}
// 바꿔준 다음 이를 array의 item끼리 곱해준다. 이후 곱셈값을 바로 더해준다.
for (let j = 0; j < absolutes.length; j++){
answer += absolutes[j] * signs[j]
}
return answer;
}
function solution(arr) {
var answer = 0;
temp = 0;
// 임시의 합 값 temp로 고정
for (let i = 0; i < arr.length; i++){
temp += arr[i]
// item의 합을 구함
answer = temp / arr.length
// 이를 리스트의 length로 나눔
}
return answer;
}
function solution(phone_number) {
var answer = '';
let temp_reverse = Array.from(phone_number, Number).reverse()
// 번호 역순으로 해서 숫자 데이터 타입으로 배열 받음
let temp = temp_reverse.splice(4).reverse()
// 변하면 안 되는 4자리만 짜름
for (let i = 0; i < temp.length; i++){
temp[i] = "*"
// 나머지는 "*"로 만들어줌
}
answer = temp.join("") + temp_reverse.join("")
// 이후 합쳐줌
return answer;
}
function solution(phone_number) {
var answer = '';
// 번호 뒷 4자리 가져오기
let back = phone_number.substr(-4,4);
console.log(back);
// 번호 뒷 4자리를 제외한 앞부분을 가져오기
let front = phone_number.substring(0,phone_number.length-4);
console.log(front);
// 뒷 4자리를 제외한 앞부분을 * 문자로 변환해주기
let result = front.replace(/[0-9]/g,'*');
console.log(result);
// * 문자로 변환해 준 부분과 뒷자리를 더해서 값을 구하기
answer = result + back
return answer;
}
str.substr(시작 인덱스, 추출 갯수)
substr은 시작 인덱스번호, 몇개를 추출할것인지를 입력받는 반면에
str.substring(시작 인덱스번호, 끝 인덱스번호)
substring은 시작 인덱스 번호, 끝 인덱스번호를 입력받는다
찾아본 건 다 들어가있다. 조합의 문제였나.. 여하튼 반은 이해 되었다.
function solution(arr1, arr2) {
var answer = [];
// answer 재설정
for (let i = 0; i < arr1.length; i++){
// 행렬 먼저 풀기
let row = []
// 임의의 row array 생성
for (let j = 0; j < arr1[0].length; j++){
// 이중 for문 arr1 다시 풀기
row.push(arr1[i][j] + arr2[i][j]);
// push로 행렬 만들기
}
answer.push(row)
// 마무리
}
return answer;
}
이것도 좀 공식처럼 외워두는게 좋을 듯...
function solution(x, n) {
var answer = [];
let sum = 0
// answer안에 들어갈 숫자
for (let i = 0; i <= n-1; i++){
// n-1 : index가 0부터 시작하므로
sum += x
// x만큼 계속 더해서
answer.push(sum)
// answer안에 push 시키기
}
return answer;
}
function solution(price, money, count) {
var answer = 0;
for (let i = 0; i <= count; i++) {
let new_price = price*(i*(i+1))/2
// keypoint : price가 등차수열로 올라가서 쓴 수학공식
answer = new_price - money
}
return answer;
}
function solution(price, money, count) {
let total_price = 0;
// answer을 잡는 것이 아니라 total_price를 잡고 감
for (let i = 0; i <= count; i++) {
// 여기까진 거의 동일
total_price += price * i;
// 거의 다 온 식. 비슷하게 갔음
}
return money > total_price ? 0 : total_price - money;
// 3항 연산자는 잘 몰라서 안 썼음. 이번 기회에 참고할 수 있게 둠.
}
오늘은 여기까지.. 머리 쥐나겠다