입력 받는 배열의 순서를 뒤집어 리턴하라.
import java.util.Arrays;
public class ReverseArr {
// 0번 인덱스를 마지막으로 보내기
// 보낸 요소 빼고 재귀
// 맨 앞 인덱스 뒤에 붙이기 반복
public int[] reverseArr(int[] arr){
if(arr.length==0) return arr;
int[] result1 = Arrays.copyOfRange(arr,0,1);
int[] result2 = reverseArr(Arrays.copyOfRange(arr,1, arr.length));
int[] result = new int[arr.length];
System.arraycopy(result2, 0, result, 0, result2.length);
System.arraycopy(result1, 0, result, result2.length, result1.length);
return result;
}
}
//입력
System.out.println(Arrays.toString(reverseArr.reverseArr(new int[]{1, 2, 3, 4, 5})));
//출력
[5, 4, 3, 2, 1]
모든 테스트케이스 통과
schema(스키마) = DB에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명
Entity(엔티티) = 정보의 단위
하나의 레코드가 다른 테이블의 레코드 한 개와 연결된 경우
하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우
여러 개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우
때로는 테이블 내에서도 관계가 필요하다.
ex. person이라는 테이블의 각 레코드(사람)간의 관계가 있을 수 있음.
GROUP BY 로 조회된 결과를 필터링
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
//예시
SELECT CustomerId, AVG(Total)
FROM invoices
GROUP BY CustomerId
HAVING AVG(Total) > 6.00
cf. WHERE
은 레코드를 필터링
이 밖에 자주 사용하는 COUNT(), SUM(), AVG(), MAX(), MIN()
는 SQL Practice 참고
SELECT CustomerId, AVG(Total)
FROM invoices
WHERE CustomerId >= 10
GROUP BY CustomerId
HAVING SUM(Total) >= 30
ORDER BY 2
FROM invoices
: invoices 테이블에 접근WHERE CustomerId >= 10
: CustomerId 필드가 10 이상인 레코드들을 조회GROUP BY CustomerId
: CustomerId를 기준으로 그룹화HAVING SUM(Total) >= 30
: Total 필드의 총합이 30 이상인 결과들만 필터링SELECT CustomerId, AVG(Total)
: 조회된 결과에서 CustomerId 필드와 Total 필드의 평균값을 구함ORDER BY 2
: AVG(Total) 필드를 기준으로 오름차순 정렬한 결과를 리턴위 네가지 기본 인스타그램 기능을 구현하기 위해 필요한 데이터들의 스키마를 그려보았다.
like기능과 hashteg 기능 모두 comments(댓글)에서도 쓸 수 있는 기능이니까 추가해보자.
ans
나를 팔로우 하는 유저의 정보는 해당 유저의 팔로잉_id에 남아 있기 때문에 굳이 추가적인 데이터(follow_id)로 조회하지 않아도 된다.
Like의 경우 boolean 데이터를 굳이 작성할 필요가 없다.
테이블에 값이 존재하면 그것 자체로 불린의 역할을 해줄 수 있다.
물론 위의 두가지 사항을 수정하지 않아도 구현은 된다. 다만, 굳이 쓰지 않아도 되는 데이터들이 추가 되므로써 성능에 낭비가 있을 것이다.