개발
collection(test).doc(2) update
•
index.js
// Update routine
async function updateTest() {
const id = "2";
const data = { healthy: true, welcome: "update" };
if (await testUpdate(id, data)) {
const d = await testRead(id);
if (Object.keys(data).length !== Object.keys(d).length) {
throw Error("Fail to update");
}
for (let field in d) {
if (data[field] === undefined || data[field] !== d[field]) {
throw Error("Fail to update");
}
}
return d;
} else {
throw Error("Fail to update");
}
}
updateTest()
.then((v) => {
console.log(v);
process.exit(0);
})
.catch((e) => {
console.error(e);
process.exit(1);
});
JavaScript
복사
•
firestore.js
const testUpdate = async (id, data) => {
const db = getFirestore();
const ref = doc(db, collection, id);
try {
await updateDoc(ref, data);
return true;
} catch (e) {
return false;
}
};
export { testRead, testWrite, testDelete, testUpdate };
JavaScript
복사
에러 1 → import 실수로 까먹어서 생긴 에러.
해결 1 → index.js에 import문 넣어줘서 해결함
에러 2 → 문서가 존재하지 않아서 생긴 에러.
해결 2 → 문서 존재하는지 확인해주게 고쳐서 해결할 수 있음. 근데, 그냥 test용이라서 문서 만들고 업데이트 시켜서 에러 안 나게 테스트 성공함
PS
•
프로그래머스 - H-index
Try 1 → 실패
◦
Try 2 → 성공
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
/*
[문제 설명]
- h번 이상 인용된 논문이 h편 이상이고
- 나머지 논문이 h번 이하 인용되었다면
- h의 최댓값이 H-Index
[문제 접근]
- 내림차순 정렬 후, 앞에서부터 `h번 이상 인용된 논문 >= h편`인지 확인
- 내림차순되어 있어서 현재 논문의 뒷부분이 `h번 이하 인용`된 논문들인 건
- 당연한 사실이라 확인할 필요 없음
- 원소의 값 == 인용 횟수
- 원소의 인덱스+1 == 몇 번째인지
*/
int solution(vector<int> citations) {
int answer = 0;
sort(citations.rbegin(), citations.rend());
for(int i=0; i<citations.size(); i++) {
cout << citations[i] << endl;
if(citations[i] >= i+1) { // h번 이상 인용된 논문 >= h편
answer = i+1; // 위 조건을 만족하는 최대치까지 갱신
// answer = citations[i];로 하면 안되는 이유 : [8,7,6,6,6]이면 h=6가 아니라 5임
}
}
return answer;
}
JavaScript
복사
•
프로그래머스 - 최소직사각형
◦
Try 1 → 성공
#include <string>
#include <vector>
#include <iostream>
using namespace std;
/*
[문제 설명]
- 1번 : 12345 반복
- 2번 : 21232425 반복
- 3번 : 3311224455 반복
- 시험 최대 10000문제
[문제 접근]
- 완전 탐색_브루트포스
*/
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> a = {1,2,3,4,5};
vector<int> b = {2,1,2,3,2,4,2,5};
vector<int> c = {3,3,1,1,2,2,4,4,5,5};
int acnt=0;
int bcnt=0;
int ccnt=0;
for(int i; i<answers.size(); i++){
if(a[i % a.size()] == answers[i]) acnt++;
if(b[i % b.size()] == answers[i]) bcnt++;
if(c[i % c.size()] == answers[i]) ccnt++;
}
int biggest = 0;
if(acnt>bcnt) biggest=acnt;
else biggest=bcnt;
if(ccnt>biggest) biggest=ccnt;
if(acnt==biggest) answer.push_back(1);
if(bcnt==biggest) answer.push_back(2);
if(ccnt==biggest) answer.push_back(3);
return answer;
}
JavaScript
복사
◦
Try 2 → 좀 더 깔끔하게 성공
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> a = {1,2,3,4,5};
vector<int> b = {2,1,2,3,2,4,2,5};
vector<int> c = {3,3,1,1,2,2,4,4,5,5};
vector<int> cnt(3); // 3개의 원소를 0으로 초기화
for(int i; i<answers.size(); i++){
if(a[i % a.size()] == answers[i]) cnt[0]++;
if(b[i % b.size()] == answers[i]) cnt[1]++;
if(c[i % c.size()] == answers[i]) cnt[2]++;
}
int biggest = *max_element(cnt.begin(), cnt.end()); // 가장 큰 원소 값 저장
for(int i=0; i<cnt.size(); i++) {
if(cnt[i] == biggest) answer.push_back(i+1);
}
return answer;
}
JavaScript
복사
▪
참고한 문법
vector<int> they(3);
int they_max = *max_element(they.begin(),they.end()); // 가장 큰 원소의 값 저장
JavaScript
복사
vector<int> cnt(3); // 3개의 원소를 0으로 초기화
JavaScript
복사
•
프로그래머스 - 모의고사
◦
Try 1 → 성공
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
/*
[문제 설명]
- 다양한 크기의 명합 수납할 수 있는 가장 작은 지갑
- 가로,세로 상관 없이 큰 쪽, 작은 쪽으로 구분!
- 모든 명함 길이를 큰 쪽, 작은 쪽으로 나눠 저장한 후
- 큰 쪽 중 가장 큰 값, 작은 쪽 중 가장 큰 값으로 지갑 만들면 됨
[문제 접근]
- 완전 탐색_브루트포스
*/
int solution(vector<vector<int>> sizes) {
int answer = 0;
vector<int> big;
vector<int> small;
// sizes.size()는 명함 개수
for(int i=0; i<sizes.size(); i++) {
if(sizes[i][0] > sizes[i][1]) {
big.push_back(sizes[i][0]);
small.push_back(sizes[i][1]);
}
else {
big.push_back(sizes[i][1]);
small.push_back(sizes[i][0]);
}
}
int biggest = *max_element(big.begin(), big.end());
int smallest = *max_element(small.begin(), small.end());
answer = biggest * smallest;
return answer;
}
JavaScript
복사
◦
Try 2 → 좀 더 깔끔하게 성공
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> sizes) {
int answer = 0;
int big = 0;
int small = 0;
// sizes.size()는 명함 개수
for(int i=0; i<sizes.size(); i++) {
big = max(big, max(sizes[i][0], sizes[i][1])); // 둘 중 더 큰 애들 중 최대값
small = max(small, min(sizes[i][0], sizes[i][1])); // 둘 중 더 작은 애들 중 최대값
}
answer = big * small;
return answer;
}
JavaScript
복사
▪
참고한 문법
int w=0;
w = max(w,min(sizes[i][0],sizes[i][1]));
JavaScript
복사
하루 정리
TIL 작성하기
노이랩
Firestore 사용 - update
8시 졸프 면담
10시 GDSC 회의
PS
정렬
프로그래머스 - H-index
완전 탐색
프로그래머스 - 최소직사각형
프로그래머스 - 모의고사