본문 바로가기

Hanghae99

221124 TIL 알고리즘 문제풀이 5

[모의고사 1번 날짜 계산]

나의 풀이

 - 입력값에 따라 일자가 하루씩 다르게 출력되는 문제가 있었다.

 =>  객체의 월값 범위(0~11)의 착오로 발생하는 문제였다.

function solution(m, d) {

// m 에서 1을 빼주어야만 현재 월이 제대로 출력된다.
// 왜냐하면 월을 받는 대응값의 범위가 0~11 이기 때문이다.
// 제대로된 월값이 입력되지 않으면 31 이나 30의 일수 차이로 하루씩 차이가 발생할 수 있다.
// new Date 는 현재 컴퓨터의 시간 즉, zone time을 출력해준다.
  let currDay = new Date(2022, m - 1, d + 98);
  let currDate = currDay.getDate();
  
  // getmonth는 현재 월의 대응값을 리턴해준다.
  // 즉 6월이 입력되었을때, 숫자 5를 리턴해준다. 이 부분을 헷갈리면 착오가 생길수 있다.
  // 즉 현재 currMonth는 6월을 입력받아 5를 리턴하고 거기에 1을 더한 것이다.
  let currMonth = currDay.getMonth() + 1;

  return `${currMonth}월 ${currDate}일`;
}

console.log(solution(6, 22));

 

[알고리즘 테스트 1번 하.윷놀이]

나의 풀이

function solution(arr1) {
  let answer = "";

  let count = 0;

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

  switch (count) {
    case 1:
      answer = "도";
      break;
    case 2:
      answer = "개";
      break;
    case 3:
      answer = "걸";
      break;
    case 4:
      answer = "윷";
      break;
    case 0:
      answer = "모";
      break;
  }

  return answer;
}

let arr1 = [0, 1, 0, 0];
console.log(solution(arr1));

 

[알고리즘 테스트 2번 중.Triangler output]

나의 풀이

function solution(star) {
  let answer = "";

  for (let j = 1; j <= star; j++) {
    answer += " ".repeat(9 - j);
    answer += "*".repeat(j * 2 - 1);
    if (j !== star) {
      answer += "\n";
    }
  }

  console.log(answer);
}

let star = 9;
solution(star);

 

❖ 막간 더하기 공부

절차지향언어 vs 객체지향언어

  절차지향언어
(Procedural Programming)
객체지향언어
(Object-oriented Language)
간단 설명 개체를 순자적으로 처리하는 언어 프로그램을 다수의 객체로 만들고 서로 상호작용하도록 만드는 언어
장점 1. 빠른 개발 속도
2. 빠른 실행 속도
1. 상속이 가능해 코드를 재상용할 수 있다.
2. 생산성 증가
3. 유지보수 용이
4. 자연스러운 모델링
단점 1. 유지보수가 어려움
2. 융통성이 부족하여 비효율적
1. 느린 개발 속도
2. 느린 실행 속도
3. 높은 난이도
특징   1. 캡슐화
2. 상속
3. 다형성
4. 추상화
주언어 C언어 Java, c++, Python...

 

[39번 시저 암호]

- 처음에는 ASCII code 값에 대응하여 풀려고 했다가 예상외로 경우의 수가 많아져서 배열로 풀었다.

 => ASCII code 관련 메소드: 
  charCodeAt 은 문자열중 하나를 선택하여 아스키코드 번호로 변환해주는 함수이며,

   fromCharCode 는 아스키코드번호를 받아 문자열을 구성해주는 함수입니다.

- 그래서 배열로 만들어 주어 풀었다.

나의 풀이

function solution(s, n) {
    var answer = '';
    
    // 문자열.split('') 으로 배열로 만들어 준다.
    let Upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')
    let Lower = 'abcdefghijklmnopqrstuvwxyz'.split('')
    
    // 무려 3중 if문을 사용하였다.
        for (let i = 0; i < s.length; i++) {
        
        // s[i] 가 공백일때는 공백(' ')을 넣어준다.
        if (s[i] !== ' ') {
        
        	// match(정규식)으로 대/소문자를 판별한다. 대문자일 경우 true출력한다.
           if ((s[i].match(new RegExp(/^[A-Z]/)) !== null) === true) {
           	
            	// findIndex로 배열내에서 해당값의 index값을 리턴해준다. 
                // index + n > 25 보다 많을 경우 배열을 넘어가기 때문에 26을 빼주어 배열의 처음부터 다시 세어준다.
               if ((Upper.findIndex(v => v === s[i]) + n) > 25) {
                   answer += Upper[Upper.findIndex(v => v === s[i]) + n - 26]
               } else {
                   answer += Upper[Upper.findIndex(v => v === s[i]) + n]
               };
           } else {
           		// 대문자가 아닌 경우(소문자) 아래 조건이 실행된다.
               if ((Lower.findIndex(v => v === s[i]) + n) > 25) {
                   answer += Lower[Lower.findIndex(v => v === s[i]) + n - 26]
               } else {
                   answer += Lower[Lower.findIndex(v => v === s[i]) + n]
               };
           };
        } else {
            answer += ' '
        };     
        };
    
    return answer
}

 

배열의 특정값/ 인덱스값 찾기

https://gurtn.tistory.com/78

 

[JS] 배열 특정 값 찾기 ( find, findIndex, filter )

find const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // callback(element, index, array) array.find(v => v > 5); // 6 find 메서드는 해당 조건에 만족하는 첫 번째 요소의 값을 반환하며 만족하지 않으면 undefined를 반환합니다

gurtn.tistory.com

대소문자 판별하기

https://developer-talk.tistory.com/789

 

[JavaScript]첫 번째 문자열이 대문자인지 소문자인지 체크하는 방법

첫 번째 문자열이 대문자인지 소문자인지 체크하는 방법 이번 포스팅은 JavaScript에서 첫 번째 문자열이 대문자인지 소문자인지 체크하는 몇 가지 방법을 소개합니다. 방법 1. toUpperCase 메서드 또

developer-talk.tistory.com

 

[40번 신규 아이디 추천]

 

정규표현식 정리

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC

 

[JS] 📚 정규표현식(RegExp) - 이해하기 쉽게 정리 + 응용 예제

정규표현식(Regular Expression) 정규식(Regular Expression)은 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용된다. 대표적으로 입력칸에 전화번호나 이메일을 입력하라고 했을때 옳지 않은

inpa.tistory.com

연속된 문자 하나로 치환하기 - 아래 방법 응용

https://hianna.tistory.com/529

 

[Java] 문자열 연속된 공백 하나로 치환하기

지난번에는 문자열의 앞뒤 공백을 제거하는 방법과 [Java] 문자열 앞뒤 공백 제거하기 (trim() vs strip() 차이) 문자열의 모든 공백을 제거하는 방법을 알아보았습니다. [Java] 문자열에서 공백 제거하

hianna.tistory.com

[40번 신규 아이디 추천]

안풀려서 마무리 해야겠다.

이러한 아이디어로 풀어볼 것.

- 배열에 활용할수 있는 메소드가 많으니 배열로 접근

- for문 혹은 filter 함수의 적극적인 사용

 

총평

오늘 시험은 그다지 어려운 것은 없었다. 그러나 문제는 시험이 아니라 내가 알고리즘 문제의 풀이가 얼마나 가능한가이다. 아직 시작 단계도 아니라고 생각한다. 다행인것은 일주일전의 나와 지금의 나는 전혀 다르다는 것이다. 다른 사람에 비해 열심히가 아니라 내가 처음 설정한 목표에 얼마나 근접하게 달성했는가가 내일의 나를 만든다는 마음으로 하자. 내가 이 일을 하는 근본 동기를 잊지 말자. 

'Hanghae99' 카테고리의 다른 글

221126 TIL React 입문 주차 2  (0) 2022.11.28
221125 TIL React 입문 주차 1  (0) 2022.11.25
221123 TIL 알고리즘 문제풀이 4  (0) 2022.11.24
221122 TIL 알고리즘 문제풀이 3  (0) 2022.11.22
221121 TIL 알고리즘 문제풀이 2  (0) 2022.11.22