전체 보기
🍀

Firestore 사용(3) update, 정렬(PS), 완전탐색(PS)

작성일자
2023/04/10
태그
DIARY_DEVELOP
프로젝트
NOI
책 종류
1 more property

개발

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
완전 탐색
프로그래머스 - 최소직사각형
프로그래머스 - 모의고사