티스토리 뷰
문제 링크
20291번: 파일 정리
친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를
www.acmicpc.net
문제 설명
친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를 확인할 수 있었다.
바탕화면의 파일들에는 값진 보물에 대한 정보가 들어 있어. 하나라도 지우게 된다면 보물은 물론이고 다시는 노트북을 쓸 수 없게 될 거야. 파일들을 잘 분석해서 보물의 주인공이 될 수 있길 바랄게. 힌트는 “확장자”야.
화가 났던 스브러스는 보물 이야기에 금세 화가 풀렸고 보물의 정보를 알아내려고 애썼다. 하지만 파일이 너무 많은 탓에 이내 포기했고 보물의 절반을 보상으로 파일의 정리를 요청해왔다. 스브러스의 요청은 다음과 같다.
- 파일을 확장자 별로 정리해서 몇 개씩 있는지 알려줘
- 보기 편하게 확장자들을 사전 순으로 정렬해 줘
그럼 보물의 절반을 얻어내기 위해 얼른 스브러스의 노트북 파일 정리를 해줄 프로그램을 만들자!
문제 해설
1. 배열을 순회하면서 객체에 Key와 Value를 넣어준다.
2. 객체에 해당 배열 요소가 없다면 1로 초기화, 있다면 +1씩 해준다.
3. 마지막으로 객체 돌면서 배열에 [(키) (카운팅)] 형태로 넣어준다.
문제 풀이
배열 원소별 개수 세는 코드에서 아직 막힌다. (알긴아는데 생각나지 않는다 ㅠ 기억해두자!)
const input = require("fs")
// .readFileSync("example.txt")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
input.shift();
let fileObj = {};
let answer = [];
for (let i = 0; i < input.length; i++) {
const str = input[i].replace(/\r/g, "");
const fileExt = str.substring(str.lastIndexOf(".") + 1);
fileObj[fileExt] = fileObj[fileExt] ? fileObj[fileExt] + 1 : 1;
}
for (let i in fileObj) {
answer.push(i + " " + fileObj[i]);
}
console.log(answer.sort().join("\n"));
문제 풀이 (다른 사람 코드)
원래 나도 처음에 Map으로 풀려고 했다가 실패했는데 이렇게 하면 되는구나 싶었다.
확장자 찾는 방법도 split(".")으로 쉽게 구현하셨다.
너무 어렵게 생각한것같다.
const fs = require("fs");
const [N, ...files] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const map = new Map();
files.forEach((e) => {
map.set(e.split(".")[1], map.get(e.split(".")[1]) + 1 || 1);
});
const answer = [...map]
.sort(([name, value], [name2, value2]) => {
if (name > name2) return 1;
if (name < name2) return -1;
})
.map((e) => e.join(" "));
console.log(answer.join("\n"));
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 회고
- 프로그래머스
- 네트워크
- React.Memo
- 토이 프로젝트
- 코딩테스트
- 프로그래머스 데브코스 FE
- JavaScript
- 무한스크롤
- 웹 브라우저 객체
- 배열의 메서드
- jwt
- 노션 클로닝 프로젝트
- 프로그래머스 데브코스
- 리액트
- CORS
- 원티드 프리온보딩 챌린지
- propTypes
- 스코프
- 프로세스 동기화
- 알고리즘
- 번들러
- Recoil
- 프로젝트 회고
- 교착상태
- 호이스팅
- 라이프사이클
- useMemo
- 힙
- kdt
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함