
금일은 낮은 확률 개발자 취업 영상을 시청하며 생키 다이어그램의 존재를 처음 알게 되었다.
이 다이어그램을 활용하여 나의 2024년 지원 현황을 정리해보니, 평균 서류 합격률 약 10%에 비해 15%의 합격률을 기록하며 나름 선방하고 있음을 느꼈다.

또한, Java의 mapToObj 메서드와 Comparator 인터페이스에 대해 추가로 학습할 필요성을 느꼈다.
소프트어 부트캠프 코딩 테스트에서 Comparator에 대한 이해 부족으로 어려움을 겪었다. 공식 문서를 참고하며 1시간 20분 동안 문제 해결을 시도했지만, 해결하지 못하였다.
조만간 Comparator에 대한 학습을 진행하여 완전히 이해하고자 한다.
내가 모르는 Java 문법, 코테에서 자주 사용되는 문법에 대해 궁금하다.
문제를 풀며 알고리즘 실력이 조금은 향상된 것 같은 느낌을 받았다.
아래 코드는 후보키 문제를 풀며 작성한 코드의 일부로, 주어진 table과 선택된 속성들로 후보키인지 확인하는 함수다.
// 후보키인지 확인하는 함수
private boolean isCandidateKey(String[][] relation, ArrayDeque<Integer> attributes) {
HashSet<String> set = new HashSet<>();
for (String[] tuple : relation) {
// tuple에서 후보키 속성만 추출
StringBuilder sb = new StringBuilder();
for (int index : attributes) {
sb.append(tuple[index]); // tuble[index]는 value라고 생각하면 됨
}
// 후보키 속성의 값들로 만들어진 문자열을 set에 추가
set.add(sb.toString());
}
// 후보키 확인 결과 반환 - 후보키 속성의 값들로 만들어지다보니, set의 크기와 relation의 길이가 다르다면 후보키가 아님
return set.size() == relation.length;
}
후보키를 검증할 때, 단순히 배열로 값을 비교할 수도 있었지만 HashSet을 활용해서 처리했다.
이로 인해, 평균적으로 O(n²)의 시간 복잡도를 가질법한 함수를, HashSet을 이용해 O(n × k)의 시간 복잡도를 가진 함수로 구현했다.
이러한 부분에서 코딩 실력이 발전했다고 생각했지만, 금일 진행한 소프티어부트캠프 코테에서 5문제 중 1문제만 푸는 결과를 보며, 여전히 부족함을 절실히 느꼈다.
앞으로 더욱 꾸준히 학습하고 다양한 문제를 풀며 실력을 쌓아가야겠다고 다짐했던 하루였다.
어제 해결하지 못한 문제를 해결했다.
약 2시간 동안 디버깅했지만 오류를 찾지 못해, 결국 시작 지점에서 도착 지점까지의 알고리즘을 처음부터 다시 작성하여 문제를 해결했다.
막혔을 때는 기존 코드를 고치기보다는 처음부터 새로 작성하는 것이 더 빠르고 효과적일 수 있다는 점을 다시금 깨달은 하루였다.
/**
* start에서 end로 이동하는 최적의 경로를 반환하는 메소드
*
* @param start 시작 좌표
* @param end 도착 좌표
* @return start에서 end로 이동하는 최적의 경로
*/
private ArrayDeque<Position> getRoute(Position start, Position end) {
ArrayDeque<Position> result = new ArrayDeque<>();
int i = start.getI();
int j = start.getJ();
// 현재 좌표를 result에 추가한다.
result.add(new Position(i, j));
// i 좌표를 end의 i 좌표로 이동한다. (상하 이동)
while (i != end.getI()) {
if (i < end.getI()) {
i++;
} else {
i--;
}
result.add(new Position(i, j));
}
// j 좌표를 end의 j 좌표로 이동한다. (좌우 이동)
while (j != end.getJ()) {
if (j < end.getJ()) {
j++;
} else {
j--;
}
result.add(new Position(i, j));
}
return result;
}