개발 일지 (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)
// }
} */