[백준 - 구현] 1213번 팰린드롬 만들기

minjyo·2020년 10월 23일
0

알고리즘 풀이

목록 보기
1/7

백준 1213번 킹

내 코드


1. 구현 방법

  • 각 알파벳과 그의 개수를 TreeMap 에 저장한다. TreeMap은 key값을 기준으로 자동 정렬을 해준다.
  • 각 알파벳의 개수가 모두 짝수이거나, 1개만 홀수이고 나머지가 전부 짝수인지 검사한다. 이를 만족하지 않으면 프로그램을 종료한다.
  • 알파벳의 개수가 1개인 경우, 맨 마지막에 문자열의 가운데에 해당 알파벳을 넣어준다.
  • 알파벳의 개수만큼 문자열의 맨 처음과 맨 끝부터 가운데로 오며 해당 알파벳을 채워준다. (p[i], p[n-i-1])
  • 알파벳의 개수가 3개 이상의 홀수의 경우, (채운 알파벳의 개수) = (알파벳의 총 개수 - 1) 이면 반복문을 종료하고 맨 마지막에 문자열의 가운데에 해당 알파벳을 넣어준다.


2. 놓쳤던 점

for(int cnt=0; cnt<map.get(key); cnt++){
		.....
}

(1) 다음과 같이 cnt++ 을 이용하여 for문을 사용하면, 반복문이 한 번 돌 때마다 실제 사용한 알파벳의 개수는 2개지만 코드상으로는 1개로 저장된다. 간단한 오류이지만 실수하니 쉬우니 조심하도록 하자.

while(cnt<map.get(key)) {
	if(key==alpha && map.get(key)==1) break; //cnt==1 should be middle in array			p[i]=key;
	p[n-i-1]=key;
				
    	cnt+=2; //use 2 place			
    	i++;
				
	if(key==alpha && cnt==map.get(key)-1) break; //last odd alpha should be middle in array
}

(2) 조건문에 cnt==map.get(key)-1 을 넣어주지 않으면 n개인 알파벳이 문자열에는 n+2개로 채워지니 조심하자.

profile
깊게 공부하는 개발자가 되기

0개의 댓글

관련 채용 정보