gossipProtocol, 관계형 DB Schema 작성,

🖥 알고리즘

gossipProtocol

세로와 가로의 길이가 각각 M, N인 마을지도가 배열로 주어졌을 때,
'1'은 주민이 있는 집을 의미하고 '0'은 주민이 없는 땅
이 마을은 소문이 시작되면 하루에 상하좌우 한 칸 바로 옆에 있는 집으로 퍼지는데
특정 주민의 집 (R, C)으로부터 어떤 소문이 시작될 경우,
마을 전체로 소문이 퍼지는데 걸리는 시간(일)을 리턴

입력

인자 1 : village

  • string 타입을 요소로 갖는 배열
  • village.length는 M
  • village[i]는 string 타입
  • village[i].length는 N
  • village[i][j]는 세로로 i, 가로로 j인 지점의 정보를 의미
  • village[i][j]는 '0' 또는 '1'

인자 2: row

  • number 타입의 0 이상의 정수
  • 소문이 시작되는 집의 세로 위치

인자 3: col

  • number 타입의 0 이상의 정수
  • 소문이 시작되는 집의 가로 위치

출력

number 타입을 리턴

주의사항

  • M, N은 100 이하의 자연수
  • row, col에는 항상 주민이 살고 있음
  • 모든 집은 연결되어 있어 한 집에서 다른 집으로 가는 경로가 항상 존재
  • village를 그래프로 구현하는 함수가 주어짐

입출력 예시

let village = [
  '0101', // 첫 번째 줄
  '0111',
  '0110',
  '0100',
];
let row = 1;
let col = 2;
let output = gossipProtocol(village, row, col);
console.log(output); // --> 3
/*
1. 시작: (1, 2)에서 시작, 소문이 퍼진 곳을 x로 표기
 [
  '0101',
  '01x1',
  '0110',
  '0100',
 ]

2. 1일 뒤
 [
  '0101',
  '0xxx',
  '01x0',
  '0100',
 ]

3. 2일 뒤
 [
  '0x0x',
  '0xxx',
  '0xx0',
  '0100',
 ]

4. 3일 뒤: 소문이 전부 퍼짐 (끝)
 [
  '0x0x',
  '0xxx',
  '0xx0',
  '0x00',
 ]

📖 개념

📝 수도코드

🚴‍♀️ Sprint

관계형 DB Schema 작성

인스타그램 스키마를 작성할 때

  • 나의 계정 하나를 기준으로 스키마를 작성
  • 인스타그램 DB를 전반적으로 만든다는 기준으로 스키마를 작성

기준이 확실히 정립되지 않은 상태로 스키마를 작성하려고 보니 혼란스러웠다
특히 스키마는 데이터베이스의 구조와 관계를 나타내는 것인데
데이터베이스의 개념이 아직 구체적이지 않아서 프로필과 게시물도
엔티티로 정의해야하는지 헷갈린다

일단은 별도로 테이블을 만들어야 할 것 같은 항목을 최대한 분리해봤는데
프로필 테이블은 전부 참조 항목이었다
프로필은 구체적인 데이터가 담기는 테이블이라기보다는
데이터베이스에 저장된 다수의 엔티티를 사용자가 보기 편하게 만들어놓은
프론트엔드 영역인 것 같다

데이터베이스 연결과 스키마

좋은 웹페이지 즐겨찾기