11/12 Daily Report
11/12 Daily Report
TIL(Today I Learn)
오늘 푼 문제 : BJ9663 - N_Queen
#include <iostream>
#define MAX 15
using namespace std;
int n, result = 0;
int arr[MAX];
bool check(int count){
for(int i=0; i<count; i++){
if(arr[count]==arr[i]||abs(arr[count]-arr[i])==count-i){
return false;
}
}
return true;
}
void N_Queen(int count){
if(count==n){
result++;
return;
}
for(int i=0; i<n; i++){
arr[count] = i;
if(check(count)){
N_Queen(count+1);
}
}
}
int main() {
cin >> n;
N_Queen(0);
cout << result;
}
진짜 며칠동안 머리 싸메다가 안되겠어서 친구의 도움을 조금 받고 마지막에 인터넷을 조금 찾아보고 풀었다.
처음엔 2차원 배열로 풀려다가 무조건 시간 초과가 뜰 것 같아서 고민하고 있었는데 친구의 조언 덕분에 굳이 2차원 배열이 아닌 1차원 배열로 풀어도 된다는 것을 생각해냈다.
그 후엔 시간이 좀 걸리긴 했지만 제대로 구현하는데 성공했고 예제에 대한 답도 나왔다. 그런데 내가 사용했던 방식은 bool check 함수를 만들어주는 것이 아니라 N_Queen함수에서 2중 for문을 쓰고 int check변수를 선언하여 다음에 오는 퀸이 이전 퀸들의 범위에 들어가지 않는지 확인했었다.
그래서 시간초과가 떴었고 인터넷을 찾아보고 위 코드처럼 바꾸어서 해결했다. 이 방법과 같이 적절하게 함수를 쓰는 것과 bool을 이용하여 조건을 만들어주는 걸 잘 활용해야겠다는 것을 느꼈다.
if(arr[count]==arr[i]||abs(arr[count]-arr[i])==count-i){
return false;
}
그리고 이 조건문에서 내가 처음 사용했던 방식은 abs를 사용하지 않고 각 상황에 대해서 조건을 만들어줬었는데 더 효율적인 방법이 있어서 참고하고 수정하였다.
잡담 + ~11/12까지 공부한 내용 요약
예 뭐 solved.ac 실버 2티어를 달성 했고요. 백준 계명대학교 소속 랭킹 30위에 진입했습니다! 요 근래 바빴어서 프로그래머스는 못 했고 저번 주에는 스터디도 참여 못했지만 문제는 꾸준히 풀었습니다.
아 그리고 바빴던 이유 중에 하나로 저번주 일요일(7일)에 밴드부 공연을 했습니다. 이번 달에 훈련소를 가면서 동아리를 나갈 계획이어서 마지막 공연이었는데 꽤 만족스럽게 끝이나서 뿌듯하기도 하고 이제 끝이라고 생각하니 시원섭섭하네요ㅎㅎ
뭐 이제는 스펙 쌓는데 더 집중해야죠. 취업은 해야하니ㅎㅎ…
Leave a comment