[알고리즘] Algorithm Challenge_2023.4.5

우기·2023년 4월 5일
0
post-thumbnail

1️⃣ 직사각형 별찍기


풀이

process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
    const n = data.split(" "); 
    const a = Number(n[0]), b = Number(n[1]); 
    for(let i=0; i<b; i++){
        let str = ""; 
        for(let j=0; j<a; j++){ 
            str += "*" 
        } 
    console.log(str) 
    }


});

📝 풀이 설명

여전히 반복문이 1개 이상이면 솔찍히 부담스럽다. 반복문 3개는 어후...엄두가 잘...ㅠ

  • 입력 받는 b갑은 줄을 의미한다. 그래서 str이란 빈 벼수를 처음 반복문 안에 선언했다. 그럼 반복문을 도는 동안 한줄씩 생성된다.
  • 그리고 그 반복문안에 반복문을 돌리면 길이는 입력받은 a다 이는 가로줄을 의미한다.
  • *값을 위에 선언한 str 세로줄에 넣어준다.
  • 그리고 그 값은 출력해준다.

1️⃣ 이상한 문자 만들기


풀이

function solution(s) {
let sss = s.toUpperCase()
let aaa = sss.split(' ')
let bbb= []
let ccc= []
for(let i=0; i<aaa.length; i++){
  bbb.push(aaa[i].split(''))
  for(let j=0; j<bbb[i].length; j++){
      if(j%2===0){
      ccc.push(bbb[i][j])
    }else if(j%2!==0){
      ccc.push(bbb[i][j].toLowerCase() )
    }
  }if(i<sss.length - 1){
    ccc.push(" ")
  }
}

ccc.pop()

return ccc.join('')
}

📝 풀이 설명

ㅋㅋㅋㅋㅋㅋㅋㅋ 아니 진짜 쉽지 않았다. 진짜 광기였다. 제발 좀 맞아!!!!! 전에 한번 시도했다가 실패한 이후로 외면하다 결국 다시 마주해버렸다. 요즘 들어 알고리즘에 권태기가 와서 풀기 싫었는데 이번 기회에 다시 기존의 상태로 회복하기 위해 아득바득 이를 갈며 풀었다. 풀이가 너무 보기 싫지만 그래도 온전히 내 힘으로 풀었다. 그전에는 아니었던 건 아니지만, 이번엔 더욱 의미가 크다.

  • 우선 받은 문자를 모두 대문자로 바꿨다.
  • 그리고 split을 사용해 단어로 나눴다.
  • 나눈 문자를 담은 배열의 길이만큼 반복문을 돌리며 bbb배열에 스펠링으로 나누면서 넣었다. 이유는 단어로 나눠지면 홀짝이 초기화하기 위해서다.
  • 그리고 단어로 나눠진 배열의 길이만금 홀수번째면 대문자인 상태로 넣어줬고 짝수면 홀수로 변환하여 배열에 넣었다.
  • 그리고 띄어쓰기 부분을 나누기위해 띄어쓰기를 넣었다.
  • 그러나 마지막에도 띄어쓰기가 들어가 그부분만 pop으로 지웠다.

1️⃣ 시저 암호


풀이

function solution(s, n) {
let aaa = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r", "s", "t","u","v","w","x","y","z"]
aaa.length
let AAA = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]

aaa.indexOf("z")

let arr = s.split('')
let answer = []
arr
arr[0]
for(let i=0; i<arr.length; i++){
  if(arr[i]===" "){
    answer.push(" ")
  }
  if(aaa.includes(arr[i])){
if(aaa.indexOf(arr[i])+n >=aaa.length){
         answer.push(aaa[aaa.indexOf(arr[i])+n-aaa.length]) 
    }else{
      answer.push(aaa[aaa.indexOf(arr[i])+n]) 
    }
  }
  if(AAA.includes(arr[i])){
if(AAA.indexOf(arr[i])+n >=AAA.length){
         answer.push(AAA[AAA.indexOf(arr[i])+n-AAA.length]) 
    }else{
      answer.push(AAA[AAA.indexOf(arr[i])+n]) 
    }
  }

} 

return answer.join("")
}

📝 풀이 설명

와 이걸 풀다니... 최근에 풀었던 문제중에 가장 힘들었다. 아니 간절했다. 제발!!! 나와라 정답아!! 이러면서 풀었습니다. 풀이 설명은 없습니다. 지금 너무 피곤해서 자야될 거 같습니다. 다른 사람들 푼 거 보니까 아스키 코드? 이런거 써서 풀던데 저는 잘 몰라서 내일 공부해봐야겠습니다. 여러분 포기하지 마세요...

profile
개발 블로그

0개의 댓글