개발 일지 (TIL)

TIL 2023 08 24

늘곰's 2023. 8. 24. 20:55

알고리즘 시험 

//문제해결
// 정수를 담은 배열 arr1 arr2 그리고 행렬의 부호를 담은 sign배열이 주어집니다.
// 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

//arr1[0][0] + arr2[0][0] true    10
//arr1[0][1] + arr2[0][1] true     8 
//arr1[0][2] + arr2[0][2] false   -7

//arr1[1][0] + arr2[1][0] false   -9
//arr1[1][1] + arr2[1][1] false   8
//arr1[1][2] + arr2[1][2] false   -11
//[[10,8,-7],[-9,8,-11]]

// 이런방식으로 arr1의 첫번째 인덱스의 첫번째 인덱스 + arr2의 첫번째인덱스의 첫번째 인덱스를 더해야한다
// 그런데 sign의 첫번째 인덱스의 첫번째인덱스 값이 true이면 + false이면 - 를 출력한다

// 1. 필요한 인덱스 값이 2개이므로 for 문을 두개 생성한다
// 2. 첫번째 for 문은 첫번째 배열을 돌린다
// 3. 두번째 for 문은 첫번째 배열을 안에있는 두번째배열(우리가 더해야할 숫자)를 돌린다
// 4. 두번째 배열은 0부터 시작하여  arr[1].length 즉 첫번째 배열의 개수 만큼 돌아간다
// 5. if 문으로 sign 값이 참인지 거짓인지 구하고
// 6. 참이라면 inAnswer 에 arr1[i][z] +arr2[i][z]의 값을 넣어준다/
// 7. 거짓이라면 inAnswer 에 - 행태로 값을 넣어준다
// 8. 마지막으로 inAnswer가 각각의 배열로 바뀌어있기 때문에 answer 배열에 집어넣어 배열 안에 배열이 들어가도록 한다.

function solution(arr1, arr2, signs) {
    let answer = [];

    for (let i = 0; i < arr1.length; i++) {
        let inAnswer = [];

        for (let z = 0; z < arr1[i].length; z++) {
            if (signs[i][z] == true) {
                inAnswer.push(arr1[i][z] + arr2[i][z])
            } else if (signs[i][z] == false) {
                inAnswer.push(-(arr1[i][z] + arr2[i][z]))
            }
            // console.log(signs[i][z])
            // console.log(answer)
        }
        // console.log(inAnswer);
        answer.push(inAnswer);
    }

    return answer

}

let arr1 = [[5, 7, 1], [2, 3, 5]];
let arr2 = [[5, 1, 6], [7, 5, 6]];
let signs = [[true, true, false], [false, true, false]];
console.log(solution(arr1, arr2, signs))
function solution(star) {
    // 코드 작성
/* 
   *************
    ***********
     *********
      *******
       *****
        ***
         *
        ***
       *****
      *******
     *********
    ***********
   ************* 
   */

    let a = '';
    // for 문으로 라인을 돌림
    // 모양이 모래시계니까 큰 값 부터 작아져야함
    // 1번째 행의 시작이 star부터 시작해서 작아짐 > 총 7개 행
    // for 문안에 공백을 만들어줄 for 문을 다시 생성 
    // 두번째 for 문을 돌아갈때마다 블랭크가 하나씩 생김
    // a에 별모양을 repeat 으로 넣음
    // 줄바꿈 정규표현식을 사용하여 한줄에 있던 별을 줄맞춰 줌 \n도 가능
    for (let line1 = star; line1 > 0; line1--) {

        for (let blank1 = 0; blank1 <= star - line1; blank1++) {

            a += ' '
        }
        a += '*'.repeat(2 * line1 - 1) // + '\r\n';

    }

    // 모래시계의 아래 부분
    // for문으로 위와 비슷하게 만들어줫음
    // line2 의 시작값은 2  / 1로하면 1개짜리 별이 또생김
    // 6개의 행이 생겨야하므로 line2 의 크기는 <=star 까지
    // 블랭크를 만들 두번째 for 문
    // blank2 는 1과 다르게 첫번째 행이 없으므로 star+1 에서 시작
    // 마지막 행은 블랭크를 사용하지 않으니 blank2>line2 
    // blank2 -- 로 블랭크를 하나씩 줄이고 
    
    // for문 안의 a에 위와 같이 공백을 추가해줌
    // a에 위와 같이 별표를 추가해주면 해결
    for (let line2 = 2; line2 <= star; line2++) {
        for (let blank2 = star + 1; blank2 > line2; blank2--) {
            a += ' '
        }
        a += '*'.repeat(2 * line2 - 1) // + '\r\n';
    }
    console.log(a)
}
let star = 7;
solution(star)
function solution(arr, n) {

    for(let i =0; i<arr.length; i++){
        for(let z= 0; z<arr.length; z++){
            if(arr[i]===arr[i+1]){
              let newa = arr.splice(i,2)
              //console.log(arr)
            }
        }
    }

    arr.sort((a, b) => a[n].localeCompare(b[n]));

    return arr;
}

let arr = ["coke", "water", "glass", "dog", "dog", "yogurt", "vitamin"];
let n = 2;
console.log(solution(arr, n));

//[ 'glass', 'yogurt', 'coke', 'water', 'vitamin' ]



        
/*     for (let i = 0; i < arr.length-1; i++) {

        let newArr = arr.replace(/dog/g, '');
console.log(newArr)

        // if(arr[i] === arr[i+1]){
        //     arr.splice(i,2)
        //     console.log(arr)

        // }
    } */