졸리다...
할 일이 너무 많아서 슬퍼...
시간아... 나 좀 기다려줘(시간: 어림도 없지)
문제
https://www.acmicpc.net/problem/1181
이번에도 C++에서 풀었던 문제이다.
길이가 짧은 것부터, 길이가 같으면 사전 순으로~~
그리고 중복되는 값은 지워주어야 한다.
const fs = require('fs');
// 백준에 제출할 때 써야하는 것
//const readFileSyncAdress = '/dev/stdin';
const readFileSyncAdress = 'input.txt';
let input = fs.readFileSync(readFileSyncAdress).toString().trim().split('\n');
// 맨 앞의 숫자 없애기
input.shift();
//중복제거
arr = [...new Set(input)];
arr = arr.sort().sort((a,b)=>a.length-b.length).join('\n');
console.log(arr);
아... 오늘 입력값을 input.txt에 안 적고 어제 쓴 입력값을 그대로 썼다...ㅋㅋㅋㅋ(그러니까 틀리지)
자바스크립트는 뭔가 알 것 같으면서도 모르겠다.
Set은 클래스라서 new 키워드와 생성자를 사용하여 객체를 생성할 수 있다. Set는 배열과 비슷해보이지만 사실 결이 아주 다른 자료구조이다. Set은 데이터를 순서없이 저장하기 때문에 배열처럼 인덱스를 통해서 접근할 수 없다. 그리고 Set은 중복된 데이터를 허용하지 않는다. 즉, 기존에 Set에 있는 값을 또 추가하면 아무 효력이 발생하지 않는다.
참고한 블로그에서는 Set으로 중복을 없앤 후 sort 함수를 쓰기 위해 []을 이용해 배열로 바꿔주었다.
sort()를 문자열 배열에 호출할 경우 알파벳 순서(오름차순)로 정렬된다. 그러니 사전순으로 정렬한 후 length를 사용하여 길이가 짧은 순으로 정렬되도록 만들었다.
마지막으로 join을 통해 줄바꿈하여 출력되도록 만들었다.
내가 참고한 블로그에서는 localeCompare을 통해 사전순으로 정렬해주었다.
//입력받는 부분
const fs=require('fs')
const input=fs.readFileSync('example.txt','utf-8').toString().trim().split('\n')
//맨 앞 값을 지워준다. 배열의 길이는 함수를 이용하면 구할 수 있기 때문이다.
input.shift()
//array->Set->array 과정을 거쳐 중복 제거
s_arr=[...new Set(input)]
//뒤에 있는 조건이 사전순으로 정렬을 해준다.
s_arr = s_arr.sort((a,b)=>a.length - b.length || a.localeCompare(b)).join('\n')
console.log(s_arr)
허거덕~~~ 이분도 백준에 제출할 때 파일입출력을 바꿔주지 않아서 런타임 에러가 났다 ㅎㅎ.
....
슬프다... 만약에 틀린 부분을 못 찾았다면... 생각만 해도 슬프다.
자바스크립트 이녀석...!!
내가 다 뿌셔주겠어~~~~~!!!!
[참고] https://www.daleseo.com/js-set/
https://www.daleseo.com/js-sort-to-sorted/
https://velog.io/@hyeonzii/%EB%B0%B1%EC%A4%80JS-1181
https://codechacha.com/ko/javascript-sorting-arr/
https://mycodings.fly.dev/blog/2023-01-16-how-to-javascript-string-and-localecompare-method
'백준 > JavaScript' 카테고리의 다른 글
[JS] 백준 입출력과 사칙연산 - 두 번째 이야기 (4) | 2024.01.02 |
---|---|
[JS] 백준 입출력과 사칙연산 - 첫 번째 이야기 (2) | 2024.01.01 |
[JS] 백준 1427번 소트인사이드 (2) | 2023.12.30 |
[JS] 백준 2750번 수 정렬하기 (2) | 2023.12.29 |
[JS] 시작 (4) | 2023.12.11 |