해결된 질문
작성
·
26
0
강사님 안녕하십니까!
수업 너무 재밌게 잘 듣고 있습니다.
4-F를 풀어보고 강사님 코드와 비교했을때 강사님 코드가 짧고 간결해 보입니다.
우선 제가 한 풀이는 비트마스킹으로 반드시 배워야할 단어 갯수 5개를 제외하고 나머지 단어들은 조합으로 고르고 나서 그 조합을 바탕으로 하나씩 대입해보는 구조로 로직을 구현했습니다.
저는 문제를 풀때 실력이 부족하여 묶어서 한번에 구현하는게 어렵게 느껴집니다. 그래서 이렇게 단계별로 로직을 짜서 중간에 테스트하면서 완성합니다. 허나 이렇게 풀이를 하였을 때 강사님 코드와 비교하면 항상 조금 더 코드가 길거나 복잡한 감이 있습니다.
우선 지금 문제를 제가 푼 풀이 방법으로 했을 때 문제점이 있을까요? 문제점이 없어도 강사님 코드처럼 간결하게 짜는 연습이 중요할까요? 코드 한번 봐주시고 평가해주시면 정말 감사하겠습니다!
http://boj.kr/e82932716dc04cf2804eba50bd7a2aa6
추가로 한달 전까지만 해도 자료구조, 알고리즘을 기초도 제대로 못 갖췄는데 항상 좋은 강의와 답변을 해주셔서 실력이 늘고 있습니다 중간 중간 풀이 팁들을 적용할때 마다 매번 감사함을 느낍니다 ㅎㅎ
그럼 좋은 하루 보내시길 바랍니다!
답변 1
0
안녕하세요 ㅎㅎ
코드 잘 짜셨네요 ㅎㅎ
저처럼 간결하게 짜는 것은 그렇게 중요하지 않습니다.
정확하고 효율적으로 짜는게 중요한데요 수강생님 코드는 그러한 코드인 것 같습니다.
void combi(int start, vector<int> &b){
if(b.size() == k-5){
k-5로 한 것 너무 좋습니다.
int solve(vector<int> b){
int cnt = 0;
int ret = (1 << 0) + (1 << 2) + (1 << 8) + (1 << 13) + (1<<19);
for(int i : b) ret|=(1 << i);
for(int i = 0; i < n; i++){
if( (ret | a[i]) <= ret) cnt ++;
}
return cnt;
}
solve 부분에서 비트연산자를 통해서 ret에 합집합을 만들고 카운팅 로직을 넣은 점. 훌륭합니다.
다만 저기서 b의 경우 다른 문제의 경우 더 많은 요소들을 가지고 있다면 -> &b로 넘기는게 더 효율적입니다.
이부분은 교안내의 다음 부분 참고부탁드립니다.
우선 지금 문제를 제가 푼 풀이 방법으로 했을 때 문제점이 있을까요? 문제점이 없어도 강사님 코드처럼 간결하게 짜는 연습이 중요할까요?
-> 문제점은 없습니다. 그냥 저의 코드라는 해결방안이 하나 더 있구나 생각하시면 됩니다.
combi() 의 경우 비트마스킹으로 하면 더 간결하게 할 수 있구나 하면서 현재 코드에서 -> for문을 사용한 비트마스킹으로 연습 2번정도만 하시면 될 것 같습니다.
그럼 좋은 하루 보내시길 바랍니다!
-> 도움이 되셨다니 저도 마음이 좋네요 ㅎㅎ 수강생님도 좋은 주말보내세요~
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.