-
항해 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
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