회고

[수습일지] - 40(어린이날)

Happy Programmer 2023. 5. 5. 23:24

엔터티는 기존에 학습한 레코드와 유사한 의미를 가지는 것 같기도 하고

객체를 나타내는 것 같기도 했다.

 

간단하게 보자면 특정 데이터 하나

또는 무언가를 지칭할 때 엔티티라고 하는 것 같고

이 엔티티의 구분을 위한 무언가를 인스턴스라고 한다.

 

예를 들어 과일이라는 엔티티가 있다고 한다면

사과, 배, 파인애플 등이 인스턴스라고 볼 수 있다.

 

엔티티가 적절한 엔티티인지 파악하기 위해서 아래와 같은 조건을 체크할 수 있다.

  1. 반드시 필요하며 관리가 필요한 정보인가
  2. 유일한 식별자에 의해 식별이 가능한가
  3. 영속적으로 존재하는 인스턴스의 집합(2개 이상)인가
  4. 업무에서 필요로 하는 엔티티인가
  5. 속성을 보유하고 있는가
  6. 다른 엔티티와 하나 이상의 관계가 있는가

엔티티는 유형 엔티티와 무형 엔티티가 존재하는데

물리적 형체를 보유한 유형 엔티티에는 사원, 물품, 강사 등이 존재하며

개념적 정보로 구분이 되는 개념 엔티티에는 조직, 보험 상품 등이 존재하고

각종 통계 자료에 사용될 수 있는 사건 엔티티에는 주문, 청구, 미납 등이 해당된다.

 

발생 시점에 따라서도 엔티티를 구분하는데

기존부터 존재하던 엔티티의 경우 기본 엔티티라고 하며 타 엔티티의 부모 역할을 하게 된다.

 

기본 업무에서 파생되었지만 중심적인 역할을 하며

엔티티들과의 활발한 행위 엔티티를 생성하는 중심 엔티티도 존재하며

이런 중심 엔티티에서 발생되며 변경이 잦은 엔티티를 행위 엔티티라고 부른다.

 

엔티티 또한 네이밍 규칙이 존재하는데

현업 업무 사용 → 약어 미사용 → 단수 명사 사용 → 유일한 이름 부여 → 생성 의미대로 이름 부여 등이 존재한다.

 

 

 

 

(1).백준 2018번 수들의 합 5는 특정 숫자가 있을 때

연속되는 숫자의 합이 특정 숫자가 될 수 있는 연속된 숫자들의 집합의 갯수를 구하는 문제였다.

 

간단하게 생각해보자면 1개일 때는 해당 숫자가 될 수 있으며

2개일 때는 n, n+1이므로 해당 숫자가 1이 아닌 홀수일 경우에 가능할 수 있겠다.

 

규칙을 생각해보면 1~n까지의 합은 (n *(n+1))/2 형태로 진행되기 때문에

a개의 연속된 숫자로 이루어진 그룹이 있는지를 확인하려면

a개의 연속된 숫자의 합의 최소치인 (a*(a+1))/2  + a*x 형태로 된 숫자인지를 보면 알 수 있다.

(4개의 연속된 숫자의 경우 1,2,3,4처럼 연속된 숫자여야 하며 각각 1씩 더해 2,3,4,5처럼 다른 숫자가 될 수 있지만

4개의 숫자 모두에 1씩 더해주며 커져야 하기 때문에 4씩 증가해야 한다는 것을 볼 수 있다)

 

그렇기 때문에 현재 값에서 (a*(a+1))/2를 뺸 다음 a로 나눴을 때 나머지가 없는 경우

해당 값은 a갯수만큼의 연속된 숫자로 구성된 합이 된다고 볼 수 있고

결과값이 현재 입력값보다 크면 안되기 때문에 

for문 내부에 (i**2 + i)/2 <= input라는 조건을 넣어서 문제를 해결했다.

const input = 150

let count = 0

for(let i = 1 ; (i**2 + i)/2 <= input ; i++){
    if((input - (i**2 + i)/2) % i === 0){
        count++
    }
}

console.log(count)