아래 링크를 클릭해 새로운 블로그에서 더 많은 글을 만나보세요.
👉
이전 블로그 바로 가기
[Baekjoon] 29730/임스의 데일리 인증 스터디/javascript
💡 문제 설명
취업 준비생 임스는 취업 준비를 하면서 그날그날 무슨 공부를 하였는지 기록하기 위해 데일리 인증이라는 스터디를 시작했다. 임스는 매일 무슨 공부를 하였는지 적으면서 몇 개의 규칙을 정했다.
- 매일 꾸준히 백준 문제를 푼다.
- 백준 문제를 하루 $1$문제 이상 풀었고, 그 외의 다른 공부는 $0$개 이상 진행하였다. 다른 공부들은 영어 대소문자, 숫자, 공백으로만 이루어진 최대 길이 $100$의 문자열이다.
- 인증 기록으로는 백준 문제 링크를 제일 마지막에 작성하고, 그 외 학습 기록은 문자열 길이가 짧은 순으로 정렬해서 작성한다. 만약 문자열의 길이가 같다면, 사전 순으로 정렬한다.
- 문자는 아스키코드 기준으로 비교한다.
- 백준 문제 링크는 boj.kr/문제 번호 형식이다. 문제 번호가 작은 순서대로 정렬해서 작성한다. 문제 번호는 $1$ 이상 $30\,000$ 이하이다. 임스가 하루 동안 공부한 기록들이 정렬되지 않은 채로 주어졌을 때, 주어진 규칙에 맞게 정렬 후 출력한다.
📥 입력
첫 번째 줄에는 임스가 하루동안 공부한 기록의 개수 $N$이 주어진다. $(1 \le N \le 1\,000)$ 다음 $N$개의 줄에 임스가 하루동안 공부한 기록들이 한 줄에 하나씩 주어진다.
학습 기록은 공백으로 시작하거나 끝나지 않는다. 같은 공부 기록이 여러 번 주어질 수도 있다.
📤 출력
임스가 공부한 기록들을 주어진 규칙에 맞게 정렬 후 한 줄에 하나씩 출력한다.
📏 제한 사항
📥 예제 입력
3
boj.kr/1307
study gc
read book
📤 예제 출력
study gc
read book
boj.kr/1307
💡 풀이
✍️ 풀이과정
왜 쉽다! 했는데 정말정말 오래걸렸다. 이 문제에서 중복이 있다길래 처음에 중복을 제거해버렸고, 아스키코드가 아니라 유니코드로 정리했었다. 그래서 왜 틀렸지 머리를 싸맸다. 그런데 1~30000까지였는데 이건 검사안해도 통과되는거 보고 좀 신기했음. 문제 좀 똑바로 읽어야겠다.
📖내가 작성한 JS Code
const fs = require("fs");
const input = fs.readFileSync(0).toString().trim().split("\n");
let bojUrls = [];
const notInBaekjoonInput = input
.slice(1)
.map((el) => {
if (el.length > 6 && el.slice(0, 7) === "boj.kr/") {
const num = Number(el.slice(7));
if (!isNaN(num)) {
bojUrls.push(el);
return null;
}
}
return el;
})
.filter(Boolean)
.sort((a, b) => {
if (a.length !== b.length) {
return a.length - b.length;
}
if (a < b) return -1;
if (a > b) return 1;
return 0;
});
if (notInBaekjoonInput.length > 0) {
console.log(notInBaekjoonInput.join("\n"));
}
console.log(
bojUrls.sort((a, b) => Number(a.slice(7)) - Number(b.slice(7))).join("\n")
);
🧠 코드 리뷰
💻결과
⚡ Javascript
댓글남기기