파란색 : 풀면서 어려웠던 부분 or 고려해야 될 부분
빨간색 : 해결방법
초록색 : 느낀점
문제
문자열 배열을 받아서 위에서 부터 차례대로 받는다고 생각하고, 입력된 문자열중에 같은 문자열이 있으면 문자열 끝에 '(1)'을 추가해준다. ex) a라는 문자열이 존재한 상태에서 a를 추가하면 새로 추가한 문자열은 a(1)이된다. 그 다음 다시 a를 넣으면 a가 있기 때문에 a(1)으로 바꿔준다. 그런데 또 a(1)이 있기 때문에 a(2)로 바꿔준다.
풀이 : 내가 작성한 코드
배열을 통째로 받지만 함수안에서 위에서부터 처음부터 받는다고 생각해야한다. 일단 문자열을 관리 할 수있는 컨테이너를 만든 뒤, 문자열을 하나 추가하면 그 컨테이너에서 새로 추가한 문자열이 중복이 있는지 체크한다. 그런데 여기서 한번 더 생각해야 할 것이 처삽입될 문자열을 바꾸고, 또 다시 컨테이너를 탐색해야한다. 컨테이너의 같은 문자열이 있을 수는 없기 떄문이다. for문으로 체크하기에는 배열의 인덱스와 요소 체크하기가 까다로울 것 같고, while문으로 삽입된 리스트들을 통째로 탐색하도록 한다.
count를 통해 같은 문자열의 갯수를 체크하고 문자열의 값을 변경하면서 while문을 통해 list를 탐색한다.
풀이 : 다른 사람이 작성한 코드
while(!set.Add(cade))를 통해 중복된 문자가있으면 카운트를 증가시키고 그렇지 않으면 set에 추가 하게된다. HashSet은 잘 사용하지 않았었는데 HashSet.Add에는 bool반환형이 있다. 추가되었으면 ture, 요소가 이미 있으면 false를 리턴한다.
'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글
프로그래머스_C#)체육복 (0) | 2019.08.26 |
---|---|
프로그래머스_C#)모의고사 (0) | 2019.08.22 |
05.07_CodeSignal(특수문자,띄어쓰기 제외하기) (0) | 2019.05.07 |
05.05_CodeSignal(문자열 속 숫자 뽑아내기) (0) | 2019.05.05 |
04.26_CodeSignal(시간:분/규칙) (0) | 2019.04.26 |