일단 문제 이름이 너무 귀엽다! 폰켓몬!
프로그래머스 코딩테스트 level1에 해당하는 문제이다.
지난 글에서 푼 문제를 풀면서 순수 배열로만 구현하는데 너무 얽매여 있었나보다.
문제를 보자마자 배열로만 풀어야겠다는 생각밖에 하지 못했다ㅜㅜㅜㅜ
다른 사람들의 답을 보자마자 아차싶었다. hash, ArrayList로 구현한 답들이 대부분을 차지했다.
어쩐지...코드를 쓰면서 이게 맞나 싶었지만... 꾸역꾸역 순수 배열로 구현해버렸...ㄷ..ㅏ.... 코드에서 냄새가 난다.... 부끄러운 코드다...
한가지에 너무 몰입하지말고 여러가지 경우의 수를 생각해보고 코딩을 시작하자.
public int solution(int[] nums) {
int answer = 1;
int max=nums.length/2;
boolean flag=false;
int[] same=new int[nums.length];
same[0]=nums[0];
for(int i=1;i<nums.length;i++){
if(answer<max){
for(int j=0;j<same.length;j++){
if(nums[i]!=same[j]){
flag=true;
}else {
flag=false;
break;
}
}
if(flag) {
answer++;
same[answer]=nums[i];
flag=false;
}
}
else
break;
}
return answer;
}
소프트웨어공학이란 과목을 배우면서 flag를 최대한 안쓰도록 노력해야겠다고 생각했었다.
하지만 이 문제에서 배열로 구현하려면 flag가 필요한 것 같아서 사용하였다.
지난 문제를 풀며 for문안의 break문의 중요성을 까먹지 않고 넣었다!
위에서 언급했듯이 코드가 너무 거ㅈ...ㅣ...같아서 hash로 다시 풀어봐야겠다.
딱 hash쓰는 문제같으니!
공부를 하면 할수록 왜 알고리즘 테스트인지 피부로 와닿는다.
무작정 코드를 작성하는 것보다 충분히 생각하고 알고리즘을 설계한 후에 코드를 작성하는 것이 10배정도 빠르고 좋은 코드가 나온다.
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
프로그래머스 코딩테스트 문제: K번째수 (0) | 2020.03.06 |
---|---|
프로그래머스 코딩테스트 문제: 완주하지 못한 선수 (0) | 2020.03.06 |
프로그래머스 코딩테스트 문제: 제일 작은 수 제거하기 (0) | 2020.03.04 |
프로그래머스 코딩테스트 문제: 주식가격 (0) | 2020.03.04 |
프로그래머스 코딩테스트 문제: 탑 (0) | 2020.02.09 |