Closed yeongleej closed 1 month ago
🤔 시간복잡도 고려사항
3 <= n <= 20이므로 문제에서 주어진대로 구현해도 시간 충분
💡 풀이 아이디어
각 학생마다 친한 친구를 저장하고, 입력된 학생 순서대로 map
에 위치 앉히기
LinkedHashMap<Integer, HashSet<Integer>> hashMap
key
: 학생 번호, value
: 친한 친구 집합LinkedHashMap
이므로 학생이 입력한 순서대로 앉힐 수 있음placeKey(int key)
: 학생을 map
에 위치 시키기
map
을 순차 탐색하며 조건에 맞는 위치 찾기getScore()
result += Math.pow(10, likeCnt - 1)
🤔 시간복잡도 고려사항
💡 풀이 아이디어
우선순위 큐
를 이용
비어있는 모든 자리에서의 주변 정보
를 계산 후 우선순위 큐에 삽입@Override
public int compareTo(Node o) {
if (this.favor != o.favor)
return o.favor - this.favor;
else if (this.empty != o.empty)
return o.empty - this.empty;
else if (this.y != o.y)
return this.y - o.y;
return this.x - o.x;
}
행과 열 우선순위를 반대로 적었는데도 통과 되네요..? 테스트 케이스 부족해보입니다...
🤔 시간복잡도 고려사항
💡 풀이 아이디어
static class Pos implements Comparable<Pos> {
int x, y, like, empty;
public Pos(int x, int y, int like, int empty) {
this.x = x;
this.y = y;
this.like = like;
this.empty = empty;
}
@Override
public int compareTo(Pos other) {
if(this.like == other.like) {
if(this.empty == other.empty) {
if(this.x == other.x) {
return this.y - other.y;
}
return this.x - other.x;
}
return other.empty - this.empty;
}
return other.like - this.like;
}
}
🤔 시간복잡도 고려사항
💡 풀이 아이디어
행, 열, 좋아하는 친구 수, 비어있는 칸
을 Node객체
로 만들고 우선순위큐로 자리 선정emptyCnt 배열
: 주위 빈칸 개수 정보findSit
: 전체 배열을 돌며 행, 열, 좋아하는 친구 수, 비어있는 칸
정보 우선순위큐에 넣기checkNxt
: 주위 자리에 좋아하는 친구 수 세기fixSit
: 자리 선정 후 빈자리 업데이트(emptyCnt)🤔 시간복잡도 고려사항 n<= 20 -> 주어진 조건으로 구현 가능
💡 풀이 아이디어 주어진 순서대로 학생을 좋아하는 학생 옆에 앉히는 문제
ArrayList
사용compareTo
구현하여 우선순위 정렬상하좌우
(맨 처음 값 십자 가운데에)PriorityQueue
를 사용하여 좌석 선택의 우선순위를 관리하고, 각 학생의 만족도를 계산하여 최종 점수
구함
문제 이해 못해서 엄청 헤맸었는데, 지영님 코드로 이해하고 공부하고,, 그랬습니다 아직 위치값 객체로 선언하는게 낯서네요,,! compareTo 공부하기
🤔 시간복잡도 고려사항
💡 풀이 아이디어
4방향 탐색에서 BFS를 생각했는데, 문제의 요구사항에 맞게 구현하기 위해선 완전탐색을 해야했기 때문에 굳이 BFS 로 풀 이유가 없었음