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 값을 출력한다.
JS 배열 내 중복요소 찾기
실행 결과 위 코드를 실행시 JSON 형https://hianna.tistory.com/459
velog.io
https://velog.io/@try_catch/JS-value%EA%B0%92%EC%9C%BC%EB%A1%9C-key%EA%B0%92-%EC%B0%BE%EA%B8%B0
[JS] value값으로 key값 찾기!
저번부터 value값으로 key값을 찾고 싶은 경우가 있었는데, 방법을 찾지 못해서 우회하는 방법을 사용해왔었다. https://stackoverflow.com/questions/9907419/how-to-get-a-key-in-a-javascript-object-
velog.io
7.
8. 개념
8.1. Object.keys()
- 객체의 모든 키 값을 일반적인 반복문의 순서를 가진 배열로 반환한다.
8.2. Object.values()
- 객체의 모든 속성 값을 for in 구문과 동일한 순서를 가진 배열로 반환한다.
- for in 구문은 순서를 보장하지 않는다.
8.3. Array.prototype.find()
- 주어진 콜백 함수에 만족하는 첫 번째 요소의 값을 반환하고 해당되는 값이 없을 시에는 undefinded를 반환한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Object.keys() - JavaScript | MDN
Object.keys() 메소드는 주어진 객체의 속성 이름들을 일반적인 반복문과 동일한 순서로 순회되는 열거할 수 있는 배열로 반환합니다.
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/values
Object.values() - JavaScript | MDN
Object.values() 메소드는 전달된 파라미터 객체가 가지는 (열거 가능한) 속성의 값들로 이루어진 배열을 리턴합니다. 이 배열은 for...in 구문과 동일한 순서를 가집니다. (for in 반복문은 프로토타
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/find
Array.prototype.find() - JavaScript | MDN
find() 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환합니다.
developer.mozilla.org
9. Comment

'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2908: 상수 (javascript) (0) | 2022.07.05 |
---|---|
[백준] 1152: 단어의 개수 (javascript) (0) | 2022.07.05 |
[백준] 2675: 문자열 반복 (javascript) (0) | 2022.07.04 |
[백준] 10809: 알파벳 찾기 (javascript) (0) | 2022.06.28 |
[백준] 11720: 숫자의 합 (javascript) (0) | 2022.06.28 |