ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 항해 99 5기 TIL_59
    항해 99 2022. 3. 10. 10:50

    ▶ Today I Learned

     

    <알고리즘>

     

    [분해합]

     

    소요시간: 1시간

    해결여부: 해결

     

    처음 보자마자 완전 탐색으로 풀면 단순하겠다고 생각했다.

    하지만 모든 연산을 굳이 처음부터 할 필요가 있나 싶었다.

    그러다가 한 풀이를 발견하게 되었다.

    문제에서 분해합이란 정해진 자연수 n과 그n의 각각의 자릿수를 더하는 방식이다.

     

    여기서 각각의 자릿수에 올 수 있는 수는 최대가 9 이므로 n에서 각각의 자릿수만큼 9를 빼준다면 분명 그 생성자를

    포함하는 범위일 것이다.

    이를 활용하면 1부터 완전히 탐색할 필요는 없으므로 분명 더 쉽게 연산할 수 있다.

     

    const num =  require("fs").readFileSync("/dev/stdin").toString()/1;
    let start = num - (num+"").length*9;
    let answer = 0;
    if (start < 0) start = 0; // start를 구하는 과정에서 start의 결과 값이 음수가 나올 수도 있다.
    // 예를 들어 num이 1이라면 start는 -8이 나온다. 하지만 실제론 음수부터 시작하는 것은 의미가 없으므로
    // 시작을 0부터 해준다. 사실 1부터 시작해도 문제는 없다.
    for (let i=start; i<num; i++) {
        if (i.toString().split("").map(n => parseInt(n)).reduce((acc, n) => acc + n, 0) + i === num) {
            answer = i;
            break;
        }
    }
    console.log(answer);

     

    참고자료:

    https://dpsc615.tistory.com/126

    https://tesseractjh.tistory.com/8

     

     

    <CS>

     

    [DB Commit과 Rollback]

     

    Commit

    : 한개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산

     

    Rollback

    : 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산

     

    cf) 트랜잭션

    : 여러 쿼리들을 묶은 하나의 작업 단위

     

    cf) 트랜잭션의 특성

     

    - 원자성 (Atomicity)

    : 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 하는 성질

     

    - 일관성(Consistency)

    : 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태였다면 트랜잭션의 수행이 완료된 후 결과를 반영한

    데이터베이스도 또 다른 일관된 상태를 유지하여야 함

    ex) 계좌 이체를 진행하였다면 진행 전 후의 돈의 합이 같아야 함

     

    - 격리성 (Isolation)

    : 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션이 접근할 수 없음,

    이러한 특성으로 사용자는 트랜잭션들이 동시에 수행되는 것처럼 느끼면서도 순서대로 하나씩 수행되는 것 처럼

    정확하고 일관된 결과를 얻을 수 있게 됨

     

    - 지속성 (Durability)

    : 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야

    함을 의미

    시스템 장애가 발생하더라도 트랜잭션 작업 결과가 없어지지 않고 데이터베이스에 그대로 남아있어야 하기에

    장애 발생 시 데이터베이스를 원래 상태로 복구하는 회복 기능이 필요

     

     

    출처:

    https://coding-factory.tistory.com/226

    https://brunch.co.kr/@skeks463/27

     

     

    ▶ 느낀 점

     

    깃헙에 이제 꽤나 익숙해졌다고 생각했는데 브랜치를 3개로 나누어 작업하니 여전히 꼬이는 문제들이 조금 있었다.

    그 과정에서 git rebase ---continue도 써보고 git undo도 써보았는데 일단은 그곳에 나온 경고문들을 읽어보고 해결하긴 했다.

    다행히 원격 저장소에는 문제가 없긴 했지만 로컬 부분을 정리하는 데 시간을 꽤 썼다.

    이렇게 또 부딪치면서 배우는 거라 생각한다.

    +

    오늘도 위와 같이 새로운 지식을 얻었다 :3

    프로젝트 구현은...여전히 감이 딱! 하고 잡히지는 않지만 그래도 조금씩 윤곽이 잡히는 것 같다.

    채팅부분에 더 필요한 것은 없는지 점검해보아야 겠다.

     

    ▶ 공부 시 참고 링크들

     

     

    https://blog.outsider.ne.kr/1505

     

    새 버전에 맞게 git checkout 대신 switch/restore 사용하기 :: Outsider's Dev Story

    Git에 어느 정도 익숙하기에 새로운 기능이 나와도 일일이 테스트해보거나 자세히 확인해 보지 않았다. 얼마 전에 [Git 2.23](https://github.blog/2019-08-16-highlights-from-git-2-23/)에서 `checkout`을 대신...

    blog.outsider.ne.kr

     

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

     

     

     

     

    '항해 99' 카테고리의 다른 글

    항해 99 5기 TIL_61  (0) 2022.03.12
    항해 99 5기 TIL_60  (0) 2022.03.12
    항해 99 5기 TIL_58  (0) 2022.03.09
    항해 99 5기 TIL_57  (0) 2022.03.08
    항해 99 5기 WIL_8  (0) 2022.03.07
Designed by Tistory.