✏️기록하는 즐거움
article thumbnail
반응형

1. Link

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

2. 문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오.
단, 대문자와 소문자를 구분하지 않는다.

입력 > 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력 > 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

<javascript />
Mississipi

4. | 예제 출력

<javascript />
?

 

5. 제출

1) 

<javascript />
const input = ( process.platform === "linux" ? require("fs").readFileSync("/dev/stdin").toString() : `Mississipi` ).trim(); const convertedStr = input.toUpperCase().split("").sort(); let count = 0; let max = 0; let maxStr = ""; for (let i = 0; i < convertedStr.length; i++) { if (i > 0 && convertedStr[i] !== convertedStr[i - 1]) { count = 0; count++; } else { count++; if (max < count) { max = count; maxStr = convertedStr[i]; } else if (max === count) { maxStr = "?"; } else { maxStr = maxStr; } } } console.log(maxStr);

 

2) 리팩토링

<javascript />
const input = ( process.platform === "linux" ? require("fs").readFileSync("/dev/stdin").toString() : `Mississipi` ).trim(); const usageStatus = {}; input .toUpperCase() .split("") .forEach((key) => { usageStatus[key] = (usageStatus[key] || 0) + 1; }); const sortedValue = Object.values(usageStatus).sort((a, b) => b - a); const maxValue = sortedValue[0]; const maxKey = sortedValue[0] === sortedValue[1] ? "?" : Object.keys(usageStatus).find((key) => usageStatus[key] === maxValue); console.log(maxKey);

 

6. 풀이과정

6.1. 첫 번째 제출 코드

대문자와 소문자의 구분 없이 가장 많이 사용된 알파벳을 대문자로 출력해야한다.

  • 입력 받은 문자열을 대문자로 변환한다.
  • 정렬 메소드인 sort를 사용하기 위해서 split을 사용하고, 정렬된 값을 convertedStr 배열로 만든다.
  • 앞 요소와는 다른 문자열이 나올 경우, count를 초기화한 뒤 더해주고,
  • 앞 요소와 같은 문자열이 반복될 경우, 최대 count 수와 비교하여 제일 많이 나온 문자열을 출력한다.

6.2. 두 번째 제출 코드

  • usageStatus object에 중복되는 요소의 개수를 저장한다.
  • usageStatus의 value 값에는 해당되는 알파벳이 사용된 개수가 저장되어있다.
  • 따라서, value값을 내림차순으로 정렬하여 첫 번째 요소를 maxValue로 지정한다.
  • 첫 번째 요소와 두 번째 요소가 같다면, 가장 많이 사용된 알파벳이 여러개 존재하는 것이므로 ?를,
  • 그렇지 않다면 find 메서드로 value 값을 이용해 가장 많이 나온 숫자의 key 값을 출력한다.

 

7.  

8. 개념

8.1. Object.keys()

  • 객체의 모든 키 값을 일반적인 반복문의 순서를 가진 배열로 반환한다.

8.2. Object.values()

  • 객체의 모든 속성 값을 for in 구문과 동일한 순서를 가진 배열로 반환한다.
  • for in 구문은 순서를 보장하지 않는다.

8.3. Array.prototype.find()

  • 주어진 콜백 함수에 만족하는 첫 번째 요소의 값을 반환하고 해당되는 값이 없을 시에는 undefinded를 반환한다.

 

더보기

9. Comment

 

반응형
profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!