Guest User

Untitled

a guest
Nov 21st, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. public static String problem01(String str){
  2.  
  3. final int defaultCountVal = 1;
  4. // String str = "abbaccchhaa";
  5. // str = "a";
  6.  
  7. StringBuffer stb = new StringBuffer();
  8. int arrFirstIdx = 0;
  9.  
  10. // str.length 가 65535가 넘어가면 아래 로직은 사용할 수 없다.
  11. char[] strArr = str.toCharArray(); // 문자열을 char 배열로 변경.
  12. System.out.println("strArr.length : ["+strArr.length+"]");
  13. char lastVal = strArr[arrFirstIdx]; // 반복문이 완료된 후에 마지막 문자열과 비교해서 합산.
  14. char tmp = 32; // 빈 값.
  15. int cnt = str.length();
  16. int charCount = defaultCountVal; // 문자열이 변경되기 전까지의 횟수를 카운팅.
  17. int firstCharCount = arrFirstIdx;
  18. int i=arrFirstIdx;
  19. int changeCount = 0;
  20.  
  21. // 값이 1개일 경우 for문 전에 처리.
  22. if(strArr.length == 1){
  23. stb.append(defaultCountVal);
  24. stb.append(strArr[arrFirstIdx]);
  25. return stb.toString();
  26. }
  27.  
  28. for(i=arrFirstIdx; i<cnt; i++){
  29. tmp = strArr[i]; // 현재 값을 임시로 담아둔다.
  30. if(lastVal == strArr[i]){
  31. firstCharCount++;
  32. }
  33. if(charCount == defaultCountVal){
  34. // 임시값이 변경된 후이거나 맨 처음 값인 경우므로 stb에 첫 문자열을 추가한다.
  35. stb.append(strArr[i]);
  36. changeCount++;
  37.  
  38. }
  39. if(strArr.length > i+1 && tmp == strArr[i+1]){ // 이전 For문에서 임시로 담아둔 값을 현재 값과 비교.
  40. // 비교 결과가 같은 경우 charCount++
  41. charCount++;
  42. } else {
  43. // 반복문이 다 돌고난 후 첫 번째 값에 대한 처리.
  44. if(strArr.length == i+1 ){
  45. if(tmp == lastVal){
  46. charCount++;
  47. // 비교 결과가 다른 경우 지금까지 카운팅한 숫자를 버퍼에 담는다.
  48. // 그리고 카운트 하는 변수를 기본값 으로 초기화 한다.
  49. stb.append(String.valueOf(charCount));
  50. charCount = defaultCountVal;
  51. }else{
  52. // 첫 번째 값과 마지막 값이 다른 경우 합산된 마지막 값의 개수 추가 한다.
  53. stb.append(String.valueOf(charCount));
  54.  
  55. // 첫번째 값에 대한 값 추가.
  56. stb.append(lastVal);
  57. stb.append(String.valueOf(firstCharCount));
  58. charCount = defaultCountVal;
  59. }
  60. }else{
  61. // 비교 결과가 다른 경우 지금까지 카운팅한 숫자를 버퍼에 담는다.
  62. // 그리고 카운트 하는 변수를 기본값 으로 초기화 한다.
  63. stb.append(String.valueOf(charCount));
  64. charCount = defaultCountVal;
  65. }
  66. }
  67. }
  68. if(changeCount > 1){
  69. stb.delete(arrFirstIdx, 2);
  70. }
  71.  
  72. System.out.println(changeCount);
  73. return stb.toString();
  74. }
Add Comment
Please, Sign In to add comment