출처) https://school.programmers.co.kr/learn/courses/30/lessons/68935
function solution(n) {
let temp=n.toString(3)+''
let temp2 = temp.split('').reverse()
let temp3 = temp2.join('')
return parseInt(temp3,3)
}
toString 과 parseInt의 완전히 새로운 사용법을 배웠다.
n.toString(2)
라고 적게 되면 100을 2진법으로 바꾼 string인 '1100100'이 리턴된다. 출처) https://school.programmers.co.kr/learn/courses/30/lessons/12969
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
const a = Number(n[0]), b = Number(n[1]);
// console.log(a);
// console.log(b);
let htemp= "*".repeat(a)
let vtemp= `${htemp}\n`
console.log(vtemp.repeat(b))
});
\n
을 이용한다.\n
을 사용하는 것도 방법이 될 수 있다. n은 new line 의 약자라고 한다.페이지 구성 자체는 지난번 프로젝트와 유사하다. Home 페이지에서 여러 피드들을 한번에 확인할 수 있고, 각 피드를 클릭하면 해당 피드의 상세를 확인할 수 있는 Detail 페이지로 넘어가는 방식이다.
어렵지 않게 구현 가능할 것으로 생각했으나 막상 시도해 보니 예상치 못한 문제에 직면했다.
피드의 id를 주소창으로 넘기고 이를 useParams를 이용하여 다시 받아오는 것 까지는 문제 없었는데 getDocs로 해당 id를 가진 피드를 불러들이는데 실패한 것이다.
원인을 찾아보니 firebase에서 사용하는 데이터베이스의 데이터 구조 자체가 원인이었다.
위가 데이터의 형태인데, 피드의 id로 사용한 것은 문서id(doc.id)인 반면 그 문서 내부에는 id필드가 존재하지 않는다.
즉 , 콜렉션 전체를 가져오고 필드를 기준으로 필터링 해오던 기존의 방식을 사용할수 없는 상황.
디테일 페이지로 넘어갈때 피드 아이디를 넘기는 것은 그대로 유지하면서 firebase에서 데이터를 가져올때 컬렉션 전체를 가져오는 것이 아닌 특정 id를 가진 문서만을 가져오도록 코드를 다시 짰다.
//before
import { collection, getDocs, query, where } from 'firebase/firestore';
//after
import { doc, getDoc } from 'firebase/firestore';
콜렉션을 가져오는 것이 아니라 문서 하나를 가져오는 것이니 collection 대신 doc을, 여러 문서를 가져오는 것이 아닌 문서 하나를 가져오는 것이니 getDocs대신 getDoc 을, 그리고 필터링 할 필요가 없으므로 query와 where는 사용하지 않게 되었다.
실제로 데이터를 가져오는 함수는 아래와 같다
const fetchData = async () => {
const feedRef = doc(db, 'feeds', params.id);
const docSnapshot = await getDoc(feedRef);
const initialFeed = { ...docSnapshot.data() };
setFeed(initialFeed);
};
fetchData();
}, []);
feedRef 에서 params.id를 적어준 부분이 중요하다. 이를 통해 가져오고자 하는 id를 가진 문서를 정확하게 하나만 가져올 수 있다. 어차피 하나만 가져오는 것이니 where()를 사용한 로직은 필요하지 않다. 이후에는 jsx 문에서 feed state에 저장된 정보를 하나씩 꺼내서 화면에 필요에 따라 뿌려주면 된다.