From 7e3b192a656bef15dda837dc465a0abd0e347393 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Fri, 27 Jan 2023 16:24:42 +0900 Subject: [PATCH 01/13] feat: Migration to TS --- .vscode/settings.json | 11 ++ package-lock.json | 289 +++++++++++++++++++++++++++++++++++++++++- package.json | 5 +- tsconfig.json | 103 +++++++++++++++ 4 files changed, 406 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 tsconfig.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..fd67ac9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true, + "**/node_modules": true + } +} diff --git a/package-lock.json b/package-lock.json index defa49e..3cff13a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,96 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "@types/node": "^18.11.18", "axios": "^1.1.2", "cheerio": "^1.0.0-rc.10", "node-fetch": "^3.2.3", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "ts-node": "^10.9.1", + "typescript": "^4.9.4" }, "devDependencies": { "husky": "^8.0.1", "lint-staged": "^13.0.3" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -71,6 +151,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -228,6 +313,11 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -301,6 +391,14 @@ "node": ">=0.4.0" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -849,6 +947,11 @@ "node": ">=8" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -1257,6 +1360,48 @@ "node": ">=8.0" } }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -1274,6 +1419,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -1387,9 +1549,79 @@ "engines": { "node": ">= 14" } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } } }, "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -1421,6 +1653,11 @@ "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", "dev": true }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -1542,6 +1779,11 @@ "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", "dev": true }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1589,6 +1831,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -1952,6 +2199,11 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -2224,6 +2476,26 @@ "is-number": "^7.0.0" } }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -2235,6 +2507,16 @@ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -2314,6 +2596,11 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" } } } diff --git a/package.json b/package.json index b2b5bef..0d04bce 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,13 @@ }, "homepage": "https://github.com/codeisneverodd/programmers-coding-test#readme", "dependencies": { + "@types/node": "^18.11.18", "axios": "^1.1.2", "cheerio": "^1.0.0-rc.10", "node-fetch": "^3.2.3", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "ts-node": "^10.9.1", + "typescript": "^4.9.4" }, "devDependencies": { "husky": "^8.0.1", diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..baca310 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,103 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */, + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./built" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} From 3092c8399ab92521fcec886261834bd310b52fd0 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Sat, 28 Jan 2023 01:27:06 +0900 Subject: [PATCH 02/13] feat: refine solutions db and add logic --- .prettierrc.json | 2 +- api.json | 1936 ------------ build/newSol.json | 27 + build/results/db.json | 2795 +++++++++++++++++ build/run.js | 1 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 4 + .../codeisneverodd.js" | 4 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 6 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 5 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 4 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 22 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - ...4 \354\225\204\354\235\264\353\224\224.js" | 3 + .../level-1/2016\353\205\204/chaerin-dev.js" | 12 + .../2016\353\205\204/prove-ability.js" | 15 + .../level-1/2016\353\205\204/yongchanson.js" | 15 + .../codeisneverodd.js" | 17 + .../jaewon1676.js" | 7 + .../prove-ability.js" | 3 + .../chaerin-dev.js" | 13 + .../createhb21.js" | 11 + .../jaewon1676.js" | 13 + .../prove-ability.js" | 9 + .../jaewon1676.js" | 28 - .../codeisneverodd.js" | 24 + .../jaewon1676.js" | 22 + .../chaerin-dev.js" | 11 + .../jaewon1676.js" | 9 + .../prove-ability.js" | 11 + .../chaerin-dev.js" | 6 + .../jaewon1676.js" | 10 + .../prove-ability.js" | 11 + .../yongchanson.js" | 10 + .../chaerin-dev.js" | 7 + .../codeisneverodd.js" | 9 + .../prove-ability.js" | 17 + .../codeisneverodd.js" | 19 + .../prove-ailbity.js" | 5 + .../jaewon1676.js" | 9 + .../prove-ability.js" | 13 + .../\353\202\264\354\240\201/chaerin-dev.js" | 3 + .../\353\202\264\354\240\201/jaewon1676.js" | 8 + .../prove-ability.js" | 10 + .../\353\202\264\354\240\201/yongchanson.js" | 9 + .../prove-ability.js" | 12 + .../chaerin-dev.js" | 8 + .../jaewon1676.js" | 12 + .../prove-ability.js" | 4 + .../chaerin-dev.js" | 11 + .../codeisneverodd.js" | 29 + .../jaewon1676.js" | 21 + .../prove-ability.js" | 24 + .../yongchanson.js" | 30 + .../chaerin-dev.js" | 22 + .../jaewon1676.js" | 24 + .../prove-ability.js" | 36 + .../yongchanson.js" | 21 + .../chaerin-dev.js" | 9 + .../prove-ability.js" | 8 + .../yongchanson.js" | 7 + .../chaerin-dev.js" | 10 + .../prove-ability.js" | 11 + .../chaerin-dev.js" | 5 + .../jaewon1676.js" | 7 + .../prove-ability.js" | 4 + .../chaerin-dev.js" | 12 + .../prove-ability.js" | 14 + .../soulhn.js" | 6 + .../yongchanson.js" | 11 + .../chaerin-dev.js" | 4 + .../jaewon1676.js" | 3 + .../prove-ability.js" | 5 + .../chaerin-dev.js" | 8 + .../jaewon1676.js" | 11 + .../prove-ability.js" | 9 + .../yongchanson.js" | 16 + .../chaerin-dev.js" | 4 + .../jaewon1676.js" | 7 + .../prove-ability.js" | 4 + .../codeisneverodd.js" | 11 + .../codisneverodd.js" | 14 + .../ssi02014.js" | 42 + .../chaerin-dev.js" | 31 + .../jaewon1676.js" | 27 + .../chaerin-dev.js" | 18 + .../jaewon1676.js" | 18 + .../prove-ability.js" | 20 + .../chaerin-dev.js" | 5 + .../jaewon1676.js" | 9 + .../prove-ability.js" | 7 + .../yongchanson.js" | 3 + .../chaerin-dev.js" | 15 + .../codeisneverodd.js" | 23 + .../jaewon1676.js" | 18 + .../yongchanson.js" | 20 + .../ssi02014.js" | 3 - .../chaerin-dev.js" | 25 + .../jaewon1676.js" | 24 + .../prove-ability.js" | 18 + .../chaerin-dev.js" | 58 + .../jaewon1676.js" | 30 + .../prove-ability.js" | 28 + .../chaerin-dev.js" | 45 + .../codeisneverodd.js" | 27 + .../jaewon1676.js" | 31 + .../codeisneverodd.js" | 21 + .../jaewon1676.js" | 39 - .../codeisneverodd.js" | 15 + .../jaewon1676.js" | 14 + .../prove-bility.js" | 17 + .../chaerin-dev.js" | 12 + .../jaewon1676.js" | 16 + .../prove-ability.js" | 8 + .../yongchanson.js" | 18 + .../chaerin-dev.js" | 7 + .../codeisneverodd.js" | 8 + .../prove-ability.js" | 10 + .../yongchanson.js" | 23 + .../\354\230\210\354\202\260/jaewon1676.js" | 33 - .../prove-ability.js" | 16 + .../chaerin-dev.js" | 17 + .../hyosung.js" | 31 + .../jaewon1676.js" | 20 + .../chaerin-dev.js" | 13 + .../codeisneverod.js" | 8 + .../jaewon1676.js" | 13 + .../prove-ability.js" | 9 + .../chaerin-dev.js" | 18 + .../jaewon1676.js" | 35 + .../prove-ability.js" | 12 + .../chaerin-dev.js" | 9 + .../prove-ability.js" | 9 + .../chaerin-dev.js" | 8 + .../jaewon1676.js" | 8 + .../prove-ability.js" | 12 + .../yongchanson.js" | 9 + .../chaerin-dev.js" | 9 + .../prove-ability.js" | 4 + .../chaerin-dev.js" | 7 + .../jaewon1676.js" | 7 + .../prove-ability.js" | 9 + .../yongchanson.js" | 5 + .../chaerin-dev.js" | 7 + .../jaewon1676.js" | 12 + .../prove-ability.js" | 12 + .../chaerin-dev.js" | 18 + .../prove-ability.js" | 19 + .../yongchanson.js" | 12 + .../chaerin-dev.js" | 4 + .../jaewon1676.js" | 7 + .../prove-ability.js" | 4 + .../yongchanson.js" | 3 + .../chaerin-dev.js" | 35 + .../jaewon1676.js" | 24 + .../prove-ability.js" | 37 + .../chaerin-dev.js" | 9 + .../yongchanson.js" | 9 + .../prove-ability.js" | 10 - .../chaerin-dev.js" | 21 + .../jaewon1676.js" | 12 + .../prove-ability.js" | 17 + .../yongchanson.js" | 8 + .../chaerin-dev.js" | 26 + .../jaewon1676 .js" | 30 + .../chaerin-dev.js" | 39 - .../chaerin-dev.js" | 7 + .../jaewon1676.js" | 8 + .../prove-ability.js" | 7 + .../chaerin-dev.js" | 11 + .../jaewon1676.js" | 12 + .../prove-ability.js" | 15 + .../yongchanson.js" | 8 + .../chaerin-dev.js" | 13 + .../jaewon1676.js" | 11 + .../prove-ability.js" | 11 + .../chaerin-dev.js" | 7 + .../prove-ability.js" | 6 + .../chaerin-dev.js" | 12 + .../codeisneverodd.js" | 13 + .../yongchanson.js" | 11 + ...4 \354\225\204\354\235\264\353\224\224.js" | 3 + .../RyanDeclan.js" | 18 + .../codeisneverodd.js" | 15 + .../jaewon1676.js" | 12 + .../jaewon1676.js" | 3 - .../le2sky.js" | 3 - .../codeisneverodd.js" | 3 - .../level-2/H-Index/codeisneverodd.js | 12 + build/solutions/level-2/H-Index/jaewon1676.js | 11 + .../RyanDeclan.js" | 9 + .../codeisneverodd.js" | 7 + .../jaewon1676.js" | 14 + .../yongchanson.js" | 12 + .../level-2/N-Queen/codeisneverodd.js | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 25 + .../jaewon1676.js" | 29 - .../codeisneverodd.js" | 19 + .../jaewon1676.js" | 23 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../minjongbaek.js" | 3 - .../codeisneverodd.js" | 24 - .../ssi02014.js" | 20 + .../codeisneverodd.js" | 3 - .../minjongbaek.js" | 3 - .../jaewon1676.js" | 3 - .../codeisneverodd.js" | 15 + .../createhb21.js" | 7 + .../prove-ability.js" | 3 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../prove-ability.js" | 2 - .../codeisneverodd.js" | 28 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../iHoHyeon.js" | 21 + .../jaewon1676.js" | 17 + .../prove-ability.js" | 23 + .../RyanDeclan.js" | 35 + .../chaerin-dev.js" | 26 + ...1\353\217\204 \352\260\220\354\206\214.js" | 17 + .../codeisneverodd.js" | 20 + .../createhb21.js" | 25 + .../jaewon1676.js" | 22 + .../codeisneverodd.js" | 12 + .../jaewon1676.js" | 23 + .../codeisneverodd.js" | 20 + .../prove-ability.js" | 15 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 8 + .../jaewon1676.js" | 12 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 17 + .../jaewon1676.js" | 15 + .../yongchanson.js" | 11 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../chaerin-dev.js" | 28 - .../codeisneverodd.js" | 24 + .../codeisneverodd.js" | 3 - .../pereng11 O(N * N);.js" | 53 + .../\353\260\260\353\213\254/pereng11.js" | 58 - .../minjongbaek.js" | 3 - .../codeisneverodd.js" | 17 + .../jaewon1676.js" | 21 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../iHoHyeon.js" | 3 - .../codeisneverodd.js" | 15 + .../prove-ability.js" | 16 + .../yongchanson.js" | 16 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 13 + .../le2sky.js" | 17 - .../chaerin-dev.js" | 41 - .../codeisneverodd.js" | 15 + .../jaewon1676.js" | 21 + .../\354\234\204\354\236\245/chaerin-dev.js" | 18 + .../codeisneverodd.js" | 13 + .../\354\234\204\354\236\245/hyosung.js" | 20 + .../\354\234\204\354\236\245/jaewon1676.js" | 22 + .../RyanDeclan.js" | 10 + .../codeisneverodd.js" | 14 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 13 + .../yongchanson.js" | 8 + .../codeisneverodd.js" | 3 - .../ljw0096.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 15 + .../jaewon1676.js" | 19 + .../codeisneverodd.js" | 7 + .../jaewon1676.js" | 8 + .../prove-ability.js" | 5 + .../yongchanson.js" | 6 + .../codeisneverodd.js" | 8 + .../prove-ability.js" | 12 + .../yongchanson.js" | 5 + .../codeisneverodd.js" | 13 + .../\354\271\264\355\216\253/jaewon1676.js" | 17 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 15 + .../jaewon1676.js" | 17 + .../codeisneverodd.js" | 13 + .../ssi02014.js" | 20 + .../\355\212\234\355\224\214/chaerin-dev.js" | 15 - .../codeisneverodd.js" | 11 + .../codeisneverodd.js" | 47 + .../createhb21.js" | 19 + .../jaewon1676.js" | 22 + .../pereng11.js" | 3 - .../codeisneverodd.js" | 16 - .../jaewon1676.js" | 12 + .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 13 + .../prove-ability.js" | 16 + .../codeisneverodd.js" | 3 - ...4 \354\225\204\354\235\264\353\224\224.js" | 3 + .../jaewon1676.js" | 3 - .../level-3/N-Queen/codeisneverodd.js | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 3 - .../codeisneverodd.js" | 20 + .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 3 - .../codeisneverodd.js" | 3 - ...4 \354\225\204\354\235\264\353\224\224.js" | 3 + .../ryong9rrr.js" | 3 - .../codeisneverodd.js" | 3 - .../ryong9rrr.js" | 3 - .../cg10036.js" | 3 - ...4 \354\225\204\354\235\264\353\224\224.js" | 3 + build/utils/db.js | 41 + build/utils/file.js | 26 + .../369\352\262\214\354\236\204&120891&.js" | 6 - ...5\230-\352\260\234\354\210\230&120912&.js" | 6 - ...63\240\353\245\264\352\270\260&120905&.js" | 6 - ...0\224\354\234\204-\353\263\264&120839&.js" | 7 - ...0\230-\354\260\276\352\270\260&120899&.js" | 7 - ...65\254\355\225\230\352\270\260&120810&.js" | 6 - ...5\264-\354\266\234\353\240\245&120820&.js" | 6 - ...0\230\354\235\230-\352\263\261&120804&.js" | 6 - ...02\230\353\210\227\354\205\210&120806&.js" | 6 - ...0\230\354\235\230-\354\260\250&120803&.js" | 6 - ...0\230\354\235\230-\355\225\251&120802&.js" | 6 - ...1\260-\354\202\254\353\236\214&120585&.js" | 6 - ...5\214-\354\240\234\352\261\260&120849&.js" | 6 - ...65\254\355\225\230\352\270\260&120805&.js" | 6 - ...40\245\355\225\230\352\270\260&120825&.js" | 6 - ...02\260\355\225\230\352\270\260&120902&.js" | 6 - ...22\244\354\247\221\352\270\260&120822&.js" | 6 - ...54\355\225\230\352\270\260-(1)&120850&.js" | 9 - ...54\270\354\236\220\354\227\264&120908&.js" | 6 - ...47\214\353\223\244\352\270\260&120809&.js" | 6 - ...22\244\354\247\221\352\270\260&120821&.js" | 6 - ...5\230-\352\270\270\354\235\264&120854&.js" | 6 - ...36\220\353\245\264\352\270\260&120833&.js" | 6 - ...34\240\354\202\254\353\217\204&120903&.js" | 6 - ...17\211\352\267\240\352\260\222&120817&.js" | 6 - ...61\354\241\260\352\261\264-(2)&120868&.js" | 14 - ...7\240-\354\246\235\354\213\235&120910&.js" | 6 - ...0-\353\215\247\354\205\210-(1)&120851&.js" | 6 - ...65\220\355\225\230\352\270\260&120807&.js" | 6 - ...46\254\354\271\264\353\205\270&120819&.js" | 6 - ...0\270-\355\225\264\353\217\205&120892&.js" | 6 - ...26\221\352\274\254\354\271\230&120830&.js" | 6 - ...5\230-\353\202\230\354\235\264&120834&.js" | 6 - ...15\224\355\225\230\352\270\260&120885&.js" | 6 - ...15\224\355\225\230\352\270\260&120906&.js" | 6 - ...65\254\355\225\230\352\270\260&120841&.js" | 8 - ...63\204\355\225\230\352\270\260&120909&.js" | 6 - ...36\220\353\245\264\352\270\260&120922&.js" | 6 - ...5\230-\352\260\234\354\210\230&120845&.js" | 6 - ...6\220-\354\240\234\352\261\260&120888&.js" | 6 - ...6\220-\352\260\234\354\210\230&120583&.js" | 6 - ...65\254\355\225\230\352\270\260&120811&.js" | 6 - ...214\353\223\244\352\270\260(1)&120847&.js" | 7 - ...5\230-\354\242\214\355\221\234&120861&.js" | 43 - ...61\260\355\225\230\352\270\260&120826&.js" | 6 - "level-0/\355\216\270\354\247\200&120898&.js" | 6 - ...0-\353\250\271\352\270\260-(1)&120814&.js" | 6 - ...0-\353\250\271\352\270\260-(3)&120816&.js" | 6 - ...4\353\213\265-\354\230\210\354\213\234.js" | 11 - "level-1/2016\353\205\204&12901&.js" | 65 - ...222\244\354\247\221\352\270\260&68935&.js" | 37 - ...262\210\354\247\270\354\210\230&42748&.js" | 60 - ...260\200\354\247\200\353\217\204&17681&.js" | 62 - ...35\230-\354\210\253\354\236\220&12954&.js" | 41 - ...240\270\354\230\244\352\270\260&12903&.js" | 50 - ...12\224-\354\213\253\354\226\264&12906&.js" | 43 - ...36\220-\353\260\260\354\227\264&12910&.js" | 35 - ...10\230-\354\260\276\352\270\260&87389&.js" | 36 - "level-1/\353\202\264\354\240\201&70128&.js" | 41 - ...215\224\355\225\230\352\270\260&68644&.js" | 26 - ...35\264\354\235\230-\355\225\251&12912&.js" | 47 - ...40\200-\354\210\234\354\234\204&77484&.js" | 151 - ...235\230\352\263\240\354\202\254&42840&.js" | 135 - ...35\230-\352\260\234\354\210\230&12916&.js" | 36 - ...240\254\355\225\230\352\270\260&12915&.js" | 35 - ...271\230\355\225\230\352\270\260&12917&.js" | 39 - ...70\260-\352\270\260\353\263\270&12918&.js" | 54 - ...260\224\352\276\270\352\270\260&12925&.js" | 22 - ...202\260\355\225\230\352\270\260&82612&.js" | 57 - ...60\251-\354\260\276\352\270\260&12919&.js" | 25 - ...02\254\355\225\230\352\270\260&118666&.js" | 72 - ...247\214\353\223\244\352\270\260&12977&.js" | 85 - ...10\230-\354\260\276\352\270\260&42839&.js" | 100 - ...30\353\260\225\354\210\230?&12922&.js" | 39 - ...230\201\353\213\250\354\226\264&81301&.js" | 102 - ...40\200-\354\225\224\355\230\270&12926&.js" | 88 - ...63\274-\353\260\233\352\270\260&92334&.js" | 167 - ...24\224-\354\266\224\354\262\234&72410&.js" | 123 - ...31\200-\353\215\247\354\205\210&77884&.js" | 60 - ...10\230\354\235\230-\355\225\251&12928&.js" | 69 - ...215\224\355\225\230\352\270\260&86051&.js" | 59 - ...25\234-\354\204\240\354\210\230&42576&.js" | 83 - ...215\224\355\225\230\352\270\260&76501&.js" | 69 - ...247\214\353\223\244\352\270\260&12930&.js" | 87 - ...215\224\355\225\230\352\270\260&12931&.js" | 39 - ...247\214\353\223\244\352\270\260&12932&.js" | 66 - ...271\230\355\225\230\352\270\260&12933&.js" | 28 - ...67\274-\355\214\220\353\263\204&12934&.js" | 39 - ...261\260\355\225\230\352\270\260&12935&.js" | 68 - ...263\204\354\260\215\352\270\260&12969&.js" | 54 - ...31\200-\355\231\200\354\210\230&12937&.js" | 29 - ...262\264\354\234\241\353\263\265&42862&.js" | 127 - ...263\265\353\260\260\354\210\230&12940&.js" | 33 - ...70\240-\354\266\224\354\270\241&12943&.js" | 75 - ...70\260-\352\262\214\354\236\204&64061&.js" | 84 - ...265\254\355\225\230\352\270\260&12944&.js" | 32 - ...\217\260\354\274\223\353\252\254&1845&.js" | 59 - ...03\244\353\223\234-\354\210\230&12947&.js" | 50 - ...260\200\353\246\254\352\270\260&12948&.js" | 22 - ...35\230-\353\215\247\354\205\210&12950&.js" | 50 - ...4\353\213\265-\354\230\210\354\213\234.js" | 11 - ...35\230-\354\210\253\354\236\220&12899&.js" | 62 - level-2/H-Index&42747&.js | 37 - ...247\214\353\223\244\352\270\260&12951&.js" | 48 - ...6\245-\355\201\260-\354\210\230&42746&.js" | 53 - ...252\205\353\263\264\355\212\270&42885&.js" | 66 - ...212\245\352\260\234\353\260\234&42586&.js" | 153 - ...12\224-\355\212\270\353\237\255&42583&.js" | 55 - ...01\260-\354\210\253\354\236\220&12911&.js" | 50 - ...202\254\352\260\201\355\230\225&62048&.js" | 65 - ...35\230-\355\221\234\355\230\204&12924&.js" | 52 - ...45\270-\352\264\204\355\230\270&12909&.js" | 12 - "level-2/\354\234\204\354\236\245&42578&.js" | 89 - ...60\204-\354\235\264\353\217\231&12980&.js" | 25 - ...261\260\355\225\230\352\270\260&12973&.js" | 47 - ...265\234\354\206\237\352\260\222&12939&.js" | 40 - ...247\214\353\223\244\352\270\260&12941&.js" | 30 - ...247\214\353\223\244\352\270\260&42883&.js" | 36 - ...62\237-\353\204\230\353\262\204&43165&.js" | 46 - ...224\204\353\246\260\355\204\260&42587&.js" | 136 - ...35\230-\352\263\261\354\205\210&12949&.js" | 33 - ...4\353\213\265-\354\230\210\354\213\234.js" | 11 - ...212\270\354\225\250\353\262\224&42579&.js" | 48 - ...4\353\213\265-\354\230\210\354\213\234.js" | 11 - ...4\353\213\265-\354\230\210\354\213\234.js" | 11 - package-lock.json | 17 + package.json | 1 + run.ts | 3 + tsconfig.json | 118 +- utils/db.ts | 64 + utils/file.ts | 33 + 544 files changed, 6626 insertions(+), 7570 deletions(-) delete mode 100644 api.json create mode 100644 build/newSol.json create mode 100644 build/results/db.json create mode 100644 build/run.js rename "level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" => "build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" (59%) create mode 100644 "build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" create mode 100644 "build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" rename "level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" => "build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" (58%) rename "level-0/OX\355\200\264\354\246\210&120907&.js" => "build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" (55%) rename "level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" => "build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" (57%) create mode 100644 "build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" rename "level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" => "build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" (58%) create mode 100644 "build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" rename "level-0/\352\260\201\353\217\204\352\270\260&120829&.js" => "build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" (51%) rename "level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" => "build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" (60%) rename "level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" => "build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" (67%) rename "level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" => "build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" (61%) rename "level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" => "build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" (64%) create mode 100644 "build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" rename "level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" => "build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" (64%) rename "level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" => "build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" (80%) rename "level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" => "build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220/codeisneverodd.js" (54%) create mode 100644 "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" rename "level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" => "build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" (74%) rename "level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" => "build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" (61%) create mode 100644 "build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" rename "level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" => "build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" (76%) create mode 100644 "build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" rename "level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" (64%) create mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" rename "level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" (56%) create mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" rename "level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" => "build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" (60%) create mode 100644 "build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" rename "level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" => "build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" (67%) rename "level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" => "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" (50%) create mode 100644 "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" rename "level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" => "build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" (81%) rename "level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" => "build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" (59%) create mode 100644 "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" rename "level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" => "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" (54%) create mode 100644 "build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" rename "level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" => "build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" (50%) create mode 100644 "build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" rename "level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" => "build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" (82%) create mode 100644 "build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" rename "level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" => "build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" (67%) create mode 100644 "build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" rename "level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" => "build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" (60%) rename "level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" => "build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" (67%) rename "level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" => "build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" (62%) rename "level-0/\354\230\271\354\225\214\354\235\264&120956&.js" => "build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" (78%) rename "level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" => "build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" (60%) create mode 100644 "build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264/codeisneverodd.js" rename "level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" => "build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" (81%) create mode 100644 "build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename "level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" => "build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" (54%) create mode 100644 "build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename "level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" => "build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" (57%) rename "level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" => "build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" (58%) create mode 100644 "build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" create mode 100644 "build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename "level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" => "build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" (71%) rename "level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" => "build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" (67%) rename "level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" => "build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" (55%) rename "level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" => "build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" (54%) rename "level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" => "build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" (52%) rename "level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" => "build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" (51%) create mode 100644 "build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" rename "level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" => "build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" (58%) rename "level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" => "build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" (70%) rename "level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" => "build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" (64%) create mode 100644 "build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" rename "level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" => "build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" (58%) rename "level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" => "build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" (61%) create mode 100644 "build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" rename "level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" => "build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" (64%) create mode 100644 "build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" rename "level-0/\355\217\211\355\226\211&120875&.js" => "build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" (76%) create mode 100644 "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" rename "level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" => "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" (60%) create mode 100644 "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" rename "level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" => "build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" (67%) rename "level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" => "build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" (68%) create mode 100644 "build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" create mode 100644 "build/solutions/level-1/2016\353\205\204/chaerin-dev.js" create mode 100644 "build/solutions/level-1/2016\353\205\204/prove-ability.js" create mode 100644 "build/solutions/level-1/2016\353\205\204/yongchanson.js" create mode 100644 "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" create mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" create mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" create mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" rename "level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" => "build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" (56%) create mode 100644 "build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" create mode 100644 "build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" create mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" create mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" create mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" create mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" create mode 100644 "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" create mode 100644 "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/yongchanson.js" create mode 100644 "build/solutions/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" create mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" create mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" create mode 100644 "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" create mode 100644 "build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" create mode 100644 "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" rename "level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" => "build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" (83%) create mode 100644 "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" rename "level-1/\354\213\244\355\214\250\354\234\250&42889&.js" => "build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" (53%) create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" create mode 100644 "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" rename "level-1/\354\230\210\354\202\260&12982&.js" => "build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" (50%) create mode 100644 "build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" create mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" create mode 100644 "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" create mode 100644 "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" create mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" create mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" rename "level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" => "build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" (66%) create mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" create mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" create mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" create mode 100644 "build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" rename "level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" => "build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" (76%) create mode 100644 "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" create mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" create mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" create mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" create mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" create mode 100644 "build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" create mode 100644 "build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" create mode 100644 "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" create mode 100644 "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" create mode 100644 "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" rename "level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" => "build/solutions/level-2/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" (79%) rename "level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" => "build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" (75%) rename "level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" => "build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" (71%) create mode 100644 build/solutions/level-2/H-Index/codeisneverodd.js create mode 100644 build/solutions/level-2/H-Index/jaewon1676.js create mode 100644 "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/RyanDeclan.js" create mode 100644 "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" rename level-3/N-Queen&12952&.js => build/solutions/level-2/N-Queen/codeisneverodd.js (93%) rename "level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" => "build/solutions/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" (73%) create mode 100644 "build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" rename "level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" => "build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" (59%) create mode 100644 "build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" rename "level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" => "build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" (68%) rename "level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" => "build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" (88%) rename "level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" => "build/solutions/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204/codeisneverodd.js" (78%) rename "level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" => "build/solutions/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" (95%) rename "level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" => "build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" (53%) create mode 100644 "build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" rename "level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" => "build/solutions/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254/codeisneverodd.js" (80%) rename "level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" => "build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260/minjongbaek.js" (88%) rename "level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" => "build/solutions/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/jaewon1676.js" (74%) create mode 100644 "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" create mode 100644 "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" rename "level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" => "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260/codeisneverodd.js" (83%) rename "level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" => "build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" (85%) rename "level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" => "build/solutions/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" (94%) rename "level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" => "build/solutions/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230/codeisneverodd.js" (51%) rename "level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" => "build/solutions/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" (92%) rename "level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" => "build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" (90%) create mode 100644 "build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" create mode 100644 "build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" create mode 100644 "build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" create mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" create mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" create mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" create mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" create mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" create mode 100644 "build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/jaewon1676.js" create mode 100644 "build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" rename "level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" => "build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" (83%) create mode 100644 "build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" rename "level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" => "build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" (59%) rename "level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" => "build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" (67%) create mode 100644 "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" create mode 100644 "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" rename "level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" => "build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" (91%) rename "level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" => "build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" (88%) rename "level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" => "build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" (66%) create mode 100644 "build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" rename "level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" => "build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" (87%) create mode 100644 "build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" rename "level-2/\353\260\260\353\213\254&12978&.js" => "build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" (73%) rename "level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" => "build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" (95%) create mode 100644 "build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" rename "level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" => "build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" (53%) rename "level-2/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" => "build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" (89%) rename "level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" => "build/solutions/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224/codeisneverodd.js" (89%) rename "level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" => "build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" (91%) rename "level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" => "build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" (90%) create mode 100644 "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" create mode 100644 "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" rename "level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" => "build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" (76%) rename "level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" => "build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" (96%) rename "level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" => "build/solutions/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" (72%) create mode 100644 "build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" rename "level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" => "build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" (56%) rename "level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" => "build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" (57%) create mode 100644 "build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" create mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" create mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" create mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" create mode 100644 "build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" rename "level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" => "build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" (55%) rename "level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" => "build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" (86%) create mode 100644 "build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" rename "level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" => "build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" (89%) rename "level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" => "build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" (93%) rename "level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" => "build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" (86%) create mode 100644 "build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" create mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" create mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" create mode 100644 "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" create mode 100644 "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" create mode 100644 "build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" rename "level-2/\354\271\264\355\216\253&42842&.js" => "build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" (65%) rename "level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260&68936&.js" => "build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" (81%) create mode 100644 "build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" create mode 100644 "build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" rename "level-2/\355\212\234\355\224\214&64065&.js" => "build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" (56%) create mode 100644 "build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" create mode 100644 "build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" rename "level-2/\355\224\274\353\241\234\353\217\204&87946&.js" => "build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" (86%) rename "level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" => "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" (55%) create mode 100644 "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/jaewon1676.js" rename "level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" => "build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" (89%) rename "level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" => "build/solutions/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" (91%) create mode 100644 "build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" create mode 100644 "build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/prove-ability.js" rename "level-2/\355\233\204\353\263\264\355\202\244&42890&.js" => "build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" (94%) create mode 100644 "build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" rename "level-3/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" => "build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" (79%) rename level-2/N-Queen&12952&.js => build/solutions/level-3/N-Queen/codeisneverodd.js (93%) rename "level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" => "build/solutions/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234/codeisneverodd.js" (83%) rename "level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" => "build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" (89%) rename "level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" => "build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" (92%) create mode 100644 "build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" rename "level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" => "build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" (89%) rename "level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" => "build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" (89%) rename "level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" => "build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" (83%) create mode 100644 "build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" rename "level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" => "build/solutions/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211/ryong9rrr.js" (92%) rename "level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" => "build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" (93%) rename "level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" => "build/solutions/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214/ryong9rrr.js" (82%) rename "level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" => "build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" (52%) create mode 100644 "build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" create mode 100644 build/utils/db.js create mode 100644 build/utils/file.js delete mode 100644 "level-0/369\352\262\214\354\236\204&120891&.js" delete mode 100644 "level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" delete mode 100644 "level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" delete mode 100644 "level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" delete mode 100644 "level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" delete mode 100644 "level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" delete mode 100644 "level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" delete mode 100644 "level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" delete mode 100644 "level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" delete mode 100644 "level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" delete mode 100644 "level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" delete mode 100644 "level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" delete mode 100644 "level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" delete mode 100644 "level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" delete mode 100644 "level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" delete mode 100644 "level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" delete mode 100644 "level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" delete mode 100644 "level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" delete mode 100644 "level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" delete mode 100644 "level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" delete mode 100644 "level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" delete mode 100644 "level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" delete mode 100644 "level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" delete mode 100644 "level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" delete mode 100644 "level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" delete mode 100644 "level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" delete mode 100644 "level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" delete mode 100644 "level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" delete mode 100644 "level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" delete mode 100644 "level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" delete mode 100644 "level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" delete mode 100644 "level-0/\354\226\221\352\274\254\354\271\230&120830&.js" delete mode 100644 "level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" delete mode 100644 "level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" delete mode 100644 "level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" delete mode 100644 "level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" delete mode 100644 "level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" delete mode 100644 "level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" delete mode 100644 "level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" delete mode 100644 "level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" delete mode 100644 "level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" delete mode 100644 "level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" delete mode 100644 "level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" delete mode 100644 "level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" delete mode 100644 "level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" delete mode 100644 "level-0/\355\216\270\354\247\200&120898&.js" delete mode 100644 "level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" delete mode 100644 "level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" delete mode 100644 "level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" delete mode 100644 "level-1/2016\353\205\204&12901&.js" delete mode 100644 "level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" delete mode 100644 "level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" delete mode 100644 "level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" delete mode 100644 "level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" delete mode 100644 "level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" delete mode 100644 "level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" delete mode 100644 "level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" delete mode 100644 "level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" delete mode 100644 "level-1/\353\202\264\354\240\201&70128&.js" delete mode 100644 "level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" delete mode 100644 "level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" delete mode 100644 "level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" delete mode 100644 "level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" delete mode 100644 "level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" delete mode 100644 "level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" delete mode 100644 "level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" delete mode 100644 "level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" delete mode 100644 "level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" delete mode 100644 "level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" delete mode 100644 "level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" delete mode 100644 "level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" delete mode 100644 "level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" delete mode 100644 "level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" delete mode 100644 "level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" delete mode 100644 "level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" delete mode 100644 "level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" delete mode 100644 "level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" delete mode 100644 "level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" delete mode 100644 "level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" delete mode 100644 "level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" delete mode 100644 "level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" delete mode 100644 "level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230&42576&.js" delete mode 100644 "level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" delete mode 100644 "level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" delete mode 100644 "level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" delete mode 100644 "level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" delete mode 100644 "level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" delete mode 100644 "level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" delete mode 100644 "level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" delete mode 100644 "level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" delete mode 100644 "level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" delete mode 100644 "level-1/\354\262\264\354\234\241\353\263\265&42862&.js" delete mode 100644 "level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" delete mode 100644 "level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" delete mode 100644 "level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" delete mode 100644 "level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" delete mode 100644 "level-1/\355\217\260\354\274\223\353\252\254&1845&.js" delete mode 100644 "level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" delete mode 100644 "level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" delete mode 100644 "level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" delete mode 100644 "level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" delete mode 100644 "level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" delete mode 100644 level-2/H-Index&42747&.js delete mode 100644 "level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260&12951&.js" delete mode 100644 "level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" delete mode 100644 "level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" delete mode 100644 "level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" delete mode 100644 "level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" delete mode 100644 "level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" delete mode 100644 "level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" delete mode 100644 "level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" delete mode 100644 "level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" delete mode 100644 "level-2/\354\234\204\354\236\245&42578&.js" delete mode 100644 "level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" delete mode 100644 "level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" delete mode 100644 "level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" delete mode 100644 "level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" delete mode 100644 "level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" delete mode 100644 "level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" delete mode 100644 "level-2/\355\224\204\353\246\260\355\204\260&42587&.js" delete mode 100644 "level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" delete mode 100644 "level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" delete mode 100644 "level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" delete mode 100644 "level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" delete mode 100644 "level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" create mode 100644 run.ts create mode 100644 utils/db.ts create mode 100644 utils/file.ts diff --git a/.prettierrc.json b/.prettierrc.json index 566966a..61be051 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -2,6 +2,6 @@ "singleQuote": true, "bracketSpacing": true, "bracketSameLine": true, - "arrowParens": "avoid", + "arrowParens": "always", "printWidth": 120 } diff --git a/api.json b/api.json deleted file mode 100644 index e855f83..0000000 --- a/api.json +++ /dev/null @@ -1,1936 +0,0 @@ -[ - { - "id": "120842", - "name": "2차원으로 만들기", - "fileName": "2차원으로-만들기&120842&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num_list, n) {\n let result = [];\n for (let i = 0; i < num_list.length / n; i++) {\n result = [...result, num_list.slice(i * n, i * n + n)];\n }\n return result;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120842" - }, - { - "id": "120891", - "name": "369게임", - "fileName": "369게임&120891&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(order) {\n return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120891" - }, - { - "id": "120912", - "name": "7의 개수", - "fileName": "7의-개수&120912&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(array) {\n return [...array.join('')].filter(a => a === '7').length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120912" - }, - { - "id": "120886", - "name": "A로 B 만들기", - "fileName": "A로-B-만들기&120886&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(before, after) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return sort(before) === sort(after) ? 1 : 0;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120886" - }, - { - "id": "120907", - "name": "OX퀴즈", - "fileName": "OX퀴즈&120907&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(quiz) {\n return quiz.map(q => {\n const [formula, answer] = q.split('=');\n return eval(formula) === +answer ? 'O' : 'X';\n });\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120907" - }, - { - "id": "120887", - "name": "k의 개수", - "fileName": "k의-개수&120887&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(i, j, k) {\n let count = 0;\n for (let num = i; num <= j; num++) {\n count += [...('' + num)].filter(n => +n === k).length;\n }\n return count;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120887" - }, - { - "id": "120905", - "name": "n의 배수 고르기", - "fileName": "n의-배수-고르기&120905&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, numlist) {\n return numlist.filter(num => num % n === 0);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120905" - }, - { - "id": "120890", - "name": "가까운 수", - "fileName": "가까운-수&120890&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(array, n) {\n const minDiff = Math.min(...array.map(a => Math.abs(a - n)));\n return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120890" - }, - { - "id": "120839", - "name": "가위 바위 보", - "fileName": "가위-바위-보&120839&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(rsp) {\n const win = { 0: 5, 2: 0, 5: 2 };\n return [...rsp].map(num => win[num]).join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120839" - }, - { - "id": "120899", - "name": "가장 큰 수 찾기", - "fileName": "가장-큰-수-찾기&120899&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(array) {\n const max = Math.max(...array);\n return [max, array.indexOf(max)];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120899" - }, - { - "id": "120829", - "name": "각도기", - "fileName": "각도기&120829&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(angle) {\n if (angle === 180) return 4;\n if (angle > 90) return 3;\n if (angle === 90) return 2;\n return 1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120829" - }, - { - "id": "120837", - "name": "개미 군단", - "fileName": "개미-군단&120837&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(hp) {\n const first = Math.floor(hp / 5);\n const second = Math.floor((hp - first * 5) / 3);\n const third = hp - first * 5 - second * 3;\n return first + second + third;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120837" - }, - { - "id": "120876", - "name": "겹치는 선분의 길이", - "fileName": "겹치는-선분의-길이&120876&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(lines) {\n const visited = lines.reduce((a, [x, y]) => {\n for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1;\n return a;\n }, {});\n\n return Object.values(visited).filter(v => v > 1).length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120876" - }, - { - "id": "120843", - "name": "공 던지기", - "fileName": "공-던지기&120843&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers, k) {\n const goNext = current => (current + 2) % numbers.length;\n let current = 0;\n for (let i = 0; i < k - 1; i++) current = goNext(current);\n return numbers[current];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120843" - }, - { - "id": "120840", - "name": "구슬을 나누는 경우의 수", - "fileName": "구슬을-나누는-경우의-수&120840&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(balls, share) {\n const [n, m] = [balls, share];\n const fact = [BigInt(1), BigInt(1)];\n\n for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i);\n\n return Number(fact[n] / (fact[n - m] * fact[m]));\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120840" - }, - { - "id": "120810", - "name": "나머지 구하기", - "fileName": "나머지-구하기&120810&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num1, num2) {\n return num1 % num2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120810" - }, - { - "id": "120820", - "name": "나이 출력", - "fileName": "나이-출력&120820&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(age) {\n return 2022 - age + 1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120820" - }, - { - "id": "120924", - "name": "다음에 올 숫자", - "fileName": "다음에-올-숫자&120924&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(common) {\n const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0];\n return isAP(common)\n ? common[common.length - 1] + common[1] - common[0]\n : common[common.length - 1] * (common[1] / common[0]);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120924" - }, - { - "id": "120863", - "name": "다항식 더하기", - "fileName": "다항식-더하기&120863&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(polynomial) {\n const countX = x => {\n const count = x.replaceAll('x', '');\n return count === '' ? 1 : +count;\n };\n\n const count = polynomial\n .split(' + ')\n .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), {\n x: 0,\n num: 0,\n });\n\n const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : '';\n const num = count.num > 0 ? '' + count.num : '';\n const plus = x !== '' && num !== '' ? ' + ' : '';\n\n return x + plus + num;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120863" - }, - { - "id": "120893", - "name": "대문자와 소문자", - "fileName": "대문자와-소문자&120893&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join('');\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120893" - }, - { - "id": "120804", - "name": "두 수의 곱", - "fileName": "두-수의-곱&120804&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num1, num2) {\n return num1 * num2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120804" - }, - { - "id": "120806", - "name": "두 수의 나눗셈", - "fileName": "두-수의-나눗셈&120806&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num1, num2) {\n return Math.floor((num1 / num2) * 1000);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120806" - }, - { - "id": "120803", - "name": "두 수의 차", - "fileName": "두-수의-차&120803&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num1, num2) {\n return num1 - num2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120803" - }, - { - "id": "120802", - "name": "두 수의 합", - "fileName": "두-수의-합&120802&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num1, num2) {\n return num1 + num2\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120802" - }, - { - "id": "120882", - "name": "등수 매기기", - "fileName": "등수-매기기&120882&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(score) {\n const avgs = score.map(([a, b]) => (a + b) / 2);\n const avgRank = [...avgs]\n .sort((a, b) => b - a)\n .map((avg, i) => ({ avg, rank: i + 1 }))\n .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a));\n\n return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120882" - }, - { - "id": "120883", - "name": "로그인 성공?", - "fileName": "로그인-성공?&120883&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(id_pw, db) {\n const [id, pw] = id_pw;\n if (!db.find(([_id]) => _id === id)) return 'fail';\n return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw';\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120883" - }, - { - "id": "120585", - "name": "머쓱이보다 키 큰 사람", - "fileName": "머쓱이보다-키-큰-사람&120585&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(array, height) {\n return array.filter(a => a > height).length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120585" - }, - { - "id": "120838", - "name": "모스부호 (1)", - "fileName": "모스부호-(1)&120838&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(letter) {\n const morse = { \n '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',\n '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',\n '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',\n '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',\n '-.--':'y','--..':'z'\n }\n return letter\n .split(' ')\n .map(l => morse[l])\n .join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120838" - }, - { - "id": "120849", - "name": "모음 제거", - "fileName": "모음-제거&120849&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return my_string.replace(/[aeiou]/g, '');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120849" - }, - { - "id": "120805", - "name": "몫 구하기", - "fileName": "몫-구하기&120805&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num1, num2) {\n return Math.floor(num1 / num2);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120805" - }, - { - "id": "120825", - "name": "문자 반복 출력하기", - "fileName": "문자-반복-출력하기&120825&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string, n) {\n return [...my_string].map(char => char.repeat(n)).join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120825" - }, - { - "id": "120902", - "name": "문자열 계산하기", - "fileName": "문자열-계산하기&120902&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return eval(my_string);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120902" - }, - { - "id": "120822", - "name": "문자열 뒤집기", - "fileName": "문자열-뒤집기&120822&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return [...my_string].reverse().join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120822" - }, - { - "id": "120921", - "name": "문자열 밀기", - "fileName": "문자열-밀기&120921&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(A, B) {\n const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join('');\n for (let i = 0; i <= A.length; i++) {\n if (A === B) return i;\n A = pushRight(A);\n }\n\n return -1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120921" - }, - { - "id": "120850", - "name": "문자열 정렬하기 (1)", - "fileName": "문자열-정렬하기-(1)&120850&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return my_string\n .match(/[0-9]/g)\n .map(str => +str)\n .sort((a, b) => a - b);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120850" - }, - { - "id": "120911", - "name": "문자열 정렬하기 (2)", - "fileName": "문자열-정렬하기-(2)&120911&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return [...my_string]\n .map(char => char.toLowerCase())\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120911" - }, - { - "id": "120908", - "name": "문자열안에 문자열", - "fileName": "문자열안에-문자열&120908&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(str1, str2) {\n return str1.includes(str2) ? 1 : 2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120908" - }, - { - "id": "120809", - "name": "배열 두 배 만들기", - "fileName": "배열-두-배-만들기&120809&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers) {\n return numbers.map(n => n * 2);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120809" - }, - { - "id": "120821", - "name": "배열 뒤집기", - "fileName": "배열-뒤집기&120821&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num_list) {\n return num_list.reverse();\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120821" - }, - { - "id": "120854", - "name": "배열 원소의 길이", - "fileName": "배열-원소의-길이&120854&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(strlist) {\n return strlist.map(s => s.length);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120854" - }, - { - "id": "120833", - "name": "배열 자르기", - "fileName": "배열-자르기&120833&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers, num1, num2) {\n return numbers.slice(num1, num2 + 1);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120833" - }, - { - "id": "120844", - "name": "배열 회전시키기", - "fileName": "배열-회전시키기&120844&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers, direction) {\n return direction === 'right'\n ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]\n : [...numbers.slice(1), numbers[0]];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120844" - }, - { - "id": "120903", - "name": "배열의 유사도", - "fileName": "배열의-유사도&120903&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s1, s2) {\n return s1.filter(s => s2.includes(s)).length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120903" - }, - { - "id": "120817", - "name": "배열의 평균값", - "fileName": "배열의-평균값&120817&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers) {\n return numbers.reduce((a, c) => a + c, 0) / numbers.length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120817" - }, - { - "id": "120808", - "name": "분수의 덧셈", - "fileName": "분수의-덧셈&120808&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(denum1, num1, denum2, num2) {\n const denum = denum2 * num1 + denum1 * num2;\n const num = num1 * num2;\n const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b));\n const gcd = getGCD(denum, num);\n return [denum / gcd, num / gcd];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120808" - }, - { - "id": "120889", - "name": "삼각형의 완성조건 (1)", - "fileName": "삼각형의-완성조건-(1)&120889&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(sides) {\n const max = Math.max(...sides);\n return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120889" - }, - { - "id": "120868", - "name": "삼각형의 완성조건 (2)", - "fileName": "삼각형의-완성조건-(2)&120868&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(sides) {\n const min = Math.min(...sides);\n const max1 = Math.max(...sides);\n const max2 = min + max1 - 1;\n return max2 - (max1 - min);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120868" - }, - { - "id": "120910", - "name": "세균 증식", - "fileName": "세균-증식&120910&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, t) {\n return n * 2 ** t;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120910" - }, - { - "id": "120852", - "name": "소인수분해", - "fileName": "소인수분해&120852&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(n); i++) {\n while (n % i === 0) {\n pFactors = [...pFactors, i];\n n /= i;\n }\n }\n if (n >= 2) pFactors = [...pFactors, n];\n return [...new Set(pFactors)].sort((a, b) => a - b);\n}\n\nconst funcB = () => {\n return new Promise(resolve => {\n setTimeout(resolve('guys'), 1000);\n });\n};\n\nconst funcC = async () => {\n const m = 1;\n const res = await funcB();\n return res;\n};\nwindow.addEventListener('DOMContentLoaded', async () => {\n console.log(await funcC());\n});\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120852" - }, - { - "id": "120836", - "name": "순서쌍의 개수", - "fileName": "순서쌍의-개수&120836&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let count = 0;\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) count += 2;\n }\n if (n % Math.sqrt(n) === 0) count += 1;\n return count;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120836" - }, - { - "id": "120851", - "name": "숨어있는 숫자의 덧셈 (1)", - "fileName": "숨어있는-숫자의-덧셈-(1)&120851&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120851" - }, - { - "id": "120864", - "name": "숨어있는 숫자의 덧셈 (2)", - "fileName": "숨어있는-숫자의-덧셈-(2)&120864&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n const nums = my_string.match(/[0-9]+/g);\n return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120864" - }, - { - "id": "120807", - "name": "숫자 비교하기", - "fileName": "숫자-비교하기&120807&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num1, num2) {\n return num1 === num2 ? 1 : -1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120807" - }, - { - "id": "120904", - "name": "숫자 찾기", - "fileName": "숫자-찾기&120904&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num, k) {\n const index = [...('' + num)].findIndex(n => +n === k);\n return index === -1 ? -1 : index + 1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120904" - }, - { - "id": "120819", - "name": "아이스 아메리카노", - "fileName": "아이스-아메리카노&120819&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(money) {\n return [Math.floor(money / 5500), money % 5500];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120819" - }, - { - "id": "120866", - "name": "안전지대", - "fileName": "안전지대&120866&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(board) {\n const isBombNearby = (r, c) => {\n const nearby = [\n [-1, -1],\n [-1, 0],\n [-1, 1],\n [0, -1],\n [0, 1],\n [1, -1],\n [1, 0],\n [1, 1],\n ];\n\n const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length;\n\n return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1);\n };\n\n let count = 0;\n\n for (let r = 0; r < board.length; r++) {\n for (let c = 0; c < board.length; c++) {\n if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1;\n }\n }\n return count;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120866" - }, - { - "id": "120892", - "name": "암호 해독", - "fileName": "암호-해독&120892&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(cipher, code) {\n return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), '');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120892" - }, - { - "id": "120897", - "name": "약수 구하기", - "fileName": "약수-구하기&120897&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let answer = [];\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) answer = [...answer, i, n / i];\n }\n if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)];\n return answer.sort((a, b) => a - b);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120897" - }, - { - "id": "120830", - "name": "양꼬치", - "fileName": "양꼬치&120830&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, k) {\n return n * 12000 + (k - Math.floor(n / 10)) * 2000;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120830" - }, - { - "id": "120923", - "name": "연속된 수의 합", - "fileName": "연속된-수의-합&120923&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num, total) {\n const numArr = Array.from({ length: num }, (_, i) => i);\n const sum = numArr.reduce((a, c) => a + c);\n return numArr.map(n => n - (sum - total) / num);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120923" - }, - { - "id": "120894", - "name": "영어가 싫어요", - "fileName": "영어가-싫어요&120894&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers) {\n const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 };\n const regex = new RegExp(Object.keys(nums).join('|'), 'g');\n return +numbers.replace(regex, key => nums[key]);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120894" - }, - { - "id": "120818", - "name": "옷가게 할인 받기", - "fileName": "옷가게-할인-받기&120818&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(price) {\n if (price >= 500000) return Math.floor(price * 0.8);\n if (price >= 300000) return Math.floor(price * 0.9);\n if (price >= 100000) return Math.floor(price * 0.95);\n return price;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120818" - }, - { - "id": "120956", - "name": "옹알이", - "fileName": "옹알이&120956&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(babbling) {\n const convertPWordsToNum = word => {\n const pWords = ['aya', 'ye', 'woo', 'ma'];\n return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word);\n };\n const canPronounce = word => {\n const result = convertPWordsToNum(word);\n return !/[^\\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]);\n };\n\n return babbling.filter(b => canPronounce(b)).length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120956" - }, - { - "id": "120869", - "name": "외계어 사전", - "fileName": "외계어-사전&120869&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(spell, dic) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120869" - }, - { - "id": "120834", - "name": "외계행성의 나이", - "fileName": "외계행성의-나이&120834&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(age) {\n return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join('');\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120834" - }, - { - "id": "120878", - "name": "유한소수 판별하기", - "fileName": "유한소수-판별하기&120878&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(a, b) {\n const getGCD = (a, b) => {\n let gcd = 1;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if (a % i === 0 && b % i === 0) gcd = i;\n }\n return gcd;\n };\n\n const getPrimeFactors = num => {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(num); i++) {\n while (num % i === 0) {\n pFactors = [...pFactors, i];\n num /= i;\n }\n }\n if (num > 2) pFactors = [...pFactors, num];\n return pFactors;\n };\n\n return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120878" - }, - { - "id": "120885", - "name": "이진수 더하기", - "fileName": "이진수-더하기&120885&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(bin1, bin2) {\n return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120885" - }, - { - "id": "120895", - "name": "인덱스 바꾸기", - "fileName": "인덱스-바꾸기&120895&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string, num1, num2) {\n const str = [...my_string];\n\n [str[num1], str[num2]] = [str[num2], str[num1]];\n\n return str.join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120895" - }, - { - "id": "120906", - "name": "자릿수 더하기", - "fileName": "자릿수-더하기&120906&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120906" - }, - { - "id": "120913", - "name": "잘라서 배열로 저장하기", - "fileName": "잘라서-배열로-저장하기&120913&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_str, n) {\n let result = [];\n for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)];\n return result;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120913" - }, - { - "id": "120871", - "name": "저주의 숫자 3", - "fileName": "저주의-숫자-3&120871&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let num = 0;\n let count = 0;\n\n while (count < n) {\n num += 1;\n if (!('' + num).includes('3') && num % 3 !== 0) count += 1;\n }\n\n return num;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120871" - }, - { - "id": "120841", - "name": "점의 위치 구하기", - "fileName": "점의-위치-구하기&120841&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(dot) {\n const [x, y] = dot;\n if (y > 0) return x > 0 ? 1 : 2;\n return x < 0 ? 3 : 4;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120841" - }, - { - "id": "120909", - "name": "제곱수 판별하기", - "fileName": "제곱수-판별하기&120909&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? 1 : 2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120909" - }, - { - "id": "120922", - "name": "종이 자르기", - "fileName": "종이-자르기&120922&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(M, N) {\n return M * N - 1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120922" - }, - { - "id": "120845", - "name": "주사위의 개수", - "fileName": "주사위의-개수&120845&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(box, n) {\n return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120845" - }, - { - "id": "120888", - "name": "중복된 문자 제거", - "fileName": "중복된-문자-제거&120888&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string) {\n return [...new Set(my_string)].join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120888" - }, - { - "id": "120583", - "name": "중복된 숫자 개수", - "fileName": "중복된-숫자-개수&120583&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(array, n) {\n return array.filter(a => a === n).length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120583" - }, - { - "id": "120811", - "name": "중앙값 구하기", - "fileName": "중앙값-구하기&120811&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(array) {\n return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120811" - }, - { - "id": "120823", - "name": "직각삼각형 출력하기", - "fileName": "직각삼각형-출력하기&120823&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nconst readline = require('readline');\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet input = [];\n\nrl.on('line', function (line) {\n input = line.split(' ');\n}).on('close', function () {\n for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i));\n});\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120823" - }, - { - "id": "120860", - "name": "직사각형 넓이 구하기", - "fileName": "직사각형-넓이-구하기&120860&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(dots) {\n const xDots = dots.flatMap(([x, y]) => x);\n const yDots = dots.flatMap(([x, y]) => y);\n const width = Math.max(...xDots) - Math.min(...xDots);\n const height = Math.max(...yDots) - Math.min(...yDots);\n return width * height;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120860" - }, - { - "id": "120835", - "name": "진료순서 정하기", - "fileName": "진료순서-정하기&120835&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(emergency) {\n const sorted = [...emergency].sort((a, b) => b - a);\n return emergency.map(e => sorted.findIndex(s => s === e) + 1);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120835" - }, - { - "id": "120824", - "name": "짝수 홀수 개수", - "fileName": "짝수-홀수-개수&120824&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(num_list) {\n const evenLength = num_list.filter(n => n % 2 === 0).length;\n return [evenLength, num_list.length - evenLength];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120824" - }, - { - "id": "120813", - "name": "짝수는 싫어요", - "fileName": "짝수는-싫어요&120813&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let nums = [];\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 1) nums = [...nums, i];\n }\n return nums;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120813" - }, - { - "id": "120831", - "name": "짝수의 합", - "fileName": "짝수의-합&120831&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let answer = 0;\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 0) answer += i;\n }\n return answer;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120831" - }, - { - "id": "120847", - "name": "최댓값 만들기(1)", - "fileName": "최댓값-만들기(1)&120847&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers) {\n const [first, second, ...rest] = numbers.sort((a, b) => b - a);\n return first * second;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120847" - }, - { - "id": "120862", - "name": "최댓값 만들기 (2)", - "fileName": "최댓값-만들기-(2)&120862&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers) {\n const sorted = numbers.sort((a, b) => a - b);\n return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120862" - }, - { - "id": "120812", - "name": "최빈값 구하기", - "fileName": "최빈값-구하기&120812&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(array) {\n const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n const max = Math.max(...Object.values(counts));\n const modes = Object.keys(counts).filter(key => counts[key] === max);\n return modes.length === 1 ? +modes[0] : -1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120812" - }, - { - "id": "120884", - "name": "치킨 쿠폰", - "fileName": "치킨-쿠폰&120884&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(chicken) {\n const order = coupons => {\n if (coupons < 10) return 0;\n const service = Math.floor(coupons / 10);\n return service + order(service + (coupons % 10));\n };\n return order(chicken);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120884" - }, - { - "id": "120861", - "name": "캐릭터의 좌표", - "fileName": "캐릭터의-좌표&120861&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n return keyinput\n .map(key => moves[key])\n .reduce(\n ([x, y], [mX, mY]) => (Math.abs(x + mX) > rangeX || Math.abs(y + mY) > rangeY ? [x, y] : [x + mX, y + mY]),\n [0, 0]\n );\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120861" - }, - { - "id": "120853", - "name": "컨트롤 제트", - "fileName": "컨트롤-제트&120853&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n const arr = s.split(' ');\n while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2);\n return arr.map(n => +n).reduce((a, c) => a + c, 0);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120853" - }, - { - "id": "120880", - "name": "특이한 정렬", - "fileName": "특이한-정렬&120880&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numlist, n) {\n return numlist.sort((a, b) => {\n const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)];\n if (aDiff === bDiff) return b - a;\n return aDiff - bDiff;\n });\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120880" - }, - { - "id": "120826", - "name": "특정 문자 제거하기", - "fileName": "특정-문자-제거하기&120826&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(my_string, letter) {\n return my_string.replaceAll(letter, '');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120826" - }, - { - "id": "120848", - "name": "팩토리얼", - "fileName": "팩토리얼&120848&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let factorial = [1, 1];\n for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i;\n\n return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120848" - }, - { - "id": "120898", - "name": "편지", - "fileName": "편지&120898&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(message) {\n return message.length * 2;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120898" - }, - { - "id": "120875", - "name": "평행", - "fileName": "평행&120875&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(dots) {\n const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity);\n const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2);\n\n return dots.some(dot => {\n const line1 = [dots[0], dot];\n const line2 = dots.filter(dot => !line1.includes(dot));\n return isParallel(line1, line2);\n })\n ? 1\n : 0;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120875" - }, - { - "id": "120814", - "name": "피자 나눠 먹기 (1)", - "fileName": "피자-나눠-먹기-(1)&120814&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n return Math.floor((n - 1) / 7) + 1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120814" - }, - { - "id": "120815", - "name": "피자 나눠 먹기 (2)", - "fileName": "피자-나눠-먹기-(2)&120815&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n const getLCM = (a, b) => {\n let lcm = 1;\n while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1;\n return lcm;\n };\n\n return getLCM(n, 6) / 6;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120815" - }, - { - "id": "120816", - "name": "피자 나눠 먹기 (3)", - "fileName": "피자-나눠-먹기-(3)&120816&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(slice, n) {\n return Math.floor((n - 1) / slice) + 1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120816" - }, - { - "id": "120896", - "name": "한 번만 등장한 문자", - "fileName": "한-번만-등장한-문자&120896&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n return Object.keys(count)\n .filter(key => count[key] === 1)\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120896" - }, - { - "id": "120846", - "name": "합성수 찾기", - "fileName": "합성수-찾기&120846&.js", - "level": 0, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n const isPrime = num => {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return true;\n }\n return false;\n };\n\n let count = 0;\n\n for (let i = 1; i <= n; i++) {\n if (isPrime(i)) count += 1;\n }\n \n return count;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/120846" - }, - { - "id": "12901", - "name": "2016년", - "fileName": "2016년&12901&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(a, b) {\n let count = 0;\n const day = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n for (let i = 1; i < a; i++) count += month[i];\n count += b;\n return day[(count + 4) % 7]; // 금요일 부터 1일 이므로\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12901" - }, - { - "id": "68935", - "name": "3진법 뒤집기", - "fileName": "3진법-뒤집기&68935&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n return parseInt(n.toString(3).split(\"\").reverse().join(\"\"), 3);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/68935" - }, - { - "id": "42748", - "name": "K번째수", - "fileName": "K번째수&42748&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(array, commands) {\n return commands.map((cmd) => {\n const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b);\n return arrCmd[cmd[2] - 1];\n });\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42748" - }, - { - "id": "17682", - "name": "[1차] 다트 게임", - "fileName": "[1차]-다트-게임&17682&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(dartResult) {\n const regex = /\\d{1,2}[SDT]{1}[*|#]?/g;\n let result = [];\n for (const dart of dartResult.match(regex)) {\n const game = [...dart.split(/([SDT]{1})/)];\n const score = game[0];\n let bonus = 1;\n let option = 1;\n if (game[1] === \"S\") bonus = 1;\n if (game[1] === \"D\") bonus = 2;\n if (game[1] === \"T\") bonus = 3;\n\n if (game[2] === \"*\") {\n if (result.length !== 0) result[result.length - 1] *= 2;\n option = 2;\n }\n if (game[2] === \"#\") option = -1;\n\n result.push(score ** bonus * option);\n }\n\n return result.reduce((a, b) => a + b);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17682" - }, - { - "id": "17681", - "name": "[1차] 비밀지도", - "fileName": "[1차]-비밀지도&17681&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n, arr1, arr2) {\n const answer = [];\n for (let i = 0; i < n; i++) {\n let row = (arr1[i] | arr2[i]).toString(2); //Bitwise\n row = \"0\".repeat(n - row.length) + row;\n row = row.replace(/[10]/g, (a) => (+a ? \"#\" : \" \"));\n answer.push(row);\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17681" - }, - { - "id": "12954", - "name": "x만큼 간격이 있는 n개의 숫자", - "fileName": "x만큼-간격이-있는-n개의-숫자&12954&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(x, n) {\n return Array.from(Array(n), (_, index) => x * (index + 1));\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12954" - }, - { - "id": "12903", - "name": "가운데 글자 가져오기", - "fileName": "가운데-글자-가져오기&12903&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n return s.length % 2 !== 0\n ? s[Math.floor(s.length / 2)]\n : s.slice(s.length / 2 - 1, s.length / 2 + 1);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12903" - }, - { - "id": "12906", - "name": "같은 숫자는 싫어", - "fileName": "같은-숫자는-싫어&12906&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(arr) {\n return arr.filter((element, index) => element !== arr[index + 1]);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12906" - }, - { - "id": "12910", - "name": "나누어 떨어지는 숫자 배열", - "fileName": "나누어-떨어지는-숫자-배열&12910&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(arr, divisor) {\n const answer = arr.filter((element) => element % divisor === 0);\n answer.length === 0 ? answer.push(-1) : answer.sort((a, b) => a - b);\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12910" - }, - { - "id": "87389", - "name": "나머지가 1이 되는 수 찾기", - "fileName": "나머지가-1이-되는-수-찾기&87389&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n\n let answer = 0;\n for (let divisor = n - 1; divisor >= 2; divisor--) {\n if (n % divisor === 1) answer = divisor;\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/87389" - }, - { - "id": "70128", - "name": "내적", - "fileName": "내적&70128&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(a, b) {\n return a.reduce((x, y, i) => x + y * b[i], 0);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/70128" - }, - { - "id": "68644", - "name": "두 개 뽑아서 더하기", - "fileName": "두-개-뽑아서-더하기&68644&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(numbers) {\n const answer = [];\n for (let i = 0; i < numbers.length; i++) {\n for (let j = i + 1; j < numbers.length; j++) {\n answer.push(numbers[i] + numbers[j]);\n }\n }\n return [...new Set(answer)].sort((a, b) => a - b);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/68644" - }, - { - "id": "12912", - "name": "두 정수 사이의 합", - "fileName": "두-정수-사이의-합&12912&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12912" - }, - { - "id": "77484", - "name": "로또의 최고 순위와 최저 순위", - "fileName": "로또의-최고-순위와-최저-순위&77484&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(lottos, win_nums) {\n const zeroCount = lottos.filter((e) => e === 0).length;\n const matchCount = win_nums.filter((e) => lottos.includes(e)).length;\n const matchToRank = [6, 6, 5, 4, 3, 2, 1];\n const lowRank = matchToRank[matchCount];\n const highRank = zeroCount === 6 ? 1 : matchToRank[matchCount + zeroCount];\n\n return [highRank, lowRank];\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/77484" - }, - { - "id": "42840", - "name": "모의고사", - "fileName": "모의고사&42840&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(answers) {\n const answer = [];\n const firstPattern = [1, 2, 3, 4, 5];\n const firstPLength = firstPattern.length;\n const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5];\n const secondPLength = secondPattern.length;\n const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n const thirdLength = thirdPattern.length;\n let correctCount = [0, 0, 0];\n\n for (let i = 0, len = answers.length; i < len; i++) {\n if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1;\n if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1;\n if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1;\n }\n\n const maxScore = Math.max(...correctCount);\n for (let i = 0; i < 3; i++) {\n if (correctCount[i] === maxScore) answer.push(i + 1);\n }\n\n return answer;\n}\n\n// 완벽한 정답이 아닙니다.\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42840" - }, - { - "id": "12916", - "name": "문자열 내 p와 y의 개수", - "fileName": "문자열-내-p와-y의-개수&12916&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n const countP = [...s.matchAll(/p/gi)].length;\n const countY = [...s.matchAll(/y/gi)].length;\n return countP === countY;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12916" - }, - { - "id": "12915", - "name": "문자열 내 마음대로 정렬하기", - "fileName": "문자열-내-마음대로-정렬하기&12915&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(strings, n) {\n return strings.sort((a, b) => {\n if (a[n] < b[n]) return -1;\n if (a[n] > b[n]) return 1;\n if (a[n] === b[n]) return a < b ? -1 : 1;\n return 0;\n });\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12915" - }, - { - "id": "12917", - "name": "문자열 내림차순으로 배치하기", - "fileName": "문자열-내림차순으로-배치하기&12917&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n return s\n .split(\"\")\n .sort((a, b) => {\n if (a < b) return 1;\n if (a > b) return -1;\n return 0;\n })\n .join(\"\");\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12917" - }, - { - "id": "12918", - "name": "문자열 다루기 기본", - "fileName": "문자열-다루기-기본&12918&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n return s.search(/\\D/g) < 0 && (s.length === 4 || s.length === 6);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12918" - }, - { - "id": "12925", - "name": "문자열을 정수로 바꾸기", - "fileName": "문자열을-정수로-바꾸기&12925&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n return parseInt(s);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12925" - }, - { - "id": "82612", - "name": "부족한 금액 계산하기", - "fileName": "부족한-금액-계산하기&82612&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(price, money, count) {\n let totalCost = 0;\n for (let i = 1; i <= count; i++) totalCost += price * i;\n return totalCost <= money ? 0 : totalCost - money;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/82612" - }, - { - "id": "12919", - "name": "서울에서 김서방 찾기", - "fileName": "서울에서-김서방-찾기&12919&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12919" - }, - { - "id": "118666", - "name": "성격 유형 검사하기", - "fileName": "성격-유형-검사하기&118666&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - ssi02014\nfunction solution(survey, choices) {\n const points = [3, 2, 1, 0, 1, 2, 3];\n const pointBoard = {\n R: 0,\n T: 0,\n C: 0,\n F: 0,\n J: 0,\n M: 0,\n A: 0,\n N: 0,\n };\n let result = \"\";\n\n // 카테고리 별 점수 추가\n for (let i = 0; i < survey.length; i++) {\n const categories = survey[i];\n\n if (choices[i] < 4) {\n pointBoard[categories[0]] += points[choices[i] - 1];\n } else if (choices[i] > 4) {\n pointBoard[categories[1]] += points[choices[i] - 1];\n }\n }\n\n const pointBoardEntries = Object.entries(pointBoard);\n\n // 지표에 맞게 결과 값 도출\n for (let i = 0; i < pointBoardEntries.length; i += 2) {\n const [curCategory, curValue] = pointBoardEntries[i];\n const [nextCategory, nextValue] = pointBoardEntries[i + 1];\n\n if (curValue < nextValue) {\n result += nextCategory;\n } else {\n result += curCategory;\n }\n }\n\n return result;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/118666" - }, - { - "id": "12977", - "name": "소수 만들기", - "fileName": "소수-만들기&12977&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(nums) {\n let answer = 0;\n const length = nums.length;\n for (let i = 0; i < length; i++) {\n for (let j = i + 1; j < length; j++) {\n for (let k = j + 1; k < length; k++) {\n const sum = nums[i] + nums[j] + nums[k];\n if (isPrime(sum)) answer += 1;\n }\n }\n }\n\n return answer;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12977" - }, - { - "id": "42839", - "name": "소수 찾기", - "fileName": "소수-찾기&42839&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(numbers) {\n let answer = 0;\n const numArr = numbers.split(\"\");\n const permutationAll = [];\n for (let r = 1; r <= numbers.length; r++) {\n const permutationR = Permutation(numArr, r).map((arr) =>\n parseInt(arr.join(\"\"))\n );\n for (let i = 0; i < permutationR.length; i++)\n permutationAll.push(permutationR[i]);\n }\n const permutationSet = [...new Set(permutationAll)];\n for (const number of permutationSet) {\n if (isPrime(number)) answer += 1;\n }\n return answer;\n}\n\nfunction Permutation(arr, r) {\n const result = [];\n if (r === 1) return arr.map((num) => [num]);\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)];\n const permutation = Permutation(rest, r - 1);\n const attached = permutation.map((numbers) => [fixed, ...numbers]);\n result.push(...attached);\n });\n return result;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}\n\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42839" - }, - { - "id": "12922", - "name": "수박수박수박수박수박수?", - "fileName": "수박수박수박수박수박수?&12922&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n let answer = '';\n for (let i = 0; i < n; i++) {\n answer += i % 2 === 0 ? '수' : '박';\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12922" - }, - { - "id": "81301", - "name": "숫자 문자열과 영단어", - "fileName": "숫자-문자열과-영단어&81301&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n const stringToNum = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n for (let i = 0; i < 10; i++) {\n s = s.split(stringToNum[i]).join(i);\n }\n return parseInt(s);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/81301" - }, - { - "id": "131128", - "name": "숫자 짝꿍", - "fileName": "숫자-짝꿍&131128&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - ssi02014\n\n/**\n * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화\n * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 \n * (테스트 케이스 11 ~ 15 100ms~200ms 차이)\n */\nfunction solution(X, Y) {\n const commons = [];\n const obj = {};\n\n for (const el of X) {\n obj[el] = (obj[el] || 0) + 1;\n }\n\n for (const el of Y) {\n if (obj[el]) {\n commons.push(el);\n obj[el]--;\n }\n }\n\n commons.sort((a, b) => b - a);\n\n if (!commons.length) return \"-1\";\n else if (commons[0] === \"0\") return \"0\";\n return commons.join(\"\");\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/131128" - }, - { - "id": "12926", - "name": "시저 암호", - "fileName": "시저-암호&12926&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s, n) {\n return s\n .split(\"\")\n .map((element) => {\n if (element === \" \") return \" \";\n const code = element.charCodeAt(0);\n if ((code + n > 90 && code <= 90) || code + n > 122) {\n return String.fromCharCode(code + n - 26);\n } else {\n return String.fromCharCode(code + n);\n }\n })\n .join(\"\");\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12926" - }, - { - "id": "92334", - "name": "신고 결과 받기", - "fileName": "신고-결과-받기&92334&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220830) - codeisneverodd\nfunction solution(id_list, report, k) {\n const reportResult = report.reduce((a, c) => {\n const [user, reported] = c.split(' ');\n a[reported] = a[reported] ? a[reported].add(user) : new Set().add(user);\n return a;\n }, {});\n\n const mailed = Object.values(reportResult)\n .filter(set => set.size >= k)\n .flatMap(set => [...set]);\n return id_list.map(id => mailed.filter(user => user === id).length);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/92334" - }, - { - "id": "72410", - "name": "신규 아이디 추천", - "fileName": "신규-아이디-추천&72410&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220830) - codeisneverodd\nfunction solution(new_id) {\n const newId = new_id\n .toLowerCase()\n .replace(/[^\\w_.-]/g, '')\n .replace(/[.]{2,}/g, '.')\n .replace(/^[.]+/, '')\n .replace(/[.]+$/, '')\n .replace(/^$/, 'a')\n .substring(0, 15)\n .replace(/[.]+$/, '');\n\n return newId.padEnd(3, newId[newId.length - 1]);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/72410" - }, - { - "id": "42889", - "name": "실패율", - "fileName": "실패율&42889&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(N, stages) {\n let stageNFailRate = [];\n for (let stage = 1; stage <= N; stage++) {\n const playerReached = stages.filter((player) => player >= stage).length;\n const playerChallenging = stages.filter(\n (player) => player === stage\n ).length;\n stageNFailRate.push([stage, playerChallenging / playerReached]);\n }\n stageNFailRate.sort((a, b) => b[1] - a[1]);\n return stageNFailRate.map((stage) => stage[0]);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42889" - }, - { - "id": "77884", - "name": "약수의 개수와 덧셈", - "fileName": "약수의-개수와-덧셈&77884&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(left, right) {\n let answer = 0;\n for (let num = left; num <= right; num++) {\n answer = Number.isInteger(Math.sqrt(num)) ? answer - num : answer + num;\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/77884" - }, - { - "id": "12928", - "name": "약수의 합", - "fileName": "약수의-합&12928&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n let answer = 0;\n for (let divisor = 1; divisor <= n; divisor++) {\n if (n % divisor === 0) answer += divisor;\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12928" - }, - { - "id": "86051", - "name": "없는 숫자 더하기", - "fileName": "없는-숫자-더하기&86051&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(numbers) {\n return 45 - numbers.reduce((a, b) => a + b);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/86051" - }, - { - "id": "12982", - "name": "예산", - "fileName": "예산&12982&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(d, budget) {\n let answer = 0;\n d.sort((a, b) => a - b);\n for (const department of d) {\n if (budget < department) break;\n answer += 1;\n budget -= department;\n }\n return answer;\n}\n\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12982" - }, - { - "id": "42576", - "name": "완주하지 못한 선수", - "fileName": "완주하지-못한-선수&42576&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(participant, completion) {\n participant = participant.sort();\n completion = completion.sort();\n for (let i = 0; i < completion.length; i++) {\n if (participant[i] !== completion[i]) return participant[i];\n }\n return participant[participant.length - 1];\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42576" - }, - { - "id": "76501", - "name": "음양 더하기", - "fileName": "음양-더하기&76501&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(absolutes, signs) {\n return absolutes.reduce(\n (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1),\n 0\n );\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/76501" - }, - { - "id": "12930", - "name": "이상한 문자 만들기", - "fileName": "이상한-문자-만들기&12930&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n return s\n .split(\" \")\n .map((word) =>\n word\n .split(\"\")\n .map((char, index) =>\n index % 2 === 0\n ? word[index].toUpperCase()\n : word[index].toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12930" - }, - { - "id": "12931", - "name": "자릿수 더하기", - "fileName": "자릿수-더하기&12931&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n return n\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr, 0);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12931" - }, - { - "id": "12932", - "name": "자연수 뒤집어 배열로 만들기", - "fileName": "자연수-뒤집어-배열로-만들기&12932&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((x) => parseInt(x));\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12932" - }, - { - "id": "12933", - "name": "정수 내림차순으로 배치하기", - "fileName": "정수-내림차순으로-배치하기&12933&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n return parseInt(\n n\n .toString()\n .split(\"\")\n .sort((a, b) => b - a)\n .join(\"\")\n );\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12933" - }, - { - "id": "12934", - "name": "정수 제곱근 판별", - "fileName": "정수-제곱근-판별&12934&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12934" - }, - { - "id": "12935", - "name": "제일 작은 수 제거하기", - "fileName": "제일-작은-수-제거하기&12935&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(arr) {\n const index = arr.indexOf(Math.min(...arr));\n arr.splice(index, 1);\n return arr.length === 0 ? [-1] : arr;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12935" - }, - { - "id": "12969", - "name": "직사각형 별찍기", - "fileName": "직사각형-별찍기&12969&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - chaerin-dev\nprocess.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n ", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12969" - }, - { - "id": "12937", - "name": "짝수와 홀수", - "fileName": "짝수와-홀수&12937&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12937" - }, - { - "id": "42862", - "name": "체육복", - "fileName": "체육복&42862&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n, lost, reserve) {\n let answer = 0;\n let studentClothes = new Array(n + 2).fill(1);\n for (const student of reserve) studentClothes[student] += 1;\n for (const student of lost) studentClothes[student] -= 1;\n for (let i = 1; i < n + 1; i++) {\n if (studentClothes[i] === 0) {\n if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) {\n if (studentClothes[i - 1] === 2) {\n studentClothes[i - 1] -= 1;\n studentClothes[i] += 1;\n } else {\n studentClothes[i + 1] -= 1;\n studentClothes[i] += 1;\n }\n }\n }\n }\n for (const student of studentClothes) {\n answer += student > 0 ? 1 : 0;\n }\n answer -= 2;\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42862" - }, - { - "id": "12940", - "name": "최대공약수와 최소공배수", - "fileName": "최대공약수와-최소공배수&12940&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(n, m) {\n const gcd = greatestCommonDivisor(n, m);\n return [gcd, (n * m) / gcd];\n}\n\nconst greatestCommonDivisor = (a, b) => {\n if (b === 0) return a;\n else return greatestCommonDivisor(b, a % b);\n};\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12940" - }, - { - "id": "86491", - "name": "최소직사각형", - "fileName": "최소직사각형&86491&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220830) - codeisneverodd\nfunction solution(sizes) {\n const maxWidth = Math.max(...sizes.map(card => Math.min(...card)));\n const maxHeight = Math.max(...sizes.map(card => Math.max(...card)));\n return maxWidth * maxHeight;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/86491" - }, - { - "id": "12943", - "name": "콜라츠 추측", - "fileName": "콜라츠-추측&12943&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(num) {\n let answer = 0;\n while (answer <= 500) {\n if (num === 1) return answer;\n num = num % 2 === 0 ? num / 2 : num * 3 + 1;\n answer += 1;\n }\n return -1;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12943" - }, - { - "id": "64061", - "name": "크레인 인형뽑기 게임", - "fileName": "크레인-인형뽑기-게임&64061&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(board, moves) {\n let answer = 0;\n const length = board.length\n let basket = []\n moves.forEach(move => {\n for (let i = 0; i < length; i++) {\n const item = board[i][move - 1]\n if (item !== 0) {\n if (basket[basket.length - 1] !== item) {\n basket.push(item)\n } else {\n basket.pop()\n answer += 2\n }\n board[i][move - 1] = 0\n break\n }\n }\n })\n\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/64061" - }, - { - "id": "67256", - "name": "키패드 누르기", - "fileName": "키패드-누르기&67256&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220830) - codeisneverodd\nfunction solution(numbers, hand) {\n let [l, r] = [10, 12];\n const moveL = n => {\n l = n;\n return 'L';\n };\n\n const moveR = n => {\n r = n;\n return 'R';\n };\n return numbers\n .map(n => {\n if (n === 0) n = 11;\n const to = n => {\n const numLocation = numToLocation(n);\n const lDistance = distanceBtwLocation(numToLocation(l), numLocation);\n const rDistance = distanceBtwLocation(numToLocation(r), numLocation);\n if (lDistance < rDistance) return moveL(n);\n if (rDistance > lDistance) return moveR(n);\n return hand === 'left' ? moveL(n) : moveR(n);\n };\n return num % 3 === 1 ? leftTo(num) : num % 3 === 0 ? rightTo(num) : to(num);\n })\n .join('');\n}\n\nfunction numToLocation(num) {\n return [Math.floor((num - 1) / 3), (num - 1) % 3];\n}\n\nfunction distanceBtwLocation(a, b) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/67256" - }, - { - "id": "12944", - "name": "평균 구하기", - "fileName": "평균-구하기&12944&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(arr) {\n return arr.reduce((acc, curr) => acc + curr) / arr.length;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12944" - }, - { - "id": "1845", - "name": "폰켓몬", - "fileName": "폰켓몬&1845&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(nums) {\n const numLen = nums.length;\n const setLen = [...new Set(nums)].length;\n return numLen / 2 >= setLen ? setLen : numLen / 2;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/1845" - }, - { - "id": "12947", - "name": "하샤드 수", - "fileName": "하샤드-수&12947&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(x) {\n const sum = x\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr);\n return x % sum === 0;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12947" - }, - { - "id": "12948", - "name": "핸드폰 번호 가리기", - "fileName": "핸드폰-번호-가리기&12948&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(phone_number) {\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12948" - }, - { - "id": "12950", - "name": "행렬의 덧셈", - "fileName": "행렬의-덧셈&12950&.js", - "level": 1, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(arr1, arr2) {\n const answer = [];\n arr1.forEach((row, rowIndex) => {\n answer.push(row.map((col, colIndex) => col + arr2[rowIndex][colIndex]));\n });\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12950" - }, - { - "id": "12899", - "name": "124 나라의 숫자", - "fileName": "124-나라의-숫자&12899&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n n = Math.floor((n - 1) / 3) //나누어떨어지지 않을 때에도 -1해도 상관없음\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12899" - }, - { - "id": "12900", - "name": "2 x n 타일링", - "fileName": "2-x-n-타일링&12900&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - jaewon1676\nfunction solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12900" - }, - { - "id": "77885", - "name": "2개 이하로 다른 비트", - "fileName": "2개-이하로-다른-비트&77885&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - le2sky\nfunction solution(numbers) {\n const answer = [];\n numbers.forEach((num) => {\n if (num % 2 == 0) answer.push(num + 1);\n else {\n let binary = [\"0\", ...num.toString(2)];\n let last = binary.lastIndexOf(\"0\");\n binary[last] = \"1\";\n binary[last + 1] = \"0\";\n answer.push(parseInt(binary.join(\"\"), 2));\n }\n });\n return answer;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/77885" - }, - { - "id": "12902", - "name": "3 x n 타일링", - "fileName": "3-x-n-타일링&12902&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n if (n % 2 !== 0) return 0;\n\n const getCount = n => {\n const k = n / 2;\n const count = [3, 11, ...Array(k - 2)];\n const divider = 1000000007;\n for (let i = 2; i < k; i++) {\n count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider;\n }\n return count[count.length - 1];\n };\n\n return getCount(n);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12902" - }, - { - "id": "42747", - "name": "H Index", - "fileName": "H-Index&42747&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(citations) {\n var answer = 0;\n citations.sort((a, b) => b - a)\n let h = 0\n while (h + 1 <= citations[h]) h++\n answer = h\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42747" - }, - { - "id": "12951", - "name": "JadenCase 문자열 만들기", - "fileName": "JadenCase-문자열-만들기&12951&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n var answer = ''\n answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')\n //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다.\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12951" - }, - { - "id": "12952", - "name": "N Queen", - "fileName": "N-Queen&12952&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12952" - }, - { - "id": "12953", - "name": "N개의 최소공배수", - "fileName": "N개의-최소공배수&12953&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(arr) {\n var answer = 0;\n answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1)\n return answer;\n}\n\nfunction leastCommonMultiple(a, b) {\n return a * b / greatestCommonDivisor(a, b)\n}\n\nfunction greatestCommonDivisor(a, b) {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12953" - }, - { - "id": "17677", - "name": "[1차] 뉴스 클러스터링", - "fileName": "[1차]-뉴스-클러스터링&17677&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(str1, str2) {\n var answer = 0;\n let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2)\n const union = new Set([...compare1, ...compare2])\n let multiIntersectionLen = 0, multiUnionLen = 0\n for (const slice of union) {\n const compare1Count = compare1.filter(x => x === slice).length,\n compare2Count = compare2.filter(x => x === slice).length\n multiIntersectionLen += Math.min(compare1Count, compare2Count)\n multiUnionLen += Math.max(compare1Count, compare2Count)\n }\n answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536)\n return answer;\n}\n\nfunction verifiedSlices(str) {\n const onlyAlphabet = /[a-zA-Z]{2}/\n let result = []\n for (let i = 0; i < str.length - 1; i++) {\n const slice = str.slice(i, i + 2)\n if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase())\n }\n return result\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17677" - }, - { - "id": "17680", - "name": "[1차] 캐시", - "fileName": "[1차]-캐시&17680&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(cacheSize, cities) {\n var answer = 0;\n let cache = []\n if (cacheSize === 0) return 5 * cities.length\n for (const city of cities) {\n const cityLC = city.toLowerCase()\n if (cache.includes(cityLC)) {\n cache.splice(cache.indexOf(cityLC), 1)\n cache.unshift(cityLC)\n answer += 1\n } else {\n if (cache.length >= cacheSize) cache.pop()\n cache.unshift(cityLC)\n answer += 5\n }\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17680" - }, - { - "id": "17679", - "name": "[1차] 프렌즈4블록", - "fileName": "[1차]-프렌즈4블록&17679&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(m, n, board) {\n board = board.map(r => r.split(''));\n const getSquare = ([r, c]) => [\n [r, c],\n [r, c + 1],\n [r + 1, c],\n [r + 1, c + 1],\n ];\n\n const isSquare = ([r, c]) => {\n if (board[r][c] === '@') return false;\n return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1;\n };\n\n const remove = () => {\n const removeArr = [];\n for (let r = 0; r < m - 1; r++) {\n for (let c = 0; c < n - 1; c++) {\n if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v));\n }\n }\n removeArr.forEach(([r, c]) => {\n board[r][c] = '@';\n });\n return removeArr.length !== 0;\n };\n\n const pull = () => {\n for (let c = 0; c < n; c++) {\n const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@');\n const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn];\n resultColumn.forEach((v, r) => {\n board[r][c] = v;\n });\n }\n return board;\n };\n\n while (remove()) {\n pull();\n }\n\n return board.flat().filter(v => v === '@').length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17679" - }, - { - "id": "17687", - "name": "[3차] n진수 게임", - "fileName": "[3차]-n진수-게임&17687&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, t, m, p) {\n let queue = [], result = [], currentNumDecimal = -1, turn = 0\n while (result.length < t) {\n if (queue.length === 0) {\n currentNumDecimal++\n currentNumDecimal.toString(n).split('').forEach(x => queue.push(x))\n }\n const currentChar = queue.shift()\n if (turn % m === p - 1) result.push(currentChar)\n turn++\n }\n return result.join('').toUpperCase()\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17687" - }, - { - "id": "17683", - "name": "[3차] 방금그곡", - "fileName": "[3차]-방금그곡&17683&.js", - "level": 2, - "code": "// https://github.com/codeisneverodd/programmers-coding-test\n// 완벽한 정답이 아닙니다.\n// 1 - minjongbaek\nfunction convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수\n return m\n .replace(/C#/g, 'c')\n .replace(/D#/g, 'd')\n .replace(/F#/g, 'f')\n .replace(/G#/g, 'g')\n .replace(/A#/g, 'a');\n}\n\nfunction solution(m, musicinfos) {\n\n // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다.\n // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다.\n // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다.\n\n const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다.\n \n const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다.\n for (const info of musicinfos) {\n const [start, finish, title, _score] = info.split(',');\n // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다.\n const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5))));\n \n const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다.\n\n // 재생된 멜로디를 구합니다.\n // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다.\n // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다.\n const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration);\n if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다.\n map.set(title, {score, playScore});\n }\n }\n \n // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다.\n // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다.\n const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length);\n return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다.\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17683" - }, - { - "id": "17684", - "name": "[3차] 압축", - "fileName": "[3차]-압축&17684&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(msg) {\n const outputs = [];\n const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))];\n let [start, end] = [0, 1];\n\n const doesDictHave = (start, end) => dict.includes(msg.substring(start, end));\n\n const getInput = (start, end) => {\n if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end];\n return getInput(start, end + 1);\n };\n\n const addToDict = (start, end) => {\n if (doesDictHave(start, end)) return;\n dict.push(msg.substring(start, end));\n };\n\n const addToOutputs = (start, end) => {\n if (!doesDictHave(start, end)) return;\n outputs.push(dict.indexOf(msg.substring(start, end)));\n };\n\n while (start < msg.length) {\n [start, end] = getInput(start, end);\n addToDict(start, end + 1);\n addToOutputs(start, end);\n start = end;\n }\n return outputs;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17684" - }, - { - "id": "17686", - "name": "[3차] 파일명 정렬", - "fileName": "[3차]-파일명-정렬&17686&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(files) {\n var answer = [];\n const numberRegex = /[0-9]+/\n answer = files.sort((a, b) => {\n const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)]\n const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()]\n const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])]\n return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0\n })\n return answer;\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/17686" - }, - { - "id": "92335", - "name": "k진수에서 소수 개수 구하기", - "fileName": "k진수에서-소수-개수-구하기&92335&.js", - "level": 2, - "code": "// https://github.com/codeisneverodd/programmers-coding-test\n// 완벽한 정답이 아닙니다.\n// 1 - minjongbaek\nfunction isPrime(number) { // 소수를 판별하는 함수\n if (number < 2) return false;\n for (let i = 2; i * i <= number; i += 1) {\n if (number % i === 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction solution(n, k) {\n // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만,\n // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다.\n // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다.\n\n // (n).toString(k) // n을 k진수로 변환합니다.\n // .split('0') // 0을 기준으로 나눕니다.\n // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다.\n return (n).toString(k).split('0').filter((number) => isPrime(+number)).length;\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/92335" - }, - { - "id": "87390", - "name": "n^2 배열 자르기", - "fileName": "n^2-배열-자르기&87390&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - jaewon1676\nfunction solution (n, left, right) {\n const answer = [];\n \n for (let i=left; i <= right; i++) { // left부터 right까지를 구한다.\n let row = parseInt(i/n);\t// 행(row)을 구한다.\n let column = i%n;\t// 열(column)을 구한다.\n answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다.\n }\n return answer\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/87390" - }, - { - "id": "42746", - "name": "가장 큰 수", - "fileName": "가장-큰-수&42746&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers) {\n var answer = '';\n numbers.sort(sortFunc)\n answer = numbers.join('')\n if (answer[0] === '0') return '0'\n return answer;\n}\n\nconst sortFunc = (a, b) => {\n const compareA = parseInt(a.toString() + b.toString())\n const compareB = parseInt(b.toString() + a.toString())\n return compareB - compareA\n}\n\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42746" - }, - { - "id": "12905", - "name": "가장 큰 정사각형 찾기", - "fileName": "가장-큰-정사각형-찾기&12905&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(board) {\n for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능\n for (let col = 0; col < board[0].length; col++) {\n if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined)))\n board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1;\n }\n }\n return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12905" - }, - { - "id": "81302", - "name": "거리두기 확인하기", - "fileName": "거리두기-확인하기&81302&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(places) {\n var answer = [];\n answer = places.map(place => {\n return place.some((row, rowIndex) =>\n row.split('').some((mark, colIndex, rowArr) => {\n if (mark === 'X') return false\n const countPeopleAround = [\n rowArr[colIndex - 1] || '',\n rowArr[colIndex + 1] || '',\n (place[rowIndex - 1] || '')[colIndex],\n (place[rowIndex + 1] || '')[colIndex],\n ].filter(mark => mark === 'P').length\n return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1)\n })\n ) ? 0 : 1\n })\n return answer;\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/81302" - }, - { - "id": "1844", - "name": "게임 맵 최단거리", - "fileName": "게임-맵-최단거리&1844&.js", - "level": 2, - "code": "// https://github.com/codeisneverodd/programmers-coding-test\n// 1 - prove-ability\nfunction solution(maps) {\n // BFS 활용\n const row = maps.length - 1, col = maps[0].length - 1;\n \n // 큐 - 시작 위치 y, x, 이동 거리\n const queue = [[0, 0, 1]];\n \n while(queue.length) {\n // 큐 추출\n let [y, x, count] = queue.shift();\n // 상대 팀 진영이라면\n if(y === row && x === col) return count;\n // 동서남북 확인\n for(let i = 0; i < 4; i++) {\n const [dy, dx] = DIRECTION[i];\n // 다음 길 위치\n const nextY = dy + y, nextX = dx + x;\n // 맵 밖으로 나간다면\n if(isOut(nextY, nextX, row, col)) continue;\n // 도착한 곳이 벽이라면\n if(maps[nextY][nextX] === 0) continue;\n // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지\n maps[nextY][nextX] = 0;\n // 다음에 확인해야하는 곳 큐에 추가\n // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 \n queue.push([nextY, nextX, count + 1]);\n // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음..\n }\n }\n \n return -1;\n}\n\n// 상 우 하 좌\nconst DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]];\n\n// 사용이 가능한 길인지 확인하는 함수\nconst isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col;", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/1844" - }, - { - "id": "60058", - "name": "괄호 변환", - "fileName": "괄호-변환&60058&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(p) {\n if (p.length === 0) return p\n let bracketCount = 0\n let isURight = true\n for (let i = 0; i < p.length; i++) {\n bracketCount = p[i] === '(' ? bracketCount + 1 : bracketCount - 1\n if (bracketCount < 0) isURight = false\n if (bracketCount === 0) {\n const [u, v] = [p.slice(0, i + 1), p.slice(i + 1)]\n if (isURight) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n }\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/60058" - }, - { - "id": "76502", - "name": "괄호 회전하기", - "fileName": "괄호-회전하기&76502&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n let answer = 0;\n let sArr = s.split('')\n if (isRight(sArr.join(''))) answer += 1\n for (let i = 0; i < sArr.length - 1; i++) {\n sArr.push(sArr.shift())\n if (isRight(sArr.join(''))) answer += 1\n }\n return answer;\n}\n\nfunction isRight(str) {\n const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')']\n let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}]\n for (let sIndex = 0; sIndex < str.length; sIndex++) {\n for (let bIndex = 0; bIndex < 3; bIndex++) {\n if (str[sIndex] === bracketOpen[bIndex]) {\n status[bIndex].open = true\n status[bIndex].openOrder.push(sIndex)\n }\n if (str[sIndex] === bracketClose[bIndex]) {\n if (status[bIndex].openOrder.length > 0) {\n if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0)\n return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘\n status[bIndex].openOrder.pop()\n status[bIndex].open = false\n } else {\n return false //열리기 전에 닫힘\n }\n }\n }\n }\n for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음\n return true\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/76502" - }, - { - "id": "87377", - "name": "교점에 별 만들기", - "fileName": "교점에-별-만들기&87377&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(line) {\n const getCrossPoint = ([A, B, E], [C, D, F]) => {\n if (A * D - B * C === 0) return [Infinity, Infinity];\n return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)];\n }; //문제 설명 최하단 참조\n\n const crossPoints = line.flatMap((lineA, i) =>\n line\n .slice(i + 1)\n .map(lineB => getCrossPoint(lineA, lineB))\n .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y))\n );\n\n const generateCanvas = crossPoints => {\n const xPoints = [...crossPoints.map(([x, y]) => x)];\n const yPoints = [...crossPoints.map(([x, y]) => y)];\n const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)];\n const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)];\n const xLength = Math.abs(maxX - minX) + 1;\n const yLength = Math.abs(maxY - minY) + 1;\n\n return {\n canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')),\n draw([x, y], value) {\n this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value;\n },\n print() {\n return this.canvas.map(row => row.join(''));\n },\n };\n };\n\n const canvas = generateCanvas(crossPoints);\n\n crossPoints.forEach(point => {\n canvas.draw(point, '*');\n });\n\n return canvas.print();\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/87377" - }, - { - "id": "42885", - "name": "구명보트", - "fileName": "구명보트&42885&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - jaewon1676\nfunction solution(people, limit) {\n let cnt = 0;\n \n people.sort((a, b) => {return a - b}) // 몸무게 오름차순\n \n while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 \n if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기\n people.pop()\n people.shift()\n } else {\n people.pop() // 무거운사람을 뺴주자\n }\n cnt++;\n }\n return cnt;\n} // 4주차 2번 문제와 유사함\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42885" - }, - { - "id": "42586", - "name": "기능개발", - "fileName": "기능개발&42586&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd - 시간복잡도 감소\nfunction solution(progresses, speeds) {\n var answer = [];\n const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index]))\n console.log(remainDays)\n let maxDay = remainDays[0]\n answer.push(0)\n for (let i = 0; i < remainDays.length; i++) {\n if (remainDays[i] <= maxDay) {\n answer[answer.length - 1] += 1\n } else {\n answer.push(1)\n maxDay = remainDays[i]\n }\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42586" - }, - { - "id": "42583", - "name": "다리를 지나는 트럭", - "fileName": "다리를-지나는-트럭&42583&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(bridge_length, weight, truck_weights) {\n let [tick, onBridge, weightOnBridge] = [0, [{weight: 0, timeToOut: 0}], 0]\n while (onBridge.length > 0 || truck_weights.length > 0) {\n if (onBridge[0].timeToOut === tick) weightOnBridge -= onBridge.shift().weight\n if (weightOnBridge + truck_weights[0] <= weight) {\n weightOnBridge += truck_weights[0]\n onBridge.push({weight: truck_weights.shift(), timeToOut: tick + bridge_length})\n } else {\n if (onBridge[0]) tick = onBridge[0].timeToOut - 1 // 시간을 줄이는 포인트\n }\n tick++\n }\n return tick\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42583" - }, - { - "id": "12911", - "name": "다음 큰 숫자", - "fileName": "다음-큰-숫자&12911&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n let answer = n;\n const nCountOne = n.toString(2).match(/1/g).length\n while (true) {\n answer++\n if (nCountOne === (answer).toString(2).match(/1/g).length) break\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12911" - }, - { - "id": "118667", - "name": "두 큐 합 같게 만들기", - "fileName": "두-큐-합-같게-만들기&118667&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(queue1, queue2) {\n const getSum = arr => arr.reduce((a, c) => a + c, 0);\n\n if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1;\n\n const queue = [...queue1, ...queue2, ...queue1, ...queue2];\n const maxCount = queue.length;\n const average = getSum(queue) / 4;\n let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length];\n\n const pop = () => {\n currentSum -= queue[start];\n start += 1;\n count += 1;\n };\n const insert = () => {\n currentSum += queue[end];\n end += 1;\n count += 1;\n };\n\n while (count <= maxCount) {\n if (currentSum < average) insert();\n if (currentSum > average) pop();\n if (currentSum === average) return count;\n }\n return -1;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/118667" - }, - { - "id": "12913", - "name": "땅따먹기", - "fileName": "땅따먹기&12913&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - jaewon1676\nfunction solution(land) {\n var answer = 0;\n \n for (i = 1; i < land.length; i++){\n land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3]));\n land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3]));\n land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3]));\n land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2]))\n }\n answer = land[land.length - 1]\n return Math.max(...answer)\n}\n/* 풀이 과정\n1. land의 행만큼 반복문을 돌린다.\n2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다.\n3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12913" - }, - { - "id": "12914", - "name": "멀리 뛰기", - "fileName": "멀리-뛰기&12914&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n if (n < 2) return 1;\n const count = [0, 1, 2, ...Array(n - 2).fill(0)];\n count.forEach((_, i) => {\n if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567;\n });\n return count[n];\n}\n//재귀를 사용하면 콜스택 오버플로우가 발생합니다.\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12914" - }, - { - "id": "62048", - "name": "멀쩡한 사각형", - "fileName": "멀쩡한-사각형&62048&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor(w, h)\n answer = w * h - (h + w - gcd)\n return answer;\n}\n\nlet greatestCommonDivisor = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/62048" - }, - { - "id": "72411", - "name": "메뉴 리뉴얼", - "fileName": "메뉴-리뉴얼&72411&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(orders, course) {\n var answer = [];\n for (const selectNum of course) {\n let combinations = []\n for (const order of orders) {\n getCombinations(Array.from(order), selectNum)\n .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다.\n .forEach(combString => combinations.push(combString))\n }\n const combCounts = combinations.reduce((counts, combination) => {\n counts[combination] = (counts[combination] || 0) + 1;\n return counts;\n }, {});\n let maxCount = 0, maxComb = []\n for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb]\n for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb)\n answer.push(...maxComb)\n }\n answer = answer.sort()\n return answer;\n}\n\nconst getCombinations = (array, selectNum) => {\n const result = [];\n if (selectNum === 1) return array.map((element) => [element]);\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/72411" - }, - { - "id": "84512", - "name": "모음사전", - "fileName": "모음사전&84512&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(word) {\n const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 };\n const price = calculatePrice([1], 5);\n return word\n .split(\"\")\n .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet])\n .reduce((acc, curr) => acc + curr, 0);\n}\nconst calculatePrice = (result = [1], targetLength) => {\n if (result.length === targetLength) return result;\n return calculatePrice([result[0] * 5 + 1, ...result], targetLength);\n};\n/*\n각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까?\n4번째 자리 - 1\n3번째 자리 - 1*5 + 1 = 6\n2번째 자리 - 6*5 + 1 = 31\n1번째 자리 - 31*5 + 1 = 156\n0번째 자리 - 156*5 + 1 = 781\n\n검증(1부터 시작하므로 1 + 비용)\nI => (1 + 781 * 2) = 1563\nEIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189\nAAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10\nAAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6\n추천 레퍼런스: https://seongho96.tistory.com/50\n*/\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/84512" - }, - { - "id": "60057", - "name": "문자열 압축", - "fileName": "문자열-압축&60057&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n var answer = 0;\n let lengthArr = []\n for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length)\n answer = Math.min(...lengthArr)\n return answer;\n}\n\nfunction compressedString(str, unitNum) {\n let count = 1\n let result = ['']\n for (let repeat = 0; repeat <= str.length / unitNum; repeat++) {\n const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum)\n if (result[result.length - 1] === slicedGroup) {\n count++\n } else {\n if (count > 1) result[result.length - 1] = count + result[result.length - 1]\n result.push(slicedGroup)\n count = 1\n }\n }\n return result.join('')\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/60057" - }, - { - "id": "49994", - "name": "방문 길이", - "fileName": "방문-길이&49994&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(dirs) {\n const move = ([x, y], dir) => {\n let next = [x, y];\n if (dir === 'U') next = [x, y + 1];\n if (dir === 'D') next = [x, y - 1];\n if (dir === 'R') next = [x + 1, y];\n if (dir === 'L') next = [x - 1, y];\n if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y];\n return next;\n };\n\n const isSameRoute = ([s1, e1], [s2, e2]) => {\n const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2;\n return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1));\n };\n\n const trace = {\n visited: [],\n visit(start, end) {\n if (start[0] === end[0] && start[1] === end[1]) return;\n if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]);\n },\n };\n\n let current = [0, 0];\n\n dirs.split('').forEach(dir => {\n const next = move(current, dir);\n trace.visit(current, next);\n current = next;\n });\n\n return trace.visited.length;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/49994" - }, - { - "id": "12978", - "name": "배달", - "fileName": "배달&12978&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n\n// 1 - pereng11\n// 다익스트라 + 최소힙 O( N * logN ) \n // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 \nclass MinHeap{\n constructor ()\n {\n this.heap = [ null ];\n }\n // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬\n push ( val )\n {\n this.heap.push(val);\n let childIdx = this.heap.length-1;\n let parentIdx = Math.floor(childIdx / 2);\n while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){\n this.swap( childIdx, parentIdx );\n childIdx = parentIdx;\n parentIdx = Math.floor(childIdx / 2);\n }\n }\n pop ()\n {\n if ( this.heap.length === 1 )\n {\n return undefined;\n }\n // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬\n const minNode = this.heap[ 1 ];\n this.heap[ 1 ] = this.heap[ this.heap.length - 1 ];\n this.heap.pop();\n let parentIdx = 1;\n let leftChildIdx = 2;\n let rightChildIdx = 3;\n while ( parentIdx < this.heap.length )\n {\n // 자식이 없는 경우 \n if ( !this.heap[ leftChildIdx ] )\n {\n break;\n } // 왼쪽 자식만 있는 경우\n else if ( !this.heap[ rightChildIdx ] )\n {\n if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] )\n {\n this.swap( parentIdx, leftChildIdx );\n }\n break;\n // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬\n } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] )\n {\n const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx;\n this.swap( parentIdx, minChildIdx );\n parentIdx = minChildIdx;\n leftChildIdx = parentIdx * 2\n rightChildIdx = parentIdx * 2 + 1;\n } else\n {\n // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지\n break;\n }\n }\n return minNode;\n }\n swap ( idx1, idx2 )\n {\n [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ];\n }\n length ()\n {\n return this.heap.length;\n }\n}\n \nfunction solution ( N, road, K )\n{\n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const heap = new MinHeap();\n\n //시작점 삽입\n heap.push( [sp, 0] );\n\n // 가장 가까운 목적지부터 순서대로 방문\n while ( heap.length() > 1 )\n {\n //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리]\n const [ ep, val ] = heap.pop();\n //아직 방문하지 않은 곳만 처리\n if ( !visited[ ep ] )\n {\n //방문처리, 거리 저장\n visited[ ep ] = true;\n dist[ ep ] = val;\n //방문 지점을 거쳐서 가는 다른 목적지 구하기\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n {\n heap.push( [ nextEp, val + nextVal ] );\n }\n })\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12978" - }, - { - "id": "86052", - "name": "빛의 경로 사이클", - "fileName": "빛의-경로-사이클&86052&.js", - "level": 2, - "code": "// https://github.com/codeisneverodd/programmers-coding-test\n// 완벽한 정답이 아닙니다.\n// 1 - minjongbaek\n\n// 빛의 이동을 위한 DX, DY 변수를 선언합니다.\nconst DX = [-1, 1, 0, 0];\nconst DY = [0, 0, -1, 1];\n\nfunction solution(grid) {\n\n // DFS에 4방향을 고려하여 문제를 풉니다.\n // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다.\n\n const answer = [];\n\n // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]]\n const visited = Array.from({ length: grid.length }, () => []).map((v) => {\n for (let i = 0; i < grid[0].length; i += 1) {\n v.push(new Array(4).fill(false));\n }\n return v\n });\n\n for (let x = 0; x < grid.length; x += 1) {\n for (let y = 0; y < grid[0].length; y += 1) {\n for (let d = 0; d < 4; d += 1) {\n // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다.\n if (!visited[x][y][d]) {\n const stack = [];\n stack.push([x, y, d]);\n\n let cnt = 0;\n while (stack.length !== 0) {\n const [currentX, currentY, currentD] = stack.pop();\n if (!visited[currentX][currentY][currentD]) {\n visited[currentX][currentY][currentD] = true;\n cnt += 1;\n\n const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다.\n const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다.\n \n stack.push([nextX, nextY, nextD])\n }\n\n }\n answer.push(cnt);\n }\n }\n }\n }\n return answer.sort((a, b) => a - b);\n}\n\n// 다음 행선지를 구하는 함수\nfunction getNextXY(x, y, d, xLength, yLength) {\n x += DX[d];\n y += DY[d];\n\n // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다.\n if (x < 0) x = xLength - 1;\n if (x >= xLength) x = 0;\n if (y < 0) y = yLength - 1;\n if (y >= yLength) y = 0;\n\n return [x, y];\n}\n\n// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수\nfunction getNextD(command, d) {\n if (command === 'L') {\n d = [2, 3, 1, 0][d]\n } else if (command === 'R') {\n d = [3, 2, 0, 1][d]\n }\n return d\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/86052" - }, - { - "id": "68645", - "name": "삼각 달팽이", - "fileName": "삼각-달팽이&68645&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n const snail = Array.from(Array(n), (_, index) => Array(index + 1));\n let currentNum = 0;\n let [currentRow, currentCol] = [-1, 0];\n let shouldMove = n;\n while (shouldMove > 0) {\n for (let i = 0; i < shouldMove; i++)\n snail[++currentRow][currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 1; i++)\n snail[currentRow][++currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 2; i++)\n snail[--currentRow][--currentCol] = ++currentNum;\n shouldMove -= 3;\n }\n return snail.flatMap((num) => num);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/68645" - }, - { - "id": "42839", - "name": "소수 찾기", - "fileName": "소수-찾기&42839&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(numbers) {\n var answer = 0;\n const numArr = numbers.split('')\n const permutationAll = []\n for (let r = 1; r <= numbers.length; r++) {\n const permutationR\n = Permutation(numArr, r).map((permuArr) =>\n parseInt(permuArr.join(''))\n )\n for (let i = 0; i < permutationR.length; i++) permutationAll.push(permutationR[i])\n }\n const permutationSet = [...new Set(permutationAll)]\n for (const number of permutationSet) answer += isPrime(number) ? 1 : 0\n return answer;\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) if (num % i === 0) return false\n return num >= 2\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42839" - }, - { - "id": "67257", - "name": "수식 최대화", - "fileName": "수식-최대화&67257&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(expression) {\n var answer = 0;\n const mathExp = ['*', '+', '-']\n let priorityArr = Permutation(mathExp, 3)\n const calculated = []\n for (const priority of priorityArr) {\n const expressionArr = expression.split(/(\\D)/)\n for (const exp of priority) {\n while (expressionArr.includes(exp)) {\n const index = expressionArr.indexOf(exp)\n expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join('')))\n }\n }\n calculated.push(Math.abs(expressionArr[0]))\n }\n answer = Math.max(...calculated)\n return answer\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/67257" - }, - { - "id": "72412", - "name": "순위 검색", - "fileName": "순위-검색&72412&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(infos, queries) {\n const infoData = {};\n\n const fetchInfoData = (keyArr, score, start) => {\n const key = keyArr.join('');\n\n infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]);\n\n for (let i = start; i < keyArr.length; i++) {\n fetchInfoData(\n keyArr.map((v, index) => (index === i ? '-' : v)),\n score,\n i + 1\n );\n }\n };\n\n const getPassCount = (key, passScore) => {\n const scores = infoData[key];\n\n if (!scores) return 0;\n\n let [left, right] = [0, scores.length];\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n scores[mid] >= passScore ? (right = mid) : (left = mid + 1);\n }\n\n return scores.length - left;\n };\n\n infos\n .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]])\n .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0));\n\n Object.keys(infoData).forEach(key => {\n infoData[key].sort((a, b) => a - b);\n });\n\n return queries\n .map(query => query.replace(/ and /g, '').split(' '))\n .map(([key, passScore]) => getPassCount(key, +passScore));\n}\n// 주의 할 점\n// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림\n// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림.\n// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음.\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/72412" - }, - { - "id": "12923", - "name": "숫자 블록", - "fileName": "숫자-블록&12923&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - iHoHyeon\nfunction solution(begin, end) {\n return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx));\n // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다.\n}\n \nconst calc = (number) => {\n if (number === 1) return 0;\n // 1번째 위치는 무조건 0블록이 위치\n\n for (let i = 2; i <= Math.sqrt(number); i++) {\n if (number % i === 0 && number / i <= 10_000_000) return number / i;\n // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외\n }\n\n return 1;\n};\n\n/*\n 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는\n 시간 / 공간 복잡도가 급상승\n\n -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자\n \n -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다.\n\n -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다.\n\n + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다.\n*/\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12923" - }, - { - "id": "12924", - "name": "숫자의 표현", - "fileName": "숫자의-표현&12924&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) { //수학적 풀이는 별도로 하지 않았습니다.\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n let sum = 0\n for (let j = i; j <= n; j++) {\n sum += j\n if (sum >= n) {\n if (sum === n) answer++\n break\n }\n }\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12924" - }, - { - "id": "49993", - "name": "스킬트리", - "fileName": "스킬트리&49993&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(skill, skill_trees) {\n var answer = 0;\n for (const tree of skill_trees) {\n let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x))\n if (checkOrder(check)) answer += 1\n }\n return answer;\n}\n\nfunction checkOrder(checkArr) {\n for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false\n return true\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/49993" - }, - { - "id": "92342", - "name": "양궁대회", - "fileName": "양궁대회&92342&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\n// 문제 풀이 전략\n// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다.\n// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다.\n// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다.\n// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다.\n// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다.\n// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다\n// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다.\n// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다.\nfunction solution(possibleArrows, apeachComb) {\n const compareTable = apeachComb.map(apeachArrow => ({\n apeachArrow,\n ryanArrow: 0,\n }));\n const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows);\n const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff));\n const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff);\n if (maxScoreDiff <= 0) return [-1];\n const getIndexOfLastArrow = arrowTable =>\n arrowTable.length -\n arrowTable\n .slice()\n .reverse()\n .findIndex(x => x !== 0);\n return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable;\n}\nfunction getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) {\n const { apeachArrow } = compareTable[currentIndex];\n const lastIndex = compareTable.length - 1;\n const possibleRyanArrows = [\n 0,\n numberOfArrowLeft > apeachArrow && apeachArrow + 1,\n numberOfArrowLeft >= apeachArrow && apeachArrow,\n ];\n\n if (currentIndex === lastIndex || numberOfArrowLeft === 0) {\n if (numberOfArrowLeft > 0) {\n compareTable[compareTable.length - 1] = {\n apeachArrow,\n ryanArrow: numberOfArrowLeft,\n };\n }\n const appeachScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) =>\n apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc,\n 0\n );\n const ryanScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc),\n 0\n );\n return [\n {\n scoreDiff: ryanScore - appeachScore,\n ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow),\n },\n ];\n }\n return [\n ...possibleRyanArrows.flatMap(ryanUsedArrow => {\n const nextCompareTable = [...compareTable];\n nextCompareTable.splice(currentIndex, 1, {\n apeachArrow,\n ryanArrow: ryanUsedArrow,\n });\n return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow);\n }),\n ];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/92342" - }, - { - "id": "12981", - "name": "영어 끝말잇기", - "fileName": "영어-끝말잇기&12981&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, words) {\n var answer = [];\n let turn = 1\n for (let i = 1; i < words.length; i++) {\n let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i]))\n if (i % n === 0) turn++\n if (!pass) return [i % n + 1, turn]\n }\n return [0, 0];\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12981" - }, - { - "id": "12985", - "name": "예상 대진표", - "fileName": "예상-대진표&12985&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\n\nfunction solution(n, a, b) {\n let currentRound = 1;\n const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호\n while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다.\n if (myNextNumber(a) === myNextNumber(b)) break\n a = myNextNumber(a)\n b = myNextNumber(b)\n currentRound++\n }\n return currentRound\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12985" - }, - { - "id": "42888", - "name": "오픈채팅방", - "fileName": "오픈채팅방&42888&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(record) {\n var answer = [];\n const users = {}\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action !== 'Leave') users[id] = name\n })\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`)\n if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`)\n })\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42888" - }, - { - "id": "12909", - "name": "올바른 괄호", - "fileName": "올바른-괄호&12909&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(s) {\n let opened = 0;\n for (const bracket of s) {\n if (bracket === \"(\") opened += 1;\n if (bracket === \")\") opened -= 1;\n if (opened < 0) return false;\n }\n return opened === 0;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12909" - }, - { - "id": "42578", - "name": "위장", - "fileName": "위장&42578&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(clothes) {\n\tvar answer = 1;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes)\n\t\tspyWear[clothNPart[1]] = (spyWear[clothNPart[1]] || 0) + 1;\n\tfor (const part in spyWear) answer *= spyWear[part] + 1;\n\treturn answer - 1;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42578" - }, - { - "id": "70129", - "name": "이진 변환 반복하기", - "fileName": "이진-변환-반복하기&70129&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n const removeZero = s => {\n const removed = s\n .split('')\n .filter(n => n !== '0')\n .join('');\n return { removed, count: s.length - removed.length };\n };\n\n const convertToBinary = (s, turnCount, removedCount) => {\n if (s === '1') return [turnCount, removedCount];\n const { removed, count } = removeZero(s);\n return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count);\n };\n\n return convertToBinary(s, 0, 0);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/70129" - }, - { - "id": "86971", - "name": "전력망을 둘로 나누기", - "fileName": "전력망을-둘로-나누기&86971&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(n, wires) {\n const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b);\n\n const convertWiresToTree = wires => [...new Set(wires.flat())];\n\n const generateTree = (wires, tree) => {\n if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree;\n\n const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire));\n const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))];\n\n return [...new Set(generateTree(nextWires, nextTree))];\n };\n\n let minDiff = Infinity;\n const length = convertWiresToTree(wires).length;\n\n wires.forEach((_, i) => {\n const [initWire, ...remainWires] = wires.filter((_, j) => j !== i);\n const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length;\n const diff = Math.abs(lengthA - (length - lengthA));\n minDiff = Math.min(diff, minDiff);\n });\n\n return minDiff;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/86971" - }, - { - "id": "12980", - "name": "점프와 순간 이동", - "fileName": "점프와-순간-이동&12980&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n var ans = 0;\n while (n > 0) {\n if (n % 2 !== 0) {\n n = (n - 1) / 2\n ans++\n } else {\n n = n / 2\n }\n }\n return ans;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12980" - }, - { - "id": "42860", - "name": "조이스틱", - "fileName": "조이스틱&42860&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(name) {\n var answer = 0;\n const length = name.length;\n let upDownCount = 0\n let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때\n for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i])\n for (let startOfA = 0; startOfA < name.length; startOfA++) {\n let endOfA = startOfA + 1;\n while (endOfA < length && name[endOfA] === 'A') endOfA++;\n const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA]\n leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1\n leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A..\n }\n answer = upDownCount + Math.min(...leftRightCountList)\n return answer;\n}\n\nfunction minUpOrDownCount(destination) {\n const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const index = Alphabet.indexOf(destination)\n return Math.min(index, Alphabet.length - index)\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42860" - }, - { - "id": "92341", - "name": "주차 요금 계산", - "fileName": "주차-요금-계산&92341&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - ljw0096\n\nfunction solution(fees, records) {\n const answer = []\n\n const parkingTable = getParkingTable(records)\n const sortedKeys = Object.keys(parkingTable).sort()\n\n for (const targetCar of sortedKeys) {\n if (parkingTable[targetCar].length % 2 === 1) {\n parkingTable[targetCar].push(['23:59', 'OUT'])\n }\n const totalTime = getTotalTime(parkingTable, targetCar)\n const fee = calculateFee(totalTime, fees)\n answer.push(fee)\n }\n\n return answer\n}\n\nfunction getParkingTable(records) {\n const parkingTable = {}\n\n records.forEach((val) => {\n const info = val.split(' ')\n if (Object.keys(parkingTable).includes(info[1])) {\n parkingTable[info[1]].push([info[0], info[2]])\n } else {\n parkingTable[info[1]] = [[info[0], info[2]]]\n }\n })\n\n return parkingTable\n}\n\nfunction getTotalTime(parkingTable, targetCar) {\n let totalTime = 0\n for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) {\n totalTime += calculateTotalTime(\n parkingTable[targetCar][i][0],\n parkingTable[targetCar][i + 1][0]\n )\n }\n return totalTime\n}\n\nfunction calculateTotalTime(time1, time2) {\n const [hour1, minute1] = time1.split(':').map((val) => parseInt(val))\n const [hour2, minute2] = time2.split(':').map((val) => parseInt(val))\n\n return hour2 * 60 + minute2 - (hour1 * 60 + minute1)\n}\n\nfunction calculateFee(totalTime, feeInfo) {\n let fee = 0\n if (feeInfo[0] >= totalTime) {\n fee = feeInfo[1]\n } else {\n fee =\n feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3]\n }\n return fee\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/92341" - }, - { - "id": "12936", - "name": "줄 서는 방법", - "fileName": "줄-서는-방법&12936&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(n, k) {\n const getFactorial = n => {\n const result = [1, 1, 2, ...Array(n - 2)];\n result.forEach((_, i) => {\n if (i > 2) result[i] = result[i - 1] * i;\n });\n return result;\n };\n\n const getDivision = (dividend, divisor) => {\n const quotient = Math.floor(dividend / divisor);\n const remainder = dividend % divisor;\n return [quotient, remainder];\n };\n\n const stepCount = getFactorial(n).reverse();\n\n const generateSteps = (k, step) => {\n const [q, r] = getDivision(k, stepCount[step]);\n if (r === 0) return [q];\n return [q, ...generateSteps(r, step + 1)];\n };\n\n const answer = [];\n\n const steps = generateSteps(k - 1, 0);\n\n const notUsedNums = Array.from({ length: n }, (_, i) => i + 1);\n\n steps.slice(1).forEach(q => {\n answer.push(notUsedNums[q]);\n notUsedNums.splice(q, 1);\n });\n\n return [...answer, ...notUsedNums];\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12936" - }, - { - "id": "12973", - "name": "짝지어 제거하기", - "fileName": "짝지어-제거하기&12973&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n var answer = -1;\n let notPairStack = []\n for (let i = 0; i < s.length; i++) notPairStack[notPairStack.length - 1] === s[i] ? notPairStack.pop() : notPairStack.push(s[i])\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12973" - }, - { - "id": "12939", - "name": "최댓값과 최솟값", - "fileName": "최댓값과-최솟값&12939&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n var answer = '';\n const arr = s.split(' ')\n answer = Math.min(...arr) + ' ' + Math.max(...arr)\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12939" - }, - { - "id": "12941", - "name": "최솟값 만들기", - "fileName": "최솟값-만들기&12941&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(A, B) {\n var answer = 0;\n A = A.sort((a, b) => a - b)\n B = B.sort((a, b) => b - a)\n for (let i = 0; i < A.length; i++) answer += A[i] * B[i]\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12941" - }, - { - "id": "42842", - "name": "카펫", - "fileName": "카펫&42842&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(brown, yellow) {\n var answer = [];\n const size = brown + yellow\n answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0]\n return answer;\n}\n\nfunction widthHeightPair(size) {\n let result = []\n for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i])\n return result\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42842" - }, - { - "id": "68936", - "name": "쿼드압축 후 개수 세기", - "fileName": "쿼드압축-후-개수-세기&68936&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - codeisneverodd\nfunction solution(arr) {\n const quad = matrix => {\n const length = matrix.length;\n const half = length / 2;\n const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0]));\n\n if (pass(matrix)) return [matrix[0][0]];\n if (length <= 2) return matrix;\n\n const startPoints = [\n [0, 0],\n [0, half],\n [half, 0],\n [half, half],\n ];\n\n return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half))));\n };\n return quad(arr)\n .flat(Infinity)\n .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]);\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/68936" - }, - { - "id": "42883", - "name": "큰 수 만들기", - "fileName": "큰-수-만들기&42883&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(number, k) {\n var answer = '';\n let answerStack = [0]\n let deleteCount = -1\n for (let i = 0; i < number.length; i++) {\n while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) {\n answerStack.pop()\n deleteCount++\n }\n if (answerStack.length < number.length - k) answerStack.push(number[i])\n }\n answer = answerStack.join('')\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42883" - }, - { - "id": "43165", - "name": "타겟 넘버", - "fileName": "타겟-넘버&43165&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1(🎩 refactor 220830) - codeisneverodd\nfunction solution(numbers, target) {\n const dfs = (index, sum) => {\n if (index === numbers.length) return sum === target ? 1 : 0;\n return dfs(index + 1, sum + numbers[index]) + dfs(index + 1, sum - numbers[index]);\n };\n return dfs(0, 0);\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/43165" - }, - { - "id": "64065", - "name": "튜플", - "fileName": "튜플&64065&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(s) {\n var answer = [];\n let sets = s\n .slice(2, -2)\n .split('},{')\n .map(set => set.split(',').map(x => parseInt(x)))\n .sort((a, b) => a.length - b.length)\n for (const set of sets) answer.push(...set.filter(x => !answer.includes(x)))\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/64065" - }, - { - "id": "42587", - "name": "프린터", - "fileName": "프린터&42587&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(priorities, location) {\n var answer = 0;\n let documents = priorities.map((priority, index) => ({location: index, priority: priority}))\n let locationPrinted = false\n while (!locationPrinted) {\n const shifted = documents.shift()\n let printAvailable = true\n if (documents.some((document) => shifted.priority < document.priority)) printAvailable = false\n if (printAvailable) {\n answer += 1\n if (shifted.location === location) locationPrinted = true\n } else {\n documents.push(shifted)\n }\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42587" - }, - { - "id": "87946", - "name": "피로도", - "fileName": "피로도&87946&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - pereng11\n//완전 탐색, greedy O(N^2)\nfunction solution(currentFatigue, dungeons) {\n return getMaxCount(currentFatigue, 0, dungeons);\n}\n\nfunction getMaxCount(currentFatigue, visitedCount, dungeons) {\n const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue);\n if (possibleDungeons.length === 0) return visitedCount;\n\n const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => {\n const [_, usedFatigue] = curr;\n const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex);\n const currentCount = getMaxCount(\n currentFatigue - usedFatigue,\n visitedCount + 1,\n nextDungeons\n );\n return Math.max(currentCount, prevCount);\n }, 0);\n\n return maxCount;\n}\n\n\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/87946" - }, - { - "id": "12945", - "name": "피보나치 수", - "fileName": "피보나치-수&12945&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n var answer = 0;\n answer = fibonacci1234567(n)\n return answer;\n}\n\nfunction fibonacci1234567(n) { //재귀적으로 하면 시간초과\n let fiboArr = new Array(n + 1).fill(0)\n fiboArr[0] = 0\n fiboArr[1] = 1\n for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과\n return fiboArr[n]\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12945" - }, - { - "id": "12946", - "name": "하노이의 탑", - "fileName": "하노이의-탑&12946&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n return move(1, 3, 2, n);\n}\nconst move = (departure, destination, waypoint, numberOfPlate) => {\n if (numberOfPlate === 1) return [[departure, destination]];\n return [\n ...move(departure, waypoint, destination, numberOfPlate - 1),\n ...move(departure, destination, waypoint, 1),\n ...move(waypoint, destination, departure, numberOfPlate - 1),\n ];\n};\n//재귀를 생각해보기에 좋은 문제입니다.\n//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi\n/*\nn개가 있다면\n1. 1->2로 n-1개를 옮김\n2. 1->3으로 가장 큰 1개를 옮김\n3. 2->1로 n-2개를 옮김\n4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김\n의 반복\n\n결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨.\na->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 \n함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음.\n*/\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12946" - }, - { - "id": "77485", - "name": "행렬 테두리 회전하기", - "fileName": "행렬-테두리-회전하기&77485&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(rows, columns, queries) {\n var answer = [];\n let matrix = new Array(rows)\n for (let i = 0; i < rows; i++) matrix[i] = new Array(columns)\n for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1\n for (const query of queries) {\n let order = []\n const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1]\n //fill order (row1->row2, col1->col2, row2->row2, col2->col1)\n for (let i = row1; i <= row2; i++) order.push(matrix[i][col1])\n for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i])\n for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2])\n for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i])\n //rotate clockwise\n order.push(order.shift())\n answer.push(Math.min(...order))\n //change value in matrix\n for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift()\n for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift()\n for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift()\n for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift()\n }\n return answer;\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/77485" - }, - { - "id": "12949", - "name": "행렬의 곱셈", - "fileName": "행렬의-곱셈&12949&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(arr1, arr2) {\n const [row, col] = [arr1.length, arr2[0].length]\n let answer = new Array(row);\n for (let i = 0; i < row; i++) answer[i] = new Array(col)\n //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값\n for (let i = 0; i < row; i++) {\n for (let j = 0; j < col; j++) {\n answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0)\n }\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12949" - }, - { - "id": "42890", - "name": "후보키", - "fileName": "후보키&42890&.js", - "level": 2, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(relation) {\n //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다.\n //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다.\n //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다.\n const keys = []\n const totalAttrCount = relation[0].length\n const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1]\n\n //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수\n const isUnique = (relation, attrIndexComb) => {\n let result = Array.from(Array(relation.length), x => '')\n for (const attrIndex of attrIndexComb) {\n relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음.\n }\n return result.length === [...new Set(result)].length\n }\n\n //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다.\n const isMinimal = (attrComb) => {\n for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false\n return true\n }\n\n //가능한 모든 조합을 검사\n for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) {\n const combinations = getCombinations(indexList, attrCount)\n for (const attrComb of combinations) {\n if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb)\n }\n }\n\n return keys.length\n}\n\n//Fn for 1. 조합을 반환하는 함수\nconst getCombinations = (array, selectNumber) => {\n const result = [];\n if (selectNumber === 1) {\n return array.map((element) => [element]);\n }\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42890" - }, - { - "id": "12900", - "name": "2 x n 타일링", - "fileName": "2-x-n-타일링&12900&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - jaewon1676\nfunction solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12900" - }, - { - "id": "12952", - "name": "N Queen", - "fileName": "N-Queen&12952&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12952" - }, - { - "id": "49189", - "name": "가장 먼 노드", - "fileName": "가장-먼-노드&49189&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, edge) {\n const graph = Array.from(Array(n + 1), () => [])\n for (const [src, dest] of edge) {\n graph[src].push(dest)\n graph[dest].push(src)\n }\n const distance = Array(n + 1).fill(0)\n distance[1] = 1\n const toBeSearched = [1]\n while (toBeSearched.length > 0) {\n const src = toBeSearched.shift()\n for (const dest of graph[src]) {\n if (distance[dest] === 0) {\n distance[dest] = distance[src] + 1\n toBeSearched.push(dest)\n }\n }\n }\n return distance.filter(x => x === Math.max(...distance)).length\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/49189" - }, - { - "id": "43162", - "name": "네트워크", - "fileName": "네트워크&43162&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, computers) {\n let answer = 0\n const visited = new Array(n).fill(false)\n const newNetwork = (startComputer) => {\n //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다.\n const toBeVisited = [startComputer]\n while (toBeVisited.length > 0) {\n //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다\n const currentComputer = toBeVisited.pop()\n visited[currentComputer] = true\n for (let nextComputer = 0; nextComputer < n; nextComputer++) {\n if (!visited[nextComputer] && computers[currentComputer][nextComputer]) {\n toBeVisited.push(nextComputer)\n }\n }\n }\n }\n\n for (let startComputer = 0; startComputer < n; startComputer++) {\n if (!visited[startComputer]) {\n newNetwork(startComputer)\n //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다.\n answer++\n }\n }\n return answer\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/43162" - }, - { - "id": "42884", - "name": "단속카메라", - "fileName": "단속카메라&42884&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - jaewon1676\nfunction solution(routes) {\n let cctv = 1; // cctv의 개수는 최소 1개\n routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬\n // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]\n let out = routes[0][1]; // -15\n // 나간 시점(out)은 첫 차량의 나간시점으로 초기화\n \n for(let i = 1; i < routes.length; i++) {\n // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치\n if(out < routes[i][0]) {\n cctv++;\n out = routes[i][1]; // out 시점 업데이트\n }\n \n // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 \n if(out > routes[i][1]) {\n out = routes[i][1]; // out 시점 업데이트 \n }\n }\n \n return cctv;\n}\n// 그리디\n\n// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.\n// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 \n// 나간시점만 검사 해주면 됩니다.\n\n// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.\n// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)\n// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42884" - }, - { - "id": "42579", - "name": "베스트앨범", - "fileName": "베스트앨범&42579&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(genres, plays) {\n var answer = [];\n const songs = []\n const genreSumHash = {}\n const genreSumArr = []\n\n //고유번호, 장르, 플레이수를 담은 songs\n genres.forEach((genre, id) => {\n songs.push({id: id, genre: genre, play: plays[id]})\n genreSumHash[genre] = genreSumHash[genre] === undefined ? plays[id] : genreSumHash[genre] + plays[id]\n })\n\n //장르별 플레이수 합으로 정렬하기 위해 생성한 배열 genreSumArr\n for (const genre in genreSumHash) genreSumArr.push([genre, genreSumHash[genre]])\n genreSumArr.sort((a, b) => b[1] - a[1])\n\n //각 장르안에서 각 노래의 play수가 높은 순으로 정렬하고 앞에서부터 2개까지 정답에 고유번호를 push\n for (const genre of genreSumArr) {\n const sorted = songs.filter(song => song.genre === genre[0]).sort((a, b) => b.play - a.play)\n for (let i = 0; i < 2 && i < sorted.length; i++) answer.push(sorted[i].id)\n }\n return answer;\n}\n\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42579" - }, - { - "id": "43164", - "name": "여행경로", - "fileName": "여행경로&43164&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(tickets) {\n const routes = [] //최종 가능 루트들을 담을 배열\n const makeRoutes = (currentDepart, remainTickets, currentRoute) => {\n //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수\n if (remainTickets.length > 0) {\n remainTickets.forEach(([depart, nextDepart], index) => {\n if (depart === currentDepart)\n //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정\n makeRoutes(\n nextDepart,\n [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)],\n [...currentRoute, currentDepart])\n })\n } else {\n //티켓을 모두 사용하면 최종 가능 루트에 포함\n routes.push([...currentRoute, currentDepart])\n }\n }\n makeRoutes(\"ICN\", tickets, [])\n return routes.sort()[0]\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/43164" - }, - { - "id": "42628", - "name": "이중우선순위큐", - "fileName": "이중우선순위큐&42628&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - jaewon1676\nfunction solution(operations) {\n var answer = [];\n for (let i = 0; i < operations.length; i++) {\n // 숫자 삽입\n if (operations[i][0] == 'I') {\n let m = operations[i].substring(2, operations[i].length);\n answer.push(m);\n }\n // if 최댓값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) {\n answer.pop();\n }\n // if 최솟값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) {\n answer.shift();\n }\n\n answer.sort((a, b) => {\n return a - b;\n });\n }\n if (answer.length == 0) return [0, 0];\n else {\n return [parseInt(answer.pop()), parseInt(answer.shift())];\n }\n}\n/* 풀이 과정\n1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다.\n2. answer 배열을 정렬 해준다\n3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다.\n*/\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/42628" - }, - { - "id": "43238", - "name": "입국심사", - "fileName": "입국심사&43238&.js", - "level": 3, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\nfunction solution(n, times) {\n //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right\n let [left, right] = [1, Math.max(...times) * n];\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0);\n //sum은 mid 시간 동안 처리 할 수 있는 사람의 수\n if (sum < n) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다.\n return left;\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/43238" - }, - { - "name": "가사 검색.js", - "fileName": "가사-검색.js", - "level": 4, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - ryong9rrr\nclass Node {\n constructor(value = '') {\n this.value = value\n this.children = new Map()\n this.count = 0\n }\n}\n\nclass Trie {\n constructor() {\n this.root = new Node()\n }\n\n insert(string) {\n let currentNode = this.root\n for (const char of string) {\n if (!currentNode.children.has(char)) {\n currentNode.children.set(char, new Node(currentNode.value + char))\n }\n currentNode = currentNode.children.get(char)\n currentNode.count++\n }\n }\n\n startsWithCount(prefix) {\n let currentNode = this.root\n for (const char of prefix) {\n if (!currentNode.children.has(char)) {\n return 0\n }\n currentNode = currentNode.children.get(char)\n }\n return currentNode.count\n }\n}\n\nfunction reverseString(string) {\n return [...string].reverse().join('')\n}\n\nfunction solution(words, queries) {\n const table = {}\n const reverseTable = {}\n const counter = {}\n\n words.forEach((word) => {\n const key = word.length\n if (!table[key]) table[key] = new Trie()\n if (!reverseTable[key]) reverseTable[key] = new Trie()\n table[key].insert(word)\n reverseTable[key].insert(reverseString(word))\n if (counter[key] === undefined) counter[key] = 0\n counter[key]++\n })\n\n return queries.map((query) => {\n const key = query.length\n if (!table[key]) {\n return 0\n }\n const tQuery = query.replace(/\\?/g, '')\n if (!tQuery) {\n return counter[key]\n }\n if (query[query.length - 1] === '?') {\n return table[key].startsWithCount(tQuery)\n }\n return reverseTable[key].startsWithCount(reverseString(tQuery))\n })\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/undefined" - }, - { - "id": "12983", - "name": "단어 퍼즐", - "fileName": "단어-퍼즐&12983&.js", - "level": 4, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - codeisneverodd\n//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90\nfunction solution(strs, t) {\n const tLength = t.length; //자주 쓰는 값 미리 계산\n //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다.\n const minCountToIndex = new Array(tLength).fill(Infinity);\n for (let currentIndex = 0; currentIndex < tLength; currentIndex++) {\n //내가 검사할 부분은 t의 0~currentIndex 영역\n const currentSlice = t.slice(0, currentIndex + 1);\n for (const str of strs) {\n //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면\n if (currentSlice.endsWith(str)) {\n //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이\n const frontLength = currentIndex - str.length + 1;\n if (frontLength === 0) {\n //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각\n minCountToIndex[currentIndex] = 1;\n } else {\n //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값\n minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1);\n }\n }\n }\n }\n //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴\n return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1];\n}\n\n//리드미 테스트용 코멘트\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12983" - }, - { - "name": "무지의 먹방 라이브.js", - "fileName": "무지의-먹방-라이브.js", - "level": 4, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//더 좋은 풀이가 존재할 수 있습니다.\n// 1 - ryong9rrr\nfunction solution(food_times, k) {\n const total = food_times.reduce((a, b) => a + b)\n if (total <= k) {\n return -1\n }\n\n // stack으로 풀기\n const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA)\n\n let prev = 0\n while (stack.length > 0 && k >= 0) {\n const [time] = stack[stack.length - 1]\n const acc = (time - prev) * stack.length\n if (k < acc) {\n break\n }\n stack.pop()\n k -= acc\n prev = time\n }\n\n const result = stack\n .reverse()\n .map(([_, order]) => order)\n .sort((orderA, orderB) => orderA - orderB)\n return result[k % result.length]\n}", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/undefined" - }, - { - "id": "12929", - "name": "올바른 괄호의 갯수", - "fileName": "올바른-괄호의-갯수&12929&.js", - "level": 4, - "code": "//https://github.com/codeisneverodd/programmers-coding-test\n//완벽한 정답이 아닙니다.\n// 1 - cg10036\nfunction solution(n) {\n const fact = n => n ? BigInt(n) * fact(n - 1) : 1n;\n return fact(n * 2) / (fact(n) * fact(n + 1));\n}\n", - "link": "https://school.programmers.co.kr/learn/courses/30/lessons/12929" - } -] diff --git a/build/newSol.json b/build/newSol.json new file mode 100644 index 0000000..dc3652b --- /dev/null +++ b/build/newSol.json @@ -0,0 +1,27 @@ +{ "author": "codeisneverodd", "code": "function solution(n, t, m, timetable) { + const hhmmToMin = (hhmm) => { + const [h, m] = hhmm.split(':').map((v) => +v); + return h * 60 + m; + }; + + const minToHHMM = (min) => { + const hh = ('' + Math.floor(min / 60)).padStart(2, '0'); + const mm = ('' + (min % 60)).padStart(2, '0'); + return `${hh}:${mm}`; + }; + + let clock = hhmmToMin('09:00'); + let waiting = timetable.map((t) => hhmmToMin(t)).sort((a, b) => a - b); + + for (let bus = 0; bus < n - 1; bus++) { + const possible = waiting.filter((time) => time <= clock).length; + const boarding = possible >= m ? m : possible; + waiting = waiting.slice(boarding); + clock += t; + } + + waiting = waiting.filter((time) => time <= clock); + const answer = waiting.length >= m ? waiting[m - 1] - 1 : clock; + return minToHHMM(answer); +} +", "probId": "" } diff --git a/build/results/db.json b/build/results/db.json new file mode 100644 index 0000000..445814b --- /dev/null +++ b/build/results/db.json @@ -0,0 +1,2795 @@ +{ + "probs": [ + { "id": "118666", "title": "성격 유형 검사하기", "level": 1 }, + { "id": "118667", "title": "두 큐 합 같게 만들기", "level": 2 }, + { "id": "120583", "title": "중복된 숫자 개수", "level": 0 }, + { "id": "120585", "title": "머쓱이보다 키 큰 사람", "level": 0 }, + { "id": "120802", "title": "두 수의 합", "level": 0 }, + { "id": "120803", "title": "두 수의 차", "level": 0 }, + { "id": "120804", "title": "두 수의 곱", "level": 0 }, + { "id": "120805", "title": "몫 구하기", "level": 0 }, + { "id": "120806", "title": "두 수의 나눗셈", "level": 0 }, + { "id": "120807", "title": "숫자 비교하기", "level": 0 }, + { "id": "120808", "title": "분수의 덧셈", "level": 0 }, + { "id": "120809", "title": "배열 두 배 만들기", "level": 0 }, + { "id": "120810", "title": "나머지 구하기", "level": 0 }, + { "id": "120811", "title": "중앙값 구하기", "level": 0 }, + { "id": "120812", "title": "최빈값 구하기", "level": 0 }, + { "id": "120813", "title": "짝수는 싫어요", "level": 0 }, + { "id": "120814", "title": "피자 나눠 먹기 (1)", "level": 0 }, + { "id": "120815", "title": "피자 나눠 먹기 (2)", "level": 0 }, + { "id": "120816", "title": "피자 나눠 먹기 (3)", "level": 0 }, + { "id": "120817", "title": "배열의 평균값", "level": 0 }, + { "id": "120818", "title": "옷가게 할인 받기", "level": 0 }, + { "id": "120819", "title": "아이스 아메리카노", "level": 0 }, + { "id": "120820", "title": "나이 출력", "level": 0 }, + { "id": "120821", "title": "배열 뒤집기", "level": 0 }, + { "id": "120822", "title": "문자열 뒤집기", "level": 0 }, + { "id": "120823", "title": "직각삼각형 출력하기", "level": 0 }, + { "id": "120824", "title": "짝수 홀수 개수", "level": 0 }, + { "id": "120825", "title": "문자 반복 출력하기", "level": 0 }, + { "id": "120826", "title": "특정 문자 제거하기", "level": 0 }, + { "id": "120829", "title": "각도기", "level": 0 }, + { "id": "120830", "title": "양꼬치", "level": 0 }, + { "id": "120831", "title": "짝수의 합", "level": 0 }, + { "id": "120833", "title": "배열 자르기", "level": 0 }, + { "id": "120834", "title": "외계행성의 나이", "level": 0 }, + { "id": "120835", "title": "진료순서 정하기", "level": 0 }, + { "id": "120836", "title": "순서쌍의 개수", "level": 0 }, + { "id": "120837", "title": "개미 군단", "level": 0 }, + { "id": "120838", "title": "모스부호 (1)", "level": 0 }, + { "id": "120839", "title": "가위 바위 보", "level": 0 }, + { "id": "120840", "title": "구슬을 나누는 경우의 수", "level": 0 }, + { "id": "120841", "title": "점의 위치 구하기", "level": 0 }, + { "id": "120842", "title": "2차원으로 만들기", "level": 0 }, + { "id": "120843", "title": "공 던지기", "level": 0 }, + { "id": "120844", "title": "배열 회전시키기", "level": 0 }, + { "id": "120845", "title": "주사위의 개수", "level": 0 }, + { "id": "120846", "title": "합성수 찾기", "level": 0 }, + { "id": "120847", "title": "최댓값 만들기(1)", "level": 0 }, + { "id": "120848", "title": "팩토리얼", "level": 0 }, + { "id": "120849", "title": "모음 제거", "level": 0 }, + { "id": "120850", "title": "문자열 정렬하기 (1)", "level": 0 }, + { "id": "120851", "title": "숨어있는 숫자의 덧셈 (1)", "level": 0 }, + { "id": "120852", "title": "소인수분해", "level": 0 }, + { "id": "120853", "title": "컨트롤 제트", "level": 0 }, + { "id": "120854", "title": "배열 원소의 길이", "level": 0 }, + { "id": "120860", "title": "직사각형 넓이 구하기", "level": 0 }, + { "id": "120861", "title": "캐릭터의 좌표", "level": 0 }, + { "id": "120862", "title": "최댓값 만들기 (2)", "level": 0 }, + { "id": "120863", "title": "다항식 더하기", "level": 0 }, + { "id": "120864", "title": "숨어있는 숫자의 덧셈 (2)", "level": 0 }, + { "id": "120866", "title": "안전지대", "level": 0 }, + { "id": "120868", "title": "삼각형의 완성조건 (2)", "level": 0 }, + { "id": "120869", "title": "외계어 사전", "level": 0 }, + { "id": "120871", "title": "저주의 숫자 3", "level": 0 }, + { "id": "120875", "title": "평행", "level": 0 }, + { "id": "120876", "title": "겹치는 선분의 길이", "level": 0 }, + { "id": "120878", "title": "유한소수 판별하기", "level": 0 }, + { "id": "120880", "title": "특이한 정렬", "level": 0 }, + { "id": "120882", "title": "등수 매기기", "level": 0 }, + { "id": "120883", "title": "로그인 성공?", "level": 0 }, + { "id": "120884", "title": "치킨 쿠폰", "level": 0 }, + { "id": "120885", "title": "이진수 더하기", "level": 0 }, + { "id": "120886", "title": "A로 B 만들기", "level": 0 }, + { "id": "120887", "title": "k의 개수", "level": 0 }, + { "id": "120888", "title": "중복된 문자 제거", "level": 0 }, + { "id": "120889", "title": "삼각형의 완성조건 (1)", "level": 0 }, + { "id": "120890", "title": "가까운 수", "level": 0 }, + { "id": "120891", "title": "369게임", "level": 0 }, + { "id": "120892", "title": "암호 해독", "level": 0 }, + { "id": "120893", "title": "대문자와 소문자", "level": 0 }, + { "id": "120894", "title": "영어가 싫어요", "level": 0 }, + { "id": "120895", "title": "인덱스 바꾸기", "level": 0 }, + { "id": "120896", "title": "한 번만 등장한 문자", "level": 0 }, + { "id": "120897", "title": "약수 구하기", "level": 0 }, + { "id": "120898", "title": "편지", "level": 0 }, + { "id": "120899", "title": "가장 큰 수 찾기", "level": 0 }, + { "id": "120902", "title": "문자열 계산하기", "level": 0 }, + { "id": "120903", "title": "배열의 유사도", "level": 0 }, + { "id": "120904", "title": "숫자 찾기", "level": 0 }, + { "id": "120905", "title": "n의 배수 고르기", "level": 0 }, + { "id": "120906", "title": "자릿수 더하기", "level": 0 }, + { "id": "120907", "title": "OX퀴즈", "level": 0 }, + { "id": "120908", "title": "문자열안에 문자열", "level": 0 }, + { "id": "120909", "title": "제곱수 판별하기", "level": 0 }, + { "id": "120910", "title": "세균 증식", "level": 0 }, + { "id": "120911", "title": "문자열 정렬하기 (2)", "level": 0 }, + { "id": "120912", "title": "7의 개수", "level": 0 }, + { "id": "120913", "title": "잘라서 배열로 저장하기", "level": 0 }, + { "id": "120921", "title": "문자열 밀기", "level": 0 }, + { "id": "120922", "title": "종이 자르기", "level": 0 }, + { "id": "120923", "title": "연속된 수의 합", "level": 0 }, + { "id": "120924", "title": "다음에 올 숫자", "level": 0 }, + { "id": "120956", "title": "옹알이", "level": 0 }, + { "id": "12899", "title": "124 나라의 숫자", "level": 2 }, + { "id": "12900", "title": "2 x n 타일링", "level": 2 }, + { "id": "12901", "title": "2016년", "level": 1 }, + { "id": "12902", "title": "3 x n 타일링", "level": 2 }, + { "id": "12903", "title": "가운데 글자 가져오기", "level": 1 }, + { "id": "12905", "title": "가장 큰 정사각형 찾기", "level": 2 }, + { "id": "12906", "title": "같은 숫자는 싫어", "level": 1 }, + { "id": "12909", "title": "올바른 괄호", "level": 2 }, + { "id": "12910", "title": "나누어 떨어지는 숫자 배열", "level": 1 }, + { "id": "12911", "title": "다음 큰 숫자", "level": 2 }, + { "id": "12912", "title": "두 정수 사이의 합", "level": 1 }, + { "id": "12913", "title": "땅따먹기", "level": 2 }, + { "id": "12914", "title": "멀리 뛰기", "level": 2 }, + { "id": "12915", "title": "문자열 내 마음대로 정렬하기", "level": 1 }, + { "id": "12916", "title": "문자열 내 p와 y의 개수", "level": 1 }, + { "id": "12917", "title": "문자열 내림차순으로 배치하기", "level": 1 }, + { "id": "12918", "title": "문자열 다루기 기본", "level": 1 }, + { "id": "12919", "title": "서울에서 김서방 찾기", "level": 1 }, + { "id": "12922", "title": "수박수박수박수박수박수#63;", "level": 1 }, + { "id": "12923", "title": "숫자 블록", "level": 2 }, + { "id": "12924", "title": "숫자의 표현", "level": 2 }, + { "id": "12925", "title": "문자열을 정수로 바꾸기", "level": 1 }, + { "id": "12926", "title": "시저 암호", "level": 1 }, + { "id": "12928", "title": "약수의 합", "level": 1 }, + { "id": "12929", "title": "올바른 괄호의 갯수", "level": 4 }, + { "id": "12930", "title": "이상한 문자 만들기", "level": 1 }, + { "id": "12931", "title": "자릿수 더하기", "level": 1 }, + { "id": "12932", "title": "자연수 뒤집어 배열로 만들기", "level": 1 }, + { "id": "12933", "title": "정수 내림차순으로 배치하기", "level": 1 }, + { "id": "12934", "title": "정수 제곱근 판별", "level": 1 }, + { "id": "12935", "title": "제일 작은 수 제거하기", "level": 1 }, + { "id": "12936", "title": "줄 서는 방법", "level": 2 }, + { "id": "12937", "title": "짝수와 홀수", "level": 1 }, + { "id": "12939", "title": "최댓값과 최솟값", "level": 2 }, + { "id": "12940", "title": "최대공약수와 최소공배수", "level": 1 }, + { "id": "12941", "title": "최솟값 만들기", "level": 2 }, + { "id": "12943", "title": "콜라츠 추측", "level": 1 }, + { "id": "12944", "title": "평균 구하기", "level": 1 }, + { "id": "12945", "title": "피보나치 수", "level": 2 }, + { "id": "12946", "title": "하노이의 탑", "level": 2 }, + { "id": "12947", "title": "하샤드 수", "level": 1 }, + { "id": "12948", "title": "핸드폰 번호 가리기", "level": 1 }, + { "id": "12949", "title": "행렬의 곱셈", "level": 2 }, + { "id": "12950", "title": "행렬의 덧셈", "level": 1 }, + { "id": "12951", "title": "JadenCase 문자열 만들기", "level": 2 }, + { "id": "12952", "title": "N Queen", "level": 2 }, + { "id": "12953", "title": "N개의 최소공배수", "level": 2 }, + { "id": "12954", "title": "x만큼 간격이 있는 n개의 숫자", "level": 1 }, + { "id": "12969", "title": "직사각형 별찍기", "level": 1 }, + { "id": "12973", "title": "짝지어 제거하기", "level": 2 }, + { "id": "12977", "title": "소수 만들기", "level": 1 }, + { "id": "12978", "title": "배달", "level": 2 }, + { "id": "12980", "title": "점프와 순간 이동", "level": 2 }, + { "id": "12981", "title": "영어 끝말잇기", "level": 2 }, + { "id": "12982", "title": "예산", "level": 1 }, + { "id": "12983", "title": "단어 퍼즐", "level": 4 }, + { "id": "12985", "title": "예상 대진표", "level": 2 }, + { "id": "131128", "title": "숫자 짝꿍", "level": 1 }, + { "id": "17677", "title": "[1차] 뉴스 클러스터링", "level": 2 }, + { "id": "17679", "title": "[1차] 프렌즈4블록", "level": 2 }, + { "id": "17680", "title": "[1차] 캐시", "level": 2 }, + { "id": "17681", "title": "[1차] 비밀지도", "level": 1 }, + { "id": "17682", "title": "[1차] 다트 게임", "level": 1 }, + { "id": "17683", "title": "[3차] 방금그곡", "level": 2 }, + { "id": "17684", "title": "[3차] 압축", "level": 2 }, + { "id": "17686", "title": "[3차] 파일명 정렬", "level": 2 }, + { "id": "17687", "title": "[3차] n진수 게임", "level": 2 }, + { "id": "1844", "title": "게임 맵 최단거리", "level": 2 }, + { "id": "1845", "title": "폰켓몬", "level": 1 }, + { "id": "42576", "title": "완주하지 못한 선수", "level": 1 }, + { "id": "42578", "title": "위장", "level": 2 }, + { "id": "42579", "title": "베스트앨범", "level": 3 }, + { "id": "42583", "title": "다리를 지나는 트럭", "level": 2 }, + { "id": "42586", "title": "기능개발", "level": 2 }, + { "id": "42587", "title": "프린터", "level": 2 }, + { "id": "42628", "title": "이중우선순위큐", "level": 3 }, + { "id": "42746", "title": "가장 큰 수", "level": 2 }, + { "id": "42747", "title": "H Index", "level": 2 }, + { "id": "42748", "title": "K번째수", "level": 1 }, + { "id": "42839", "title": "소수 찾기", "level": 2 }, + { "id": "42840", "title": "모의고사", "level": 1 }, + { "id": "42842", "title": "카펫", "level": 2 }, + { "id": "42860", "title": "조이스틱", "level": 2 }, + { "id": "42862", "title": "체육복", "level": 1 }, + { "id": "42883", "title": "큰 수 만들기", "level": 2 }, + { "id": "42884", "title": "단속카메라", "level": 3 }, + { "id": "42885", "title": "구명보트", "level": 2 }, + { "id": "42888", "title": "오픈채팅방", "level": 2 }, + { "id": "42889", "title": "실패율", "level": 1 }, + { "id": "42890", "title": "후보키", "level": 2 }, + { "id": "42891", "title": "무지의 먹방 라이브", "level": 4 }, + { "id": "43162", "title": "네트워크", "level": 3 }, + { "id": "43164", "title": "여행경로", "level": 3 }, + { "id": "43165", "title": "타겟 넘버", "level": 2 }, + { "id": "43238", "title": "입국심사", "level": 3 }, + { "id": "49189", "title": "가장 먼 노드", "level": 3 }, + { "id": "49993", "title": "스킬트리", "level": 2 }, + { "id": "49994", "title": "방문 길이", "level": 2 }, + { "id": "60057", "title": "문자열 압축", "level": 2 }, + { "id": "60058", "title": "괄호 변환", "level": 2 }, + { "id": "60060", "title": "가사 검색", "level": 4 }, + { "id": "62048", "title": "멀쩡한 사각형", "level": 2 }, + { "id": "64061", "title": "크레인 인형뽑기 게임", "level": 1 }, + { "id": "64065", "title": "튜플", "level": 2 }, + { "id": "67256", "title": "키패드 누르기", "level": 1 }, + { "id": "67257", "title": "수식 최대화", "level": 2 }, + { "id": "68644", "title": "두 개 뽑아서 더하기", "level": 1 }, + { "id": "68645", "title": "삼각 달팽이", "level": 2 }, + { "id": "68935", "title": "3진법 뒤집기", "level": 1 }, + { "id": "68936", "title": "쿼드압축 후 개수 세기", "level": 2 }, + { "id": "70128", "title": "내적", "level": 1 }, + { "id": "70129", "title": "이진 변환 반복하기", "level": 2 }, + { "id": "72410", "title": "신규 아이디 추천", "level": 1 }, + { "id": "72411", "title": "메뉴 리뉴얼", "level": 2 }, + { "id": "72412", "title": "순위 검색", "level": 2 }, + { "id": "76501", "title": "음양 더하기", "level": 1 }, + { "id": "76502", "title": "괄호 회전하기", "level": 2 }, + { "id": "77484", "title": "로또의 최고 순위와 최저 순위", "level": 1 }, + { "id": "77485", "title": "행렬 테두리 회전하기", "level": 2 }, + { "id": "77884", "title": "약수의 개수와 덧셈", "level": 1 }, + { "id": "77885", "title": "2개 이하로 다른 비트", "level": 2 }, + { "id": "81301", "title": "숫자 문자열과 영단어", "level": 1 }, + { "id": "81302", "title": "거리두기 확인하기", "level": 2 }, + { "id": "82612", "title": "부족한 금액 계산하기", "level": 1 }, + { "id": "84512", "title": "모음사전", "level": 2 }, + { "id": "86051", "title": "없는 숫자 더하기", "level": 1 }, + { "id": "86052", "title": "빛의 경로 사이클", "level": 2 }, + { "id": "86491", "title": "최소직사각형", "level": 1 }, + { "id": "86971", "title": "전력망을 둘로 나누기", "level": 2 }, + { "id": "87377", "title": "교점에 별 만들기", "level": 2 }, + { "id": "87389", "title": "나머지가 1이 되는 수 찾기", "level": 1 }, + { "id": "87390", "title": "n^2 배열 자르기", "level": 2 }, + { "id": "87946", "title": "피로도", "level": 2 }, + { "id": "92334", "title": "신고 결과 받기", "level": 1 }, + { "id": "92335", "title": "k진수에서 소수 개수 구하기", "level": 2 }, + { "id": "92341", "title": "주차 요금 계산", "level": 2 }, + { "id": "92342", "title": "양궁대회", "level": 2 } + ], + "sols": [ + { + "id": "MIKUSLr_8dvQwCo3irWtm", + "author": "ssi02014", + "code": "function solution(survey, choices) {\n const points = [3, 2, 1, 0, 1, 2, 3];\n const pointBoard = {\n R: 0,\n T: 0,\n C: 0,\n F: 0,\n J: 0,\n M: 0,\n A: 0,\n N: 0,\n };\n let result = \"\";\n\n // 카테고리 별 점수 추가\n for (let i = 0; i < survey.length; i++) {\n const categories = survey[i];\n\n if (choices[i] < 4) {\n pointBoard[categories[0]] += points[choices[i] - 1];\n } else if (choices[i] > 4) {\n pointBoard[categories[1]] += points[choices[i] - 1];\n }\n }\n\n const pointBoardEntries = Object.entries(pointBoard);\n\n // 지표에 맞게 결과 값 도출\n for (let i = 0; i < pointBoardEntries.length; i += 2) {\n const [curCategory, curValue] = pointBoardEntries[i];\n const [nextCategory, nextValue] = pointBoardEntries[i + 1];\n\n if (curValue < nextValue) {\n result += nextCategory;\n } else {\n result += curCategory;\n }\n }\n\n return result;\n}\n\n", + "probId": "118666" + }, + { + "id": "lKaNNuMhO1Q9g73VNElaE", + "author": "codeisneverodd", + "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {});\n survey.forEach((key, i) => {\n const point = points[choices[i] - 1];\n Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point);\n });\n return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join('');\n}\n\n", + "probId": "118666" + }, + { + "id": "TFIMvbMgOOaok0yVvchlV", + "author": "codisneverodd", + "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = survey.reduce((a, key, i) => {\n if (types.includes(key)) {\n a[key] = (a[key] || 0) + points[choices[i] - 1];\n return a;\n }\n const rKey = key[1] + key[0];\n a[rKey] = (a[rKey] || 0) - points[choices[i] - 1];\n return a;\n }, {});\n return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join('');\n}\n", + "probId": "118666" + }, + { + "id": "sEgHL15D-B_hURnHRf8nz", + "author": "codeisneverodd", + "code": "function solution(queue1, queue2) {\n const getSum = arr => arr.reduce((a, c) => a + c, 0);\n\n if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1;\n\n const queue = [...queue1, ...queue2, ...queue1, ...queue2];\n const maxCount = queue.length;\n const average = getSum(queue) / 4;\n let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length];\n\n const pop = () => {\n currentSum -= queue[start];\n start += 1;\n count += 1;\n };\n const insert = () => {\n currentSum += queue[end];\n end += 1;\n count += 1;\n };\n\n while (count <= maxCount) {\n if (currentSum < average) insert();\n if (currentSum > average) pop();\n if (currentSum === average) return count;\n }\n return -1;\n}\n", + "probId": "118667" + }, + { + "id": "_AR0U5ozQWXYqZ2gsS3Uz", + "author": "codeisneverodd", + "code": "function solution(array, n) {\n return array.filter(a => a === n).length;\n}\n", + "probId": "120583" + }, + { + "id": "rRfCkqYnAz8rn9BaMUI4y", + "author": "codeisneverodd", + "code": "function solution(array, height) {\n return array.filter(a => a > height).length;\n}\n", + "probId": "120585" + }, + { + "id": "I0bMOuK7vM42xCtHfqnp8", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 + num2\n}", + "probId": "120802" + }, + { + "id": "nPw5LMBQcZ_fGnRQdWuUh", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 - num2;\n}\n", + "probId": "120803" + }, + { + "id": "pnCYYkwVWBu3WjDLvCpuq", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 * num2;\n}\n", + "probId": "120804" + }, + { + "id": "EKG2lawqGvED9pATXfLNS", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return Math.floor(num1 / num2);\n}\n", + "probId": "120805" + }, + { + "id": "pY3Cqlkl_eOmjxZimcXF5", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return Math.floor((num1 / num2) * 1000);\n}\n", + "probId": "120806" + }, + { + "id": "EmsAj_2jTgt6gJIWpfShP", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 === num2 ? 1 : -1;\n}\n", + "probId": "120807" + }, + { + "id": "RPr6DCCG3mO6I084BiAun", + "author": "codeisneverodd", + "code": "function solution(denum1, num1, denum2, num2) {\n const denum = denum2 * num1 + denum1 * num2;\n const num = num1 * num2;\n const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b));\n const gcd = getGCD(denum, num);\n return [denum / gcd, num / gcd];\n}\n", + "probId": "120808" + }, + { + "id": "DE1kBGflGJmcjZsx3FJd6", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n return numbers.map(n => n * 2);\n}\n", + "probId": "120809" + }, + { + "id": "QozPu473a-_9A-8589pM-", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 % num2;\n}\n", + "probId": "120810" + }, + { + "id": "3fm2TroEj2CU2jMFq9BnF", + "author": "codeisneverodd", + "code": "function solution(array) {\n return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];\n}\n", + "probId": "120811" + }, + { + "id": "BM8LhSXvXu4-aRHH7bR0Y", + "author": "codeisneverodd", + "code": "function solution(array) {\n const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n const max = Math.max(...Object.values(counts));\n const modes = Object.keys(counts).filter(key => counts[key] === max);\n return modes.length === 1 ? +modes[0] : -1;\n}\n", + "probId": "120812" + }, + { + "id": "8oX9XPtBcPaRoPpsEWTvS", + "author": "codeisneverodd", + "code": "function solution(n) {\n let nums = [];\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 1) nums = [...nums, i];\n }\n return nums;\n}\n", + "probId": "120813" + }, + { + "id": "eMb5IrM48uRvfVWbFEIiB", + "author": "codeisneverodd", + "code": "function solution(n) {\n return Math.floor((n - 1) / 7) + 1;\n}\n", + "probId": "120814" + }, + { + "id": "Bc4dj7iLlnacd98nH_sYp", + "author": "codeisneverodd", + "code": "function solution(n) {\n const getLCM = (a, b) => {\n let lcm = 1;\n while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1;\n return lcm;\n };\n\n return getLCM(n, 6) / 6;\n}\n", + "probId": "120815" + }, + { + "id": "a-CGP0gA0ygo3fpSlsJ1R", + "author": "codeisneverodd", + "code": "function solution(slice, n) {\n return Math.floor((n - 1) / slice) + 1;\n}\n", + "probId": "120816" + }, + { + "id": "j-tP2-FI_bQLIYQV9RH9D", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n return numbers.reduce((a, c) => a + c, 0) / numbers.length;\n}\n", + "probId": "120817" + }, + { + "id": "2srutfxkMPmO5jAuwsZ-V", + "author": "codeisneverodd", + "code": "function solution(price) {\n if (price >= 500000) return Math.floor(price * 0.8);\n if (price >= 300000) return Math.floor(price * 0.9);\n if (price >= 100000) return Math.floor(price * 0.95);\n return price;\n}\n", + "probId": "120818" + }, + { + "id": "PNSHuY1xKT3SGzAEVBAjS", + "author": "codeisneverodd", + "code": "function solution(money) {\n return [Math.floor(money / 5500), money % 5500];\n}\n", + "probId": "120819" + }, + { + "id": "El4EvV6ynL-snVWGZK6j4", + "author": "codeisneverodd", + "code": "function solution(age) {\n return 2022 - age + 1;\n}\n", + "probId": "120820" + }, + { + "id": "lPnW8TnistmnU_FwYfSw9", + "author": "codeisneverodd", + "code": "function solution(num_list) {\n return num_list.reverse();\n}\n", + "probId": "120821" + }, + { + "id": "enli6kZDeUhUqqcLfYMOY", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...my_string].reverse().join('');\n}\n", + "probId": "120822" + }, + { + "id": "GU9tOOv0YflxFeuLc1rAy", + "author": "codeisneverodd", + "code": "const readline = require('readline');\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet input = [];\n\nrl.on('line', function (line) {\n input = line.split(' ');\n}).on('close', function () {\n for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i));\n});\n", + "probId": "120823" + }, + { + "id": "8t3DZqIIvYfAt9e0PHHEx", + "author": "codeisneverodd", + "code": "function solution(num_list) {\n const evenLength = num_list.filter(n => n % 2 === 0).length;\n return [evenLength, num_list.length - evenLength];\n}\n", + "probId": "120824" + }, + { + "id": "4WaSdDkEQii94ZVxjqTtb", + "author": "codeisneverodd", + "code": "function solution(my_string, n) {\n return [...my_string].map(char => char.repeat(n)).join('');\n}\n", + "probId": "120825" + }, + { + "id": "1vUc9xQxPCPK3WSI61ykE", + "author": "codeisneverodd", + "code": "function solution(my_string, letter) {\n return my_string.replaceAll(letter, '');\n}\n", + "probId": "120826" + }, + { + "id": "LOFQZX3AwnzV1HCLo04ke", + "author": "codeisneverodd", + "code": "function solution(angle) {\n if (angle === 180) return 4;\n if (angle > 90) return 3;\n if (angle === 90) return 2;\n return 1;\n}\n", + "probId": "120829" + }, + { + "id": "hj6B5NADfrmS8PFvx2Veq", + "author": "codeisneverodd", + "code": "function solution(n, k) {\n return n * 12000 + (k - Math.floor(n / 10)) * 2000;\n}\n", + "probId": "120830" + }, + { + "id": "dVta7xJs--XnQe_2k_yPr", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = 0;\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 0) answer += i;\n }\n return answer;\n}\n", + "probId": "120831" + }, + { + "id": "XJy_DNL6md3IXq7qzwWf7", + "author": "codeisneverodd", + "code": "function solution(numbers, num1, num2) {\n return numbers.slice(num1, num2 + 1);\n}\n", + "probId": "120833" + }, + { + "id": "z2lOt7XIcpaoshp9BjERf", + "author": "codeisneverodd", + "code": "function solution(age) {\n return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join('');\n}", + "probId": "120834" + }, + { + "id": "Sz3iHVBucH-oqNfQYEn4S", + "author": "codeisneverodd", + "code": "function solution(emergency) {\n const sorted = [...emergency].sort((a, b) => b - a);\n return emergency.map(e => sorted.findIndex(s => s === e) + 1);\n}\n", + "probId": "120835" + }, + { + "id": "qaMlzhKP7eCFuNLF7zLil", + "author": "codeisneverodd", + "code": "function solution(n) {\n let count = 0;\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) count += 2;\n }\n if (n % Math.sqrt(n) === 0) count += 1;\n return count;\n}\n", + "probId": "120836" + }, + { + "id": "8vFeaHf-A0Slz5CHrUGdi", + "author": "codeisneverodd", + "code": "function solution(hp) {\n const first = Math.floor(hp / 5);\n const second = Math.floor((hp - first * 5) / 3);\n const third = hp - first * 5 - second * 3;\n return first + second + third;\n}\n", + "probId": "120837" + }, + { + "id": "TvFb7pJkaWBq6z9UBlMDU", + "author": "codeisneverodd", + "code": "function solution(letter) {\n const morse = { \n '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',\n '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',\n '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',\n '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',\n '-.--':'y','--..':'z'\n }\n return letter\n .split(' ')\n .map(l => morse[l])\n .join('');\n}\n", + "probId": "120838" + }, + { + "id": "qeIytPQKPekTyQxOBW17d", + "author": "codeisneverodd", + "code": "function solution(rsp) {\n const win = { 0: 5, 2: 0, 5: 2 };\n return [...rsp].map(num => win[num]).join('');\n}\n", + "probId": "120839" + }, + { + "id": "gfgE0p8unrIXwGxG84YGz", + "author": "codeisneverodd", + "code": "function solution(balls, share) {\n const [n, m] = [balls, share];\n const fact = [BigInt(1), BigInt(1)];\n\n for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i);\n\n return Number(fact[n] / (fact[n - m] * fact[m]));\n}\n", + "probId": "120840" + }, + { + "id": "CZFybhNvkLH6TULT4HP0-", + "author": "codeisneverodd", + "code": "function solution(dot) {\n const [x, y] = dot;\n if (y > 0) return x > 0 ? 1 : 2;\n return x < 0 ? 3 : 4;\n}\n", + "probId": "120841" + }, + { + "id": "4CHIyjjHXKYcWN_-fQdnm", + "author": "codeisneverodd", + "code": "function solution(num_list, n) {\n let result = [];\n for (let i = 0; i < num_list.length / n; i++) {\n result = [...result, num_list.slice(i * n, i * n + n)];\n }\n return result;\n}\n", + "probId": "120842" + }, + { + "id": "MMC1wdtu0dLFpU-6ZSaRH", + "author": "codeisneverodd", + "code": "function solution(numbers, k) {\n const goNext = current => (current + 2) % numbers.length;\n let current = 0;\n for (let i = 0; i < k - 1; i++) current = goNext(current);\n return numbers[current];\n}\n", + "probId": "120843" + }, + { + "id": "8qXdMLgXlde3nbA6CvwCp", + "author": "codeisneverodd", + "code": "function solution(numbers, direction) {\n return direction === 'right'\n ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]\n : [...numbers.slice(1), numbers[0]];\n}\n", + "probId": "120844" + }, + { + "id": "qvAm63raIopomtq1AI2l_", + "author": "codeisneverodd", + "code": "function solution(box, n) {\n return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);\n}\n", + "probId": "120845" + }, + { + "id": "455WTlErBDesscntyHmj4", + "author": "codeisneverodd", + "code": "function solution(n) {\n const isPrime = num => {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return true;\n }\n return false;\n };\n\n let count = 0;\n\n for (let i = 1; i <= n; i++) {\n if (isPrime(i)) count += 1;\n }\n \n return count;\n}\n", + "probId": "120846" + }, + { + "id": "EUkqc0bXNcdUzwNLOY6Cz", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const [first, second, ...rest] = numbers.sort((a, b) => b - a);\n return first * second;\n}\n", + "probId": "120847" + }, + { + "id": "hevvitKh1qIFM0btA8s9S", + "author": "codeisneverodd", + "code": "function solution(n) {\n let factorial = [1, 1];\n for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i;\n\n return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2;\n}\n", + "probId": "120848" + }, + { + "id": "8pVQtqZO6PcGrdckxMhmf", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return my_string.replace(/[aeiou]/g, '');\n}\n", + "probId": "120849" + }, + { + "id": "48xqGBO6aQ_3J5Y3g1Ixe", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return my_string\n .match(/[0-9]/g)\n .map(str => +str)\n .sort((a, b) => a - b);\n}\n", + "probId": "120850" + }, + { + "id": "eq4twrsvySW0scqrsCVRf", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0);\n}\n", + "probId": "120851" + }, + { + "id": "wPuFt2ITew2Z3cIEM91m8", + "author": "codeisneverodd", + "code": "function solution(n) {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(n); i++) {\n while (n % i === 0) {\n pFactors = [...pFactors, i];\n n /= i;\n }\n }\n if (n >= 2) pFactors = [...pFactors, n];\n return [...new Set(pFactors)].sort((a, b) => a - b);\n}\n\nconst funcB = () => {\n return new Promise(resolve => {\n setTimeout(resolve('guys'), 1000);\n });\n};\n\nconst funcC = async () => {\n const m = 1;\n const res = await funcB();\n return res;\n};\nwindow.addEventListener('DOMContentLoaded', async () => {\n console.log(await funcC());\n});\n", + "probId": "120852" + }, + { + "id": "276qTrHei6IlIhbf41Gc5", + "author": "codeisneverodd", + "code": "function solution(s) {\n const arr = s.split(' ');\n while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2);\n return arr.map(n => +n).reduce((a, c) => a + c, 0);\n}\n", + "probId": "120853" + }, + { + "id": "lKXKuX80mXYBeU2Arj-Qv", + "author": "codeisneverodd", + "code": "function solution(strlist) {\n return strlist.map(s => s.length);\n}\n", + "probId": "120854" + }, + { + "id": "se0WdOkyN4JHb38y_bm-w", + "author": "codeisneverodd", + "code": "function solution(dots) {\n const xDots = dots.flatMap(([x, y]) => x);\n const yDots = dots.flatMap(([x, y]) => y);\n const width = Math.max(...xDots) - Math.min(...xDots);\n const height = Math.max(...yDots) - Math.min(...yDots);\n return width * height;\n}\n", + "probId": "120860" + }, + { + "id": "TNBL0z51K3WcXuLMH83Z-", + "author": "codeisneverodd", + "code": "function solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n return keyinput\n .map(key => moves[key])\n .reduce(\n ([x, y], [mX, mY]) => (Math.abs(x + mX) > rangeX || Math.abs(y + mY) > rangeY ? [x, y] : [x + mX, y + mY]),\n [0, 0]\n );\n}\n\n", + "probId": "120861" + }, + { + "id": "Oyb7m6dvHqIVM5YzcWlfZ", + "author": "codeisneverodd", + "code": "//명령형\nfunction solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n let pos = [0, 0];\n\n keyinput\n .map(key => moves[key])\n .forEach(move => {\n if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return;\n pos[0] += move[0];\n pos[1] += move[1];\n });\n\n return pos;\n}\n", + "probId": "120861" + }, + { + "id": "r1dBb_hzDjtP8uiBtWSP9", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const sorted = numbers.sort((a, b) => a - b);\n return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]);\n}\n", + "probId": "120862" + }, + { + "id": "7RxXIiGVuTeZogRPk_TXo", + "author": "codeisneverodd", + "code": "function solution(polynomial) {\n const countX = x => {\n const count = x.replaceAll('x', '');\n return count === '' ? 1 : +count;\n };\n\n const count = polynomial\n .split(' + ')\n .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), {\n x: 0,\n num: 0,\n });\n\n const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : '';\n const num = count.num > 0 ? '' + count.num : '';\n const plus = x !== '' && num !== '' ? ' + ' : '';\n\n return x + plus + num;\n}\n", + "probId": "120863" + }, + { + "id": "16YZxcKo66LfWR4Ooy54I", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n const nums = my_string.match(/[0-9]+/g);\n return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0;\n}\n", + "probId": "120864" + }, + { + "id": "eqYC-4JAwlNlO8uZFgGYi", + "author": "codeisneverodd", + "code": "function solution(board) {\n const isBombNearby = (r, c) => {\n const nearby = [\n [-1, -1],\n [-1, 0],\n [-1, 1],\n [0, -1],\n [0, 1],\n [1, -1],\n [1, 0],\n [1, 1],\n ];\n\n const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length;\n\n return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1);\n };\n\n let count = 0;\n\n for (let r = 0; r < board.length; r++) {\n for (let c = 0; c < board.length; c++) {\n if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1;\n }\n }\n return count;\n}\n", + "probId": "120866" + }, + { + "id": "7F3rUTsivMaZloU2WX2Xn", + "author": "codeisneverodd", + "code": "function solution(sides) {\n const min = Math.min(...sides);\n const max1 = Math.max(...sides);\n const max2 = min + max1 - 1;\n return max2 - (max1 - min);\n}\n\n", + "probId": "120868" + }, + { + "id": "kJ1LotqK81DQ7ld9T1hNx", + "author": "codeisneverodd", + "code": "function solution(sides) {\n return Math.min(...sides) * 2 - 1;\n}\n", + "probId": "120868" + }, + { + "id": "hjBxrQaTyf9z9zX-dTrXC", + "author": "codeisneverodd", + "code": "function solution(spell, dic) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2;\n}\n", + "probId": "120869" + }, + { + "id": "wcGIaDkhpmsxZjs90agio", + "author": "codeisneverodd", + "code": "function solution(n) {\n let num = 0;\n let count = 0;\n\n while (count < n) {\n num += 1;\n if (!('' + num).includes('3') && num % 3 !== 0) count += 1;\n }\n\n return num;\n}\n", + "probId": "120871" + }, + { + "id": "BdFhVrddSUE3JKf1g2RHF", + "author": "codeisneverodd", + "code": "function solution(dots) {\n const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity);\n const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2);\n\n return dots.some(dot => {\n const line1 = [dots[0], dot];\n const line2 = dots.filter(dot => !line1.includes(dot));\n return isParallel(line1, line2);\n })\n ? 1\n : 0;\n}\n", + "probId": "120875" + }, + { + "id": "dO8txwVrhmROUZPL-lA9-", + "author": "codeisneverodd", + "code": "function solution(lines) {\n const visited = lines.reduce((a, [x, y]) => {\n for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1;\n return a;\n }, {});\n\n return Object.values(visited).filter(v => v > 1).length;\n}\n", + "probId": "120876" + }, + { + "id": "69Ji9CFx_qWnISYx-OF7k", + "author": "codeisneverodd", + "code": "function solution(a, b) {\n const getGCD = (a, b) => {\n let gcd = 1;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if (a % i === 0 && b % i === 0) gcd = i;\n }\n return gcd;\n };\n\n const getPrimeFactors = num => {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(num); i++) {\n while (num % i === 0) {\n pFactors = [...pFactors, i];\n num /= i;\n }\n }\n if (num > 2) pFactors = [...pFactors, num];\n return pFactors;\n };\n\n return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1;\n}\n", + "probId": "120878" + }, + { + "id": "_oj1zujPmxkBguHkK-FUZ", + "author": "codeisneverodd", + "code": "function solution(numlist, n) {\n return numlist.sort((a, b) => {\n const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)];\n if (aDiff === bDiff) return b - a;\n return aDiff - bDiff;\n });\n}\n", + "probId": "120880" + }, + { + "id": "Onm1IWHhHFuloPXPdCp31", + "author": "codeisneverodd", + "code": "function solution(score) {\n const avgs = score.map(([a, b]) => (a + b) / 2);\n const avgRank = [...avgs]\n .sort((a, b) => b - a)\n .map((avg, i) => ({ avg, rank: i + 1 }))\n .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a));\n\n return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank);\n}\n", + "probId": "120882" + }, + { + "id": "aj9a1sArsxSY1-JlC02qG", + "author": "codeisneverodd", + "code": "function solution(id_pw, db) {\n const [id, pw] = id_pw;\n if (!db.find(([_id]) => _id === id)) return 'fail';\n return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw';\n}\n", + "probId": "120883" + }, + { + "id": "xA5H1YSa3_trYgw-LhBoW", + "author": "codeisneverodd", + "code": "function solution(chicken) {\n const order = coupons => {\n if (coupons < 10) return 0;\n const service = Math.floor(coupons / 10);\n return service + order(service + (coupons % 10));\n };\n return order(chicken);\n}\n", + "probId": "120884" + }, + { + "id": "H19SV_SJWhddccXg88Uas", + "author": "codeisneverodd", + "code": "function solution(bin1, bin2) {\n return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);\n}\n", + "probId": "120885" + }, + { + "id": "tXJzOdf-F10UruI8W3ddt", + "author": "codeisneverodd", + "code": "function solution(before, after) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return sort(before) === sort(after) ? 1 : 0;\n}\n", + "probId": "120886" + }, + { + "id": "nh6i5tDtEuqXalqCeNKzJ", + "author": "codeisneverodd", + "code": "function solution(i, j, k) {\n let count = 0;\n for (let num = i; num <= j; num++) {\n count += [...('' + num)].filter(n => +n === k).length;\n }\n return count;\n}\n", + "probId": "120887" + }, + { + "id": "LdprzSmYPX5Tafx0i7g4O", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...new Set(my_string)].join('');\n}\n", + "probId": "120888" + }, + { + "id": "xPIEyxQDAXCSgQDIWJLx4", + "author": "codeisneverodd", + "code": "function solution(sides) {\n const max = Math.max(...sides);\n return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2;\n}\n", + "probId": "120889" + }, + { + "id": "VeYTkOjJ3brgMq8iN6-FM", + "author": "codeisneverodd", + "code": "function solution(array, n) {\n const minDiff = Math.min(...array.map(a => Math.abs(a - n)));\n return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff);\n}\n", + "probId": "120890" + }, + { + "id": "eNMbQhGFYlxupagPdTtHm", + "author": "codeisneverodd", + "code": "function solution(order) {\n return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length;\n}\n", + "probId": "120891" + }, + { + "id": "pDJZ9U0t6JtrvomqW5LAE", + "author": "codeisneverodd", + "code": "function solution(cipher, code) {\n return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), '');\n}\n", + "probId": "120892" + }, + { + "id": "9EqGti08O2oWtIQbrqajU", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join('');\n}", + "probId": "120893" + }, + { + "id": "FGKMaIzCZU8ihKh9EpIuf", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 };\n const regex = new RegExp(Object.keys(nums).join('|'), 'g');\n return +numbers.replace(regex, key => nums[key]);\n}\n", + "probId": "120894" + }, + { + "id": "DPB6axy9jBGn5457tX2U8", + "author": "codeisneverodd", + "code": "function solution(my_string, num1, num2) {\n const str = [...my_string];\n\n [str[num1], str[num2]] = [str[num2], str[num1]];\n\n return str.join('');\n}\n", + "probId": "120895" + }, + { + "id": "qtXyW0yuLFxA-57h37-rq", + "author": "codeisneverodd", + "code": "function solution(s) {\n const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n return Object.keys(count)\n .filter(key => count[key] === 1)\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}\n", + "probId": "120896" + }, + { + "id": "D5TeeqTF_MZ685rhIZZZk", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = [];\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) answer = [...answer, i, n / i];\n }\n if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)];\n return answer.sort((a, b) => a - b);\n}\n", + "probId": "120897" + }, + { + "id": "reRZ9qwz49UnzoZoYG7Ox", + "author": "codeisneverodd", + "code": "function solution(message) {\n return message.length * 2;\n}\n", + "probId": "120898" + }, + { + "id": "y8ZesETSuSDVG3OcaSnU4", + "author": "codeisneverodd", + "code": "function solution(array) {\n const max = Math.max(...array);\n return [max, array.indexOf(max)];\n}\n", + "probId": "120899" + }, + { + "id": "0KqtAQszMysOlLsxF8P9o", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return eval(my_string);\n}\n", + "probId": "120902" + }, + { + "id": "rBOJViCtDx6A8RGbm55ZD", + "author": "codeisneverodd", + "code": "function solution(s1, s2) {\n return s1.filter(s => s2.includes(s)).length;\n}\n", + "probId": "120903" + }, + { + "id": "1zwx3c1mdsXhh1K9s5JsE", + "author": "codeisneverodd", + "code": "function solution(num, k) {\n const index = [...('' + num)].findIndex(n => +n === k);\n return index === -1 ? -1 : index + 1;\n}\n", + "probId": "120904" + }, + { + "id": "14FKf8QAN_ZX6w1QtvxcS", + "author": "codeisneverodd", + "code": "function solution(n, numlist) {\n return numlist.filter(num => num % n === 0);\n}\n", + "probId": "120905" + }, + { + "id": "K5_vNL1F_VrMePAfcjh9Z", + "author": "codeisneverodd", + "code": "function solution(n) {\n return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0);\n}\n", + "probId": "120906" + }, + { + "id": "OsY3zwWU7GetEqX_6HycR", + "author": "codeisneverodd", + "code": "function solution(quiz) {\n return quiz.map(q => {\n const [formula, answer] = q.split('=');\n return eval(formula) === +answer ? 'O' : 'X';\n });\n}\n", + "probId": "120907" + }, + { + "id": "Y5g1hmVSLpJ_Za5hcbSjw", + "author": "codeisneverodd", + "code": "function solution(str1, str2) {\n return str1.includes(str2) ? 1 : 2;\n}\n", + "probId": "120908" + }, + { + "id": "Tm6HLdmBVkki2HWGdYVBo", + "author": "codeisneverodd", + "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? 1 : 2;\n}\n", + "probId": "120909" + }, + { + "id": "IGt1habZQLXv-WKRzNbcr", + "author": "codeisneverodd", + "code": "function solution(n, t) {\n return n * 2 ** t;\n}\n", + "probId": "120910" + }, + { + "id": "edIJE1RUJ7ZSJtvHhafSc", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...my_string]\n .map(char => char.toLowerCase())\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}\n", + "probId": "120911" + }, + { + "id": "EY7cmG0wcuQDZsVmMCP4Y", + "author": "codeisneverodd", + "code": "function solution(array) {\n return [...array.join('')].filter(a => a === '7').length;\n}\n", + "probId": "120912" + }, + { + "id": "0JrHJL0JCkEDzsEFlS8DA", + "author": "codeisneverodd", + "code": "function solution(my_str, n) {\n let result = [];\n for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)];\n return result;\n}\n", + "probId": "120913" + }, + { + "id": "9SZ5gjfB_PiUWWcXAXHnC", + "author": "codeisneverodd", + "code": "function solution(A, B) {\n const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join('');\n for (let i = 0; i <= A.length; i++) {\n if (A === B) return i;\n A = pushRight(A);\n }\n\n return -1;\n}\n", + "probId": "120921" + }, + { + "id": "sBi5KQ13QrClVJeuex1Pd", + "author": "codeisneverodd", + "code": "function solution(M, N) {\n return M * N - 1;\n}\n", + "probId": "120922" + }, + { + "id": "pYG5-VLodAZnnjCazkF5Z", + "author": "codeisneverodd", + "code": "function solution(num, total) {\n const numArr = Array.from({ length: num }, (_, i) => i);\n const sum = numArr.reduce((a, c) => a + c);\n return numArr.map(n => n - (sum - total) / num);\n}\n", + "probId": "120923" + }, + { + "id": "bWANoxNVB9Jp9GsSuOQax", + "author": "codeisneverodd", + "code": "function solution(common) {\n const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0];\n return isAP(common)\n ? common[common.length - 1] + common[1] - common[0]\n : common[common.length - 1] * (common[1] / common[0]);\n}\n", + "probId": "120924" + }, + { + "id": "rQMnOCqnnk0R_Ew1kRmtH", + "author": "codeisneverodd", + "code": "function solution(babbling) {\n const convertPWordsToNum = word => {\n const pWords = ['aya', 'ye', 'woo', 'ma'];\n return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word);\n };\n const canPronounce = word => {\n const result = convertPWordsToNum(word);\n return !/[^\\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]);\n };\n\n return babbling.filter(b => canPronounce(b)).length;\n}\n", + "probId": "120956" + }, + { + "id": "1mQvRoZ0pd01s0AVyhSoX", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n n = Math.floor((n - 1) / 3) //나누어떨어지지 않을 때에도 -1해도 상관없음\n }\n return answer;\n}\n\n", + "probId": "12899" + }, + { + "id": "QWQGmUaEU55O06dGrbsTx", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n if (remainder === 0) {\n n = Math.floor((n - 1) / 3)\n } else {\n n = Math.floor(n / 3)\n }\n }\n return answer;\n}\n\n", + "probId": "12899" + }, + { + "id": "QBPZ5Ppo9lldMncIPHvY2", + "author": "jaewon1676", + "code": "function solution(n) {\n const number = [ 4, 1, 2];\n let answer = \"\";\n \n while(n){ // \n answer = number[n%3] + answer;\n n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3);\n }\n\n return answer\n}\n\n", + "probId": "12899" + }, + { + "id": "ADTNameB-b5n9Hkn4DAC9", + "author": "RyanDeclan", + "code": "// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용\n// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드\nlet result = \"\";\nfunction solution(n) {\n let remainder = n % 3;\n let quotient = Math.floor(n / 3)\n if(!remainder){\n quotient = Math.floor(n / 3) - 1;\n remainder = 3\n }\n result += remainder;\n if( quotient <= 3){\n if(quotient)result += quotient\n result = result.replace(/[\"3\"]/g,\"4\")\n return result.split(\"\").reverse().join(\"\")\n } \n return solution(quotient);\n}\n", + "probId": "12899" + }, + { + "id": "loMqlEtl2TELeLmtqSudP", + "author": "jaewon1676", + "code": "function solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", + "probId": "12900" + }, + { + "id": "4RaFAp4CZ2NK2Pl5snUYA", + "author": "jaewon1676", + "code": "function solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", + "probId": "12900" + }, + { + "id": "HGTcW9kEGlLoqWkHaDIQS", + "author": "yongchanson", + "code": "function solution(a, b) {\n const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const week = [\"THU\", \"FRI\", \"SAT\", \"SUN\", \"MON\", \"TUE\", \"WED\"];\n\n let sum = b;\n for (\n let i = 0;\n i < a - 1;\n i++ //ex)5월인 경우 1~4월까지 더해준다.\n )\n sum += month[i];\n\n return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다.\n}\n\n", + "probId": "12901" + }, + { + "id": "fmhLxttj3enOVjmSoIKey", + "author": "chaerin-dev", + "code": "function solution(a, b) {\n let week = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n let dateStr = \"2016-\" + a + \"- \" + b;\n let date = new Date(dateStr);\n return week[date.getDay()];\n}\n\n", + "probId": "12901" + }, + { + "id": "Rg3HhwS9kvwW7NsdO96Kd", + "author": "chaerin-dev", + "code": "function solution(a, b) {\n let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n let week = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수\n let passedDays = 0;\n // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌\n for (let i = 1; i < a; i++) passedDays += arr[i];\n // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌\n passedDays += b - 1;\n return week[(5 + passedDays) % 7];\n}\n\n", + "probId": "12901" + }, + { + "id": "ybrH1nWr7pQl4j2f7RPF6", + "author": "prove-ability", + "code": "function solution(a, b) {\n var answer = \"\";\n // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?\n const days = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n // 2016년 1월 1일은 금요일로 4를 더해준다\n let totalDays = 4;\n // a 이전 모든 달의 일 수를 더한다\n for (let i = 0, len = a - 1; i < len; i++) {\n totalDays += daysOfMonth[i];\n }\n // totalDays 와 해당 일을 더해주고 7로 나눈 나머지\n const dayIndex = (totalDays + b) % 7;\n return days[dayIndex];\n}\n", + "probId": "12901" + }, + { + "id": "CbXqzRCSUHwgfMU5JPdCG", + "author": "codeisneverodd", + "code": "function solution(n) {\n if (n % 2 !== 0) return 0;\n\n const getCount = n => {\n const k = n / 2;\n const count = [3, 11, ...Array(k - 2)];\n const divider = 1000000007;\n for (let i = 2; i < k; i++) {\n count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider;\n }\n return count[count.length - 1];\n };\n\n return getCount(n);\n}\n", + "probId": "12902" + }, + { + "id": "MdWmFQcD0jjkXpKvm7zpr", + "author": "yongchanson", + "code": "function solution(s) {\n var answer = \"\";\n let L2 = s.length / 2;\n\n answer =\n s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]);\n\n return answer;\n}\n\n", + "probId": "12903" + }, + { + "id": "6sw2KL0SpGYTgBpML-ASx", + "author": "prove-ability", + "code": "function solution(s) {\n var answer = '';\n // 중간 지점 찾기\n const point = Math.floor(s.length / 2);\n // 짝수인 경우 - (중간지점 - 1) + 중간지점 \n if(s.length % 2 ===0) answer = s[point - 1] + s[point];\n // 홀수인 경우 - 중간지점\n else answer = s[point];\n return answer;\n}\n\n", + "probId": "12903" + }, + { + "id": "MPMUGep5vbLeTAMJuxYCE", + "author": "chaerin-dev", + "code": "function solution(s) {\n return s.length % 2\n ? s[parseInt(s.length / 2)]\n : s[s.length / 2 - 1] + s[s.length / 2];\n}\n\n", + "probId": "12903" + }, + { + "id": "jRrNcLxoVnDSX5ypE3Z3c", + "author": "jaewon1676", + "code": "function solution(s) {\n var answer = '';\n \n if (s.length % 2 == 0 ) { // 짝수일 경우,\n answer = s[s.length / 2 - 1] + s[s.length / 2];\n } else {\n answer = s[parseInt(s.length / 2)]; // 홀수일 경우\n }\n return answer;\n}\n", + "probId": "12903" + }, + { + "id": "j9VtXOQYb17EZa6H0aSeQ", + "author": "codeisneverodd", + "code": "function solution(board) {\n for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능\n for (let col = 0; col < board[0].length; col++) {\n if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined)))\n board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1;\n }\n }\n return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대\n}", + "probId": "12905" + }, + { + "id": "I5ZxKEcbmdFEJAmN0UkzH", + "author": "codeisneverodd", + "code": "function solution(arr) {\n var answer = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다.\n answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null;\n }\n return answer;\n}\n\n", + "probId": "12906" + }, + { + "id": "FdwY-HirCCfK-sU1VdR8c", + "author": "chaerin-dev", + "code": "function solution(arr) {\n // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고,\n // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용\n // 첫 번째 요소의 경우 undefined와 비교\n return arr.filter((item, index) => item !== arr[index - 1]);\n}\n\n", + "probId": "12906" + }, + { + "id": "ES5UGVvvysqmy2ELpnWNE", + "author": "prove-ability", + "code": "function solution(arr) {\n let answer = [];\n // 이중 배열을 사용해서 포인터?를 두 개를 사용한다\n for (let i = 0, len = arr.length - 1; i < len; i++) {\n // i 의 다음수를 비교하기 위해 j = (i + 1)\n for (let j = i + 1, len = arr.length; j < len; j++) {\n // i 와 j 번째 값이 같이 않다면\n if (arr[i] !== arr[j]) {\n answer.push(arr[i]);\n i = j - 1;\n break;\n }\n }\n }\n answer.push(arr[arr.length - 1]);\n return answer;\n}\n", + "probId": "12906" + }, + { + "id": "4pc75UF-ziuj6uqrpQTvR", + "author": "codeisneverodd", + "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((element) => {\n element % divisor === 0 ? answer.push(element) : null;\n });\n answer.length === 0 ? answer.push(-1) : null;\n answer.sort((a, b) => a - b);\n return answer;\n}\n\n//정답 3. chaerin-dev\nfunction solution(arr, divisor) {\n let answer = [];\n arr.forEach((e) => {\n if (e % divisor === 0) answer.push(e);\n });\n return answer.length ? answer.sort((a, b) => a - b) : [-1];\n}\n\n", + "probId": "12910" + }, + { + "id": "d5m0iKO2p-_Plm4pyMlnZ", + "author": "prove-ailbity", + "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((v) => v % divisor === 0 && answer.push(v))\n return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);\n}\n", + "probId": "12910" + }, + { + "id": "39d91zAf4hYS4In40aqYF", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = n;\n const nCountOne = n.toString(2).match(/1/g).length\n while (true) {\n answer++\n if (nCountOne === (answer).toString(2).match(/1/g).length) break\n }\n return answer;\n}\n\n", + "probId": "12911" + }, + { + "id": "bblvc27p-Pg9AOMlJqDqu", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = 0;\n let find = false\n const nCountOne = countOne(n.toString(2))\n let counter = 1\n while (!find) {\n if (nCountOne === countOne((n + counter).toString(2))) {\n answer = n + counter\n find = true\n }\n counter++\n }\n return answer;\n}\n\nconst countOne = (str) => {\n return str.split('').reduce((sum, currentChar) =>\n currentChar === '1' ? sum += 1 : sum, 0)\n}\n\n", + "probId": "12911" + }, + { + "id": "21WFWM06pmnGv7fa78J6k", + "author": "prove-ability", + "code": "function solution(n) {\n let i = n;\n n = n.toString(2).match(/1/g).length;\n while(true) {\n i++;\n const value = i.toString(2).match(/1/g).length;\n if(n === value) return i;\n }\n}\n\n//정답 4 = ryan-dia\nfunction solution(n) {\n const count = (num) => num.toString(2).match(/1/g).length;\n for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i\n}\n", + "probId": "12911" + }, + { + "id": "LOoGANkGVcczTUl7-HtO6", + "author": "chaerin-dev", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}\n\n", + "probId": "12912" + }, + { + "id": "9nEMYv3TDugN7VoyrNoOX", + "author": "prove-ability", + "code": "function solution(a, b) {\n let answer = 0;\n for(let i = Math.min(a, b), len = Math.max(a, b); i <= len; i++) {\n answer += i;\n }\n return answer;\n}\n\n", + "probId": "12912" + }, + { + "id": "UxZg_9AgjoElAbOGpZ5tv", + "author": "prove-ability", + "code": "function solution(a, b) {\n return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0);\n}\n\n", + "probId": "12912" + }, + { + "id": "2NDSgNsjO-Luuq1qR2iPD", + "author": "jaewon1676", + "code": "function solution(a, b) {\n if (b < a){ // b가 a보다 큰 수가 되도록 해준다.\n let c = b\n b = a\n a = c\n }\n let sum = 0; // 합을 구할 변수\n for (let i=a; i<=b; i++){\n sum += i\n }\n return sum;\n}\n", + "probId": "12912" + }, + { + "id": "_hRkfHE52vLc8DxOq3twk", + "author": "jaewon1676", + "code": "function solution(land) {\n var answer = 0;\n \n for (i = 1; i < land.length; i++){\n land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3]));\n land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3]));\n land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3]));\n land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2]))\n }\n answer = land[land.length - 1]\n return Math.max(...answer)\n}\n/* 풀이 과정\n1. land의 행만큼 반복문을 돌린다.\n2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다.\n3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/\n\n", + "probId": "12913" + }, + { + "id": "9TV7ExZ-AhNg5Z40Fuxwp", + "author": "codeisneverodd", + "code": "function solution(land) {\n for (let rowIndex = 1; rowIndex < land.length; rowIndex++) {\n for (let colIndex = 0; colIndex < land[0].length; colIndex++) {\n land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1))\n }\n }\n return Math.max(...land[land.length - 1])\n}\n", + "probId": "12913" + }, + { + "id": "YYDMgjmNjLlPoihYmbCB6", + "author": "codeisneverodd", + "code": "function solution(n) {\n if (n < 2) return 1;\n const count = [0, 1, 2, ...Array(n - 2).fill(0)];\n count.forEach((_, i) => {\n if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567;\n });\n return count[n];\n}\n//재귀를 사용하면 콜스택 오버플로우가 발생합니다.\n", + "probId": "12914" + }, + { + "id": "j7a3PBejKSlnOubq2gm2N", + "author": "chaerin-dev", + "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n // 인덱스 n번째 글자를 기준으로 오름차순 정렬\n if (a[n] > b[n]) return 1;\n else if (a[n] < b[n]) return -1;\n // 인덱스 n번째 글자가 같으면 사전순 정렬\n else return a > b ? 1 : -1;\n });\n}\n\n", + "probId": "12915" + }, + { + "id": "p5BrCQ4gCQt1NTAC83QwM", + "author": "prove-ability", + "code": "function solution(strings, n) {\n // 정렬\n strings.sort((a, b) => {\n // n번째 클자가 같다면 사전순\n if(a[n].charCodeAt() === b[n].charCodeAt()) {\n return a > b ? 1 : -1;\n } else return a[n].charCodeAt() - b[n].charCodeAt();\n });\n \n return strings;\n}\n", + "probId": "12915" + }, + { + "id": "o5Mkx3uUX6wV-xVkdyl55", + "author": "yongchanson", + "code": "function solution(s) {\n p = s.toLowerCase().split(\"p\").length;\n y = s.toLowerCase().split(\"y\").length;\n\n return p == y ? true : false;\n}\n\n", + "probId": "12916" + }, + { + "id": "kWZCFdLI6QiLIL9q_tzIg", + "author": "chaerin-dev", + "code": "function solution(s) {\n let pCount = s.split(/p/i).length - 1;\n let yCount = s.split(/y/i).length - 1;\n return pCount === yCount;\n}\n// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다.\n// Ex. \"ababb\".split(\"a\") 의 결과는 [\"\", \"b\", \"bb\"]\n// => 즉, \"a\"의 갯수는 3에서 1을 뺀 2\n\n", + "probId": "12916" + }, + { + "id": "EJv3hqzs7k3muf9cscFwz", + "author": "prove-ability", + "code": "function solution(s){\n // 배열로 변환 \n s = s.split(\"\");\n // filter 를 사용해 갯수 추출\n const pCount = s.filter((v) => v === \"p\" || v === \"P\").length;\n const yCount = s.filter((v) => v === \"y\" || v === \"Y\").length;\n return pCount === yCount;\n}", + "probId": "12916" + }, + { + "id": "cH3x4lY5oOcnsKQCMlYyK", + "author": "chaerin-dev", + "code": "function solution(s) {\n // 문자열 -> 배열 -> 정렬 -> 순서뒤집기 -> 문자열\n return s.split(\"\").sort().reverse().join(\"\");\n}\n\n", + "probId": "12917" + }, + { + "id": "y1WT1E8MPRPG9L3C6PnLt", + "author": "chaerin-dev", + "code": "function solution(s) {\n return s.split(\"\").sort((a, b) => (a < b ? 1 : -1)).join(\"\");\n}\n\n\n", + "probId": "12917" + }, + { + "id": "FG22myf-zIk4c0Bdnd78t", + "author": "prove-ability", + "code": "function solution(s) {\n return s.split(\"\").sort().reverse().join(\"\")\n}\n\n", + "probId": "12917" + }, + { + "id": "ttkZCDLrK7QSwuWKxKyD_", + "author": "jaewon1676", + "code": "function solution(s) {\n return s.split('').sort().reverse().join('')\n}\n// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다.\n// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다.\n// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다.\n\n", + "probId": "12917" + }, + { + "id": "004AV00mEeZyKFIaoWGe7", + "author": "yongchanson", + "code": "function solution(s) {\n let parseInts = parseInt(s);\n if (s.length == 6 || s.length == 4) {\n if (s == parseInts) {\n return true;\n }\n }\n\n return false;\n}\n\n", + "probId": "12918" + }, + { + "id": "NiF8yX6_dsxoVap-Lj0o6", + "author": "prove-ability", + "code": "function solution(s) {\n var answer = true;\n // 문자열 s의 길이가 4 혹은 6이고\n if (s.length === 4 || s.length === 6) {\n for (let i = 0, len = s.length; i < len; i++) {\n // 숫자로만 구성돼있는지 확인\n if (!Number.isInteger(parseInt(s[i], 10))) return false;\n }\n // 문자열 s의 길이가 4 혹은 6 가 아니라면 false\n } else return false;\n\n return answer;\n}\n\n", + "probId": "12918" + }, + { + "id": "mTFTQMZbbgLnUSO0vR0LB", + "author": "chaerin-dev", + "code": "function solution(s) {\n // 길이가 4 혹은 6이 아니면 false 반환\n if (s.length !== 4 && s.length !== 6) return false;\n // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환\n for (let i = 0; i < s.length; i++) {\n if (isNaN(Number(s[i]))) return false;\n }\n // 위의 모든 조건에 포함되지 않으면\n // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환\n return true;\n}\n\n", + "probId": "12918" + }, + { + "id": "K8wga-lhgrDahuXfs6tMx", + "author": "soulhn", + "code": "function solution(s) {\n if (s.length !== 4 && s.length !== 6) return false;\n return !s.split(\"\").some((i) => isNaN(parseInt(i, 10))); \n //early return 제외사항 먼저 처리\n //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환\n}\n", + "probId": "12918" + }, + { + "id": "L8JTn3yXKMSm8miXw4DOw", + "author": "chaerin-dev", + "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}\n\n", + "probId": "12919" + }, + { + "id": "oOfsuWXBBpqCQxM78XnOs", + "author": "prove-ability", + "code": "function solution(seoul) {\n return `김서방은 ${seoul.findIndex(v => v === \"Kim\")}에 있다`;\n}\n\n", + "probId": "12919" + }, + { + "id": "DPLqzm0nmTRp63AN_Sb7m", + "author": "jaewon1676", + "code": "function solution(seoul) {\n var answer = '';\n for (let i=0; i<1000; i++){\n if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다';\n }\n return 1;\n}", + "probId": "12919" + }, + { + "id": "G7cvzFTrzs0bj15pYligP", + "author": "chaerin-dev", + "code": "function solution(n) {\n // \"수박\"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환\n return '수박'.repeat(n).substr(0, n);\n}\n\n", + "probId": "12922" + }, + { + "id": "zqAY3Gp-1N7oyzlsYCPjL", + "author": "jaewon1676", + "code": "function solution(n) {\n let str = '';\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + '수') : (str = str + '박');\n }\n return str;\n}\n\n", + "probId": "12922" + }, + { + "id": "N6X9MWUSgNmegIDOhUevI", + "author": "prove-ability", + "code": "function solution(n) {\n let answer = '';\n answer = '수박'.repeat(n / 2);\n if (n % 2 !== 0) answer += '수';\n return answer;\n}\n\n", + "probId": "12922" + }, + { + "id": "YagOuPc_IZo7NIANvlXhq", + "author": "yongchanson", + "code": "function solution(n) {\n return '수박'.repeat(n / 2) + '수'.repeat(n % 2);\n}\n", + "probId": "12922" + }, + { + "id": "vEhAuAGCp1b9TM3T5bZBl", + "author": "iHoHyeon", + "code": "function solution(begin, end) {\n return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx));\n // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다.\n}\n \nconst calc = (number) => {\n if (number === 1) return 0;\n // 1번째 위치는 무조건 0블록이 위치\n\n for (let i = 2; i <= Math.sqrt(number); i++) {\n if (number % i === 0 && number / i <= 10_000_000) return number / i;\n // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외\n }\n\n return 1;\n};\n\n/*\n 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는\n 시간 / 공간 복잡도가 급상승\n\n -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자\n \n -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다.\n\n -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다.\n\n + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다.\n*/\n", + "probId": "12923" + }, + { + "id": "jOTBjPXWcsCfxKjaYxQUp", + "author": "codeisneverodd", + "code": "function solution(n) { //수학적 풀이는 별도로 하지 않았습니다.\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n let sum = 0\n for (let j = i; j <= n; j++) {\n sum += j\n if (sum >= n) {\n if (sum === n) answer++\n break\n }\n }\n }\n return answer;\n}\n\n", + "probId": "12924" + }, + { + "id": "5sb3HowTsAAsS_2_SG8C2", + "author": "prove-ability", + "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n let sum = 0;\n for(let j = i; j <= n; j++) {\n sum += j;\n if(sum > n) break;\n if(n === sum) {\n answer++;\n break;\n }\n }\n }\n return answer;\n}\n\n", + "probId": "12924" + }, + { + "id": "hXV1uNm6UmonW4i_9XWIy", + "author": "yongchanson", + "code": "function solution(n) {\n /*\n 정답 = n의 홀수 약수의 개수\n 15의 홀수 약수 : 1,3,5,15\n 1+2+3+4+5=15 (중간값 3)\n 4+5+6=15 (중간값 5)\n 7+8=15 (연속된 값)\n 15=15 (15)\n */\n let result = 0;\n\n for (let i = 1; i <= n; i++) {\n if (n % i == 0 && i % 2 == 1) result++;\n }\n return result;\n}\n", + "probId": "12924" + }, + { + "id": "FJvsO4-e0Joa2Tks6a1-X", + "author": "chaerin-dev", + "code": "function solution(s) {\n return Number(s);\n}\n\n", + "probId": "12925" + }, + { + "id": "SGLRODXkXIQVqcw8l1Z2W", + "author": "prove-ability", + "code": "function solution(s) {\n return parseInt(s, 10);\n}\n\n\n", + "probId": "12925" + }, + { + "id": "79mXSFGf6TR38WTa8S8yJ", + "author": "jaewon1676", + "code": "function solution(s) {\n return parseInt(s);\n}\n", + "probId": "12925" + }, + { + "id": "tR7xq9YVzWPwNVkoFYo4z", + "author": "jaewon1676", + "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((el) => {\n if (el == \" \") return el;\n let tmp = el.charCodeAt();\n return el.toLowerCase().charCodeAt() + n > 122\n ? String.fromCharCode(tmp + n - 26)\n : String.fromCharCode(tmp + n);\n })\n .join(\"\");\n}\n\n/* 문자열 -> 아스키코드 : s.charCodeAt()\n아스키코드 -> 문자열 : String.fromCharCode() \n풀이과정 \n1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다.\n2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. \n 대문자 아스키코드는 65가 A, 90이 Z이다.\n 소문자 아스키코드는 97이 a, 122가 z이다.\n3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고\n 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다.\n*/\n\n", + "probId": "12926" + }, + { + "id": "c7VpakEqr5buM11x3s75J", + "author": "chaerin-dev", + "code": "function solution(s, n) {\n let result = \"\";\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") result += \" \";\n else {\n let charCode = s.charCodeAt(i);\n // 원래 대문자였는데\n if (charCode <= 90) {\n charCode += n;\n // 변경 후 아스키코드값이 90보다 크다면\n if (charCode > 90) charCode -= 26;\n }\n // 원래 소문자였는데\n else {\n charCode += n;\n // 변경 후 아스키코드값이 122보다 크다면\n if (charCode > 122) charCode -= 26;\n }\n result += String.fromCharCode(charCode);\n }\n }\n return result;\n}\n\n\n", + "probId": "12926" + }, + { + "id": "f3dvHuJpacjdHNuujpQgW", + "author": "prove-ability", + "code": "function solution(s, n) {\n var answer = '';\n for(let i = 0, len = s.length; i < len; i++) {\n if(s[i] === \" \") {\n answer += \" \";\n continue;\n }\n let index = s[i].charCodeAt();\n // 65 - 90\n // 97 - 122\n if(index <= 90 && index + n > 90) index -= 26; \n else if (index + n > 122) index -= 26;\n \n answer += String.fromCharCode(index + n)\n }\n return answer;\n}\n\n", + "probId": "12926" + }, + { + "id": "8uj33ICqXtS5oC2VYr9Xa", + "author": "yongchanson", + "code": "function solution(n) {\n var answer = 0;\n let i;\n for (i = 1; i <= Math.sqrt(n); i++) {\n if (n % i == 0) {\n if (i * i == n) {\n //i의 제곱이 n인경우 처리\n answer += i;\n } else {\n answer += i;\n answer += n / i;\n }\n }\n }\n\n return answer;\n}\n\n", + "probId": "12928" + }, + { + "id": "H_zo_RmBDQiotfVUUeXm2", + "author": "chaerin-dev", + "code": "function solution(n) {\n let result = 0;\n let sqrtN = Math.sqrt(n);\n // 효율성을 위해 1부터 n의 제곱근-1까지만 순회\n for (let i = 1; i < sqrtN; i++) {\n if (n % i === 0) result += i + n / i;\n }\n // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌\n if (Number.isInteger(sqrtN)) result += sqrtN;\n return result;\n}\n\n", + "probId": "12928" + }, + { + "id": "b91LAYxGJUMcZ3D5l0Snc", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n if (n % i == 0) {\n // n으로 i를 나눴을 때, 나머지가 0이면 약수이다.\n answer += i;\n }\n }\n return answer;\n}\n\n// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다.\n// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다.\n// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다.\n\n\n", + "probId": "12928" + }, + { + "id": "cjq9T0uje_9RbBqYXuzzd", + "author": "prove-ability", + "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n if(n % i === 0) answer += i;\n }\n return answer;\n}\n\n", + "probId": "12928" + }, + { + "id": "5I_O9JdJC11CH-2KU5XMQ", + "author": "cg10036", + "code": "function solution(n) {\n const fact = n => n ? BigInt(n) * fact(n - 1) : 1n;\n return fact(n * 2) / (fact(n) * fact(n + 1));\n}\n", + "probId": "12929" + }, + { + "id": "jVtc0DUhInoFpUVUb_WzY", + "author": "chaerin-dev", + "code": "// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..!\nfunction solution(s) {\n let result = \"\";\n let flag = true;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") {\n flag = false;\n result += s[i];\n } else if (flag) {\n result += s[i].toUpperCase();\n } else {\n result += s[i].toLowerCase();\n }\n flag = !flag;\n }\n return result;\n}\n\n", + "probId": "12930" + }, + { + "id": "xFGW2_s2zBNK4y64Q9P6U", + "author": "jaewon1676", + "code": "function solution(s) {\n return s\n .split(\" \")\n .map((el) =>\n el\n .split(\"\")\n .map((el, index) =>\n index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}\n\n/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ]\n \n.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 \n[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]]\n \n.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase())\n//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다!\n//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다.\n[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]]\n \n.join('') 작은 배열들을 합쳐줍니다.\n['TrY', 'HeLlO', 'WoRlD']\n \n.join(' ') 큰 배열들을 합쳐줍니다.\n\"TrY HeLlO WoRlD\"\n\n대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 \n문자열을 연습하는데 좋은 문제입니다.\n*/\n\n\n", + "probId": "12930" + }, + { + "id": "7Lgvjev5o-vRW-cm9oNpN", + "author": "prove-ability", + "code": "function solution(s) {\n let answer = '';\n s.split(\" \").forEach((word) => {\n for(let i = 0, len = word.length; i < len; i++) {\n if(i % 2 === 0) answer+=word[i].toUpperCase();\n else answer+=word[i].toLowerCase();\n }\n answer += \" \";\n })\n answer = answer.slice(0, answer.length - 1)\n return answer;\n}\n", + "probId": "12930" + }, + { + "id": "c-MBCmwbGyU7_m5_XSUk4", + "author": "chaerin-dev", + "code": "function solution(n) {\n // 숫자 -> 문자열 -> 배열 -> 각 요소를 정수로 변환한 후 더한 누적 결과값 반환\n return String(n)\n .split(\"\")\n .reduce((acc, item) => (acc += parseInt(item)), 0);\n}\n\n", + "probId": "12931" + }, + { + "id": "Xg_M1lnW05J7roeOl7Cjq", + "author": "chaerin-dev", + "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 10;\n n = Math.floor(n / 10);\n }\n return result;\n}\n\n", + "probId": "12931" + }, + { + "id": "DAEk87tBtwi8_yANBQpHx", + "author": "prove-ability", + "code": "function solution(n) {\n var answer = 0;\n n.toString()\n .split(\"\")\n .forEach((v) => {\n answer += parseInt(v);\n });\n return answer;\n}\n", + "probId": "12931" + }, + { + "id": "YsbMTj12Zrh5tmcsPOoIi", + "author": "chaerin-dev", + "code": "function solution(n) {\n // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환\n return String(n)\n .split(\"\")\n .reverse()\n .map((item) => parseInt(item));\n}\n\n", + "probId": "12932" + }, + { + "id": "hLuxIviWQvTScf7r0eiJL", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = [];\n // 정수형 => 문자형 => 하나씩 잘라서 뒤집어서 모아준다.\n n = n.toString().split(\"\").reverse().join(\"\");\n for (let i = 0; i < n.length; i++) {\n answer.push(parseInt(n[i])); // n은 지금 문자형이기때문에 Push 하기전에 정수형으로 바꿔줌\n // answer.push(n[i]) 로 해주면 현재 n[i]는 문자형이기때문에 결과는 [\"5\",\"4\",\"3\",\"2\",\"1\"] 가 됩니다.\n // answer(parseInt(n[i])) 로 해준다면 n[i]는 문자형 => 정수형으로 변하기 때문에 결과는 [5, 4, 3, 2, 1] 가 됩니다.\n // 문자형과 정수형의 차이는 숫자에 큰 따옴표가 있느냐 없느냐의 차이입니다.\n }\n return answer;\n}\n\n", + "probId": "12932" + }, + { + "id": "Ow0tzdcVMVj49HWgNCmjF", + "author": "jaewon1676", + "code": "function solution(n) {\n return (n = n\n .toString()\n .split(\"\")\n .reverse()\n .map((o) => (o = parseInt(o))));\n}\n\n", + "probId": "12932" + }, + { + "id": "Ab5UdnFUnzQEoHyT-qXGn", + "author": "prove-ability", + "code": "function solution(n) {\n // 1. 문자열 변환\n // 2. 배열로 변환\n // 3. 배열 반전\n // 4. 정수로 변환\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((v) => parseInt(v));\n}\n\n", + "probId": "12932" + }, + { + "id": "ZmfKcJxTtJ9zsDtUM8k7_", + "author": "yongchanson", + "code": "function solution(n) {\n let answer = [];\n let string = n.toString();\n for (let i = string.length - 1; i >= 0; i--) {\n let slice = string.substr(i, 1) * 1;\n answer.push(slice);\n }\n return answer;\n}\n", + "probId": "12932" + }, + { + "id": "LuHX48oVJdF4I5R73WNok", + "author": "chaerin-dev", + "code": "function solution(n) {\n // 정수 -> 문자열 -> 배열\n let arrN = String(n).split(\"\");\n // 배열 내림차순 정렬\n arrN.sort((a, b) => b - a);\n // 배열 -> 문자열 -> 정수\n return parseInt(arrN.join(\"\"));\n}\n\n", + "probId": "12933" + }, + { + "id": "YtcGtpNEHBHbpYoCh3e6a", + "author": "prove-ability", + "code": "function solution(n) {\n return parseInt(n.toString().split(\"\").sort((a, b) => b - a).join(\"\"), 10);\n}\n\n", + "probId": "12933" + }, + { + "id": "z4zbV21cECNIBlvxh_bgu", + "author": "chaerin-dev", + "code": "function solution(n) {\n // n의 제곱근값을 x에 저장\n let x = Math.sqrt(n);\n // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환\n return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1;\n}\n\n", + "probId": "12934" + }, + { + "id": "qcPEVIQ0MFFnsdN2-21jG", + "author": "prove-ability", + "code": "function solution(n) {\n // n의 제곱근을 x 초기화\n const x = Math.sqrt(n);\n // 양의 정수라면 x + 1 제곱 반환\n if(Number.isInteger(x)) return Math.pow(x + 1, 2)\n // 아니라면 -1 반환\n return -1;\n}\n\n", + "probId": "12934" + }, + { + "id": "byquzQ2V5rVp9wpHX3oPI", + "author": "jaewon1676", + "code": "function solution(n) {\n let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인\n if (s ** 2 === n) return ((s+1) ** 2)\n \n return -1;\n}\n\n", + "probId": "12934" + }, + { + "id": "_S0PcFuUCdpkZWWYrfdGN", + "author": "yongchanson", + "code": "function solution(n) {\n const sqrt = Math.sqrt(n);\n //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수\n return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1;\n}\n", + "probId": "12934" + }, + { + "id": "J5LsXXBRGRvFx-4OK-04J", + "author": "jaewon1676", + "code": "function solution(arr) {\n var answer = [];\n\n let min = Math.min(...arr);\n while (1) {\n for (let i = 0; i < arr.length; i++) {\n if (min == arr[i]) {\n arr.splice(i, 1);\n if (arr.length == 0) {\n return [-1];\n } else {\n return arr;\n }\n }\n }\n }\n return -1;\n}\n\n/* 풀이과정\n1. 배열의 최솟값을 min 변수에 담아줍니다.\n2. 배열을 순회하며 최솟값을 찾아 splice 메서드를 사용해 최솟값의 자리만 제거해줍니다.\n3. 최솟값 제거 후 배열 크기가 0이면 -1, 그렇지 않으면 배열 그대로 반환합니다. */\n\n", + "probId": "12935" + }, + { + "id": "yTA8JRHYusqgkyfujzEIm", + "author": "jaewon1676", + "code": "function solution(arr) {\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n if (arr.length < 1) return [-1];\n return arr;\n}\n\n/* 풀이과정 arr [4,3,2,1] 일경우\nMath.min(...arr)은 1\narr.indexOf(1), 1이 있는 index가 3이므로 3 반환.\narr.splice(3, 1) arr의 3번째 index만 제거 해준다.\narr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */\n\n", + "probId": "12935" + }, + { + "id": "eDfvsoJHW4CQiCUzPveb0", + "author": "chaerin-dev", + "code": "function solution(arr) {\n // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환\n return arr.length ? arr : [-1];\n}\n\n", + "probId": "12935" + }, + { + "id": "pBdH5UbBwKo9pOwWkT5YO", + "author": "prove-ability", + "code": "function solution(arr) {\n // 최솟값 찾기\n const min = Math.min(...arr);\n // arr 중 min 과 같은 요소의 인덱스 제거\n arr.splice(\n arr.findIndex((num) => num === min),\n 1\n );\n // 만약 arr 가 비어있다면 [-1] 반환\n if (arr.length === 0) return [-1];\n return arr;\n}\n", + "probId": "12935" + }, + { + "id": "Lh_xnC3OjWp482MUGunbq", + "author": "codeisneverodd", + "code": "function solution(n, k) {\n const getFactorial = n => {\n const result = [1, 1, 2, ...Array(n - 2)];\n result.forEach((_, i) => {\n if (i > 2) result[i] = result[i - 1] * i;\n });\n return result;\n };\n\n const getDivision = (dividend, divisor) => {\n const quotient = Math.floor(dividend / divisor);\n const remainder = dividend % divisor;\n return [quotient, remainder];\n };\n\n const stepCount = getFactorial(n).reverse();\n\n const generateSteps = (k, step) => {\n const [q, r] = getDivision(k, stepCount[step]);\n if (r === 0) return [q];\n return [q, ...generateSteps(r, step + 1)];\n };\n\n const answer = [];\n\n const steps = generateSteps(k - 1, 0);\n\n const notUsedNums = Array.from({ length: n }, (_, i) => i + 1);\n\n steps.slice(1).forEach(q => {\n answer.push(notUsedNums[q]);\n notUsedNums.splice(q, 1);\n });\n\n return [...answer, ...notUsedNums];\n}\n", + "probId": "12936" + }, + { + "id": "ucLC626sfcrXE8mHyTQd0", + "author": "chaerin-dev", + "code": "function solution(num) {\n return num % 2 == 0 ? \"Even\" : \"Odd\";\n}\n\n", + "probId": "12937" + }, + { + "id": "9w7tm6SwrGPyojQ2itapa", + "author": "jaewon1676", + "code": "function solution(num) {\n let answer;\n num % 2 == 0 ? (answer = \"Even\") : (answer = \"Odd\");\n // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환.\n return answer;\n}\n\n", + "probId": "12937" + }, + { + "id": "eSf1rhr-2aUpt-9E0iMdL", + "author": "prove-ability", + "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}\n\n", + "probId": "12937" + }, + { + "id": "cOrwN92E2nBY-8cD4GcZf", + "author": "yongchanson", + "code": "function solution(num) {\n return num % 2 ? \"Odd\" : \"Even\";\n}\n", + "probId": "12937" + }, + { + "id": "b4Tgq0zJO99r-0YwOmyes", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = '';\n const arr = s.split(' ')\n answer = Math.min(...arr) + ' ' + Math.max(...arr)\n return answer;\n}\n\n", + "probId": "12939" + }, + { + "id": "ebWdd4TIADFPtdK1kJ0cP", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = '';\n const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b)\n answer = arr[0] + ' ' + arr[arr.length - 1]\n return answer;\n}\n\n", + "probId": "12939" + }, + { + "id": "MynbcwoO_vGvZZ4cLrLkd", + "author": "jaewon1676", + "code": "function solution(s) {\n s = s.split(' ')\n s.sort((a, b) => {return a - b}) // 오름차순 정렬\n let small = s[0] // s의 최솟값\n let large = s[s.length - 1] // s의 최댓값\n return (small + ' ' + large)\n}\n\n", + "probId": "12939" + }, + { + "id": "fBHsotRLVVcqI6hD11lXK", + "author": "prove-ability", + "code": "function solution(s) {\n s = s.split(\" \").map((v) => parseInt(v, 10))\n return `${Math.min(...s)} ${Math.max(...s)}`;\n}\n\n", + "probId": "12939" + }, + { + "id": "drk_qLQEGbYtOpyzByQjg", + "author": "yongchanson", + "code": "function solution(s) {\n let arr = s.split(\" \").sort((a, b) => a - b);\n arr.splice(1, arr.length - 2, \" \");\n let result = arr.join(\"\");\n return result;\n}\n", + "probId": "12939" + }, + { + "id": "v-P3znPWhBzvOFWjeGPFF", + "author": "chaerin-dev", + "code": "function solution(n, m) {\n // 최대공약수 구하기\n let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m));\n // 최소공배수 구하기\n let lcm = (n, m) => (n * m) / gcd(n, m);\n // 결과 출력\n return [gcd(n, m), lcm(n, m)];\n}\n\n", + "probId": "12940" + }, + { + "id": "FfUlzwdEgnrJonPT00RCE", + "author": "yongchanson", + "code": "function solution(a, b) {\n let gcd = 0;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if ((a % i) + (b % i) === 0) {\n gcd = i;\n }\n }\n return [gcd, (a / gcd) * b];\n}\n", + "probId": "12940" + }, + { + "id": "WbRge6Cq11rHjjMWrSr2f", + "author": "codeisneverodd", + "code": "function solution(A, B) {\n var answer = 0;\n A = A.sort((a, b) => a - b)\n B = B.sort((a, b) => b - a)\n for (let i = 0; i < A.length; i++) answer += A[i] * B[i]\n return answer;\n}\n\n", + "probId": "12941" + }, + { + "id": "_YWjIOhQzgAVyJHHuiVSK", + "author": "prove-ability", + "code": "function solution(A,B){\n let sum = 0;\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n \n for(let i = 0, len = A.length; i < len; i++) {\n sum += A[i] * B[i];\n }\n\n return sum;\n}\n\n", + "probId": "12941" + }, + { + "id": "jFBfSOnzXZVzb88BtR6a6", + "author": "yongchanson", + "code": "function solution(A, B) {\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n return A.reduce((t, n, i) => t + n * B[i], 0);\n}\n", + "probId": "12941" + }, + { + "id": "faOV6AoonFf0Gi-Oc37mC", + "author": "chaerin-dev", + "code": "function solution(num) {\n // 작업을 반복한 횟수를 저장할 변수\n let cnt = 0;\n // num이 1이 되면 반복 종료\n while (num > 1) {\n // 작업을 500번 반복해도 1이 되지 않으면 -1 반환\n if (cnt == 500) return -1;\n // 작업 반복 횟수 증가\n cnt++;\n // 입력된 수가 짝수이면 2로 나누기\n if (num % 2 == 0) num /= 2;\n // 입력된 수가 홀수이면 3을 곱하고 1을 더하기\n else {\n num *= 3;\n num++;\n }\n }\n // 작업을 반복한 횟수 반환\n return cnt;\n}\n\n", + "probId": "12943" + }, + { + "id": "FR78rQlCHVgFdFjUq4Y4X", + "author": "jaewon1676", + "code": "function solution(num) {\n var answer = 0;\n // num이 1이 아니고, answer이 500이 아니면 진행.\n // 두 가지 조건중 하나라도 맞지 않으면 while문 종료.\n while (num != 1 && answer != 500) {\n //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다.\n num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1);\n answer++;\n }\n return num == 1 ? answer : -1;\n}\n\n", + "probId": "12943" + }, + { + "id": "duNaIZmcnCVBqJ_MOQdhh", + "author": "prove-ability", + "code": "function solution(num) {\n let count = 0;\n\n // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.\n while (num !== 1) {\n // 입력된 수가 짝수라면 2로 나눕니다.\n if (num % 2 === 0) num /= 2;\n // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.\n else num = num * 3 + 1;\n count++;\n // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요\n if (count > 500) return -1;\n }\n\n return count;\n}\n\n", + "probId": "12943" + }, + { + "id": "HImmGfrde41_gRkR3T_g3", + "author": "yongchanson", + "code": "function solution(num) {\n let count = 0;\n while (num !== 1) {\n if (count++ === 500) return -1;\n num = num % 2 ? num * 3 + 1 : num / 2;\n }\n return count;\n}\n", + "probId": "12943" + }, + { + "id": "XBB2evbbGbzHZ_4GxKu0S", + "author": "jaewon1676", + "code": "function solution(arr) {\n var answer = 0;\n for (var i = 0; i < arr.length; i++) {\n answer += arr[i];\n }\n return answer / arr.length;\n}\n\n", + "probId": "12944" + }, + { + "id": "sk0DiO2oU5Hv3Ad-dOfOm", + "author": "chaerin-dev", + "code": "function solution(arr) {\n // arr의 모든 요소를 sum에 더힘\n let sum = arr.reduce((sum, e) => sum + e);\n // sum을 arr의 요소의 갯수로 나눈 후 반환\n return sum / arr.length;\n}\n\n", + "probId": "12944" + }, + { + "id": "loNDFENEfVUlrJ2Zbqday", + "author": "prove-ability", + "code": "function solution(arr) {\n var answer = 0;\n arr.forEach((num) => {\n answer += num;\n });\n return answer / arr.length;\n}\n", + "probId": "12944" + }, + { + "id": "PE-vTlQEaX-w3zurq_sxJ", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = 0;\n answer = fibonacci1234567(n)\n return answer;\n}\n\nfunction fibonacci1234567(n) { //재귀적으로 하면 시간초과\n let fiboArr = new Array(n + 1).fill(0)\n fiboArr[0] = 0\n fiboArr[1] = 1\n for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과\n return fiboArr[n]\n}\n\n", + "probId": "12945" + }, + { + "id": "Rirk4klKISsZ8HQafNdPv", + "author": "jaewon1676", + "code": "function solution(n) {\n let f_1 = 0;\n let f_2 = 1;\n \n for (let i=2; i<=n; i++) {\n let temp = (f_1 + f_2) % 1234567;\n f_1 = f_2;\n f_2 = temp;\n }\n \n return f_2;\n}", + "probId": "12945" + }, + { + "id": "O0VjxGojQ7qMztFspF30o", + "author": "codeisneverodd", + "code": "function solution(n) {\n return move(1, 3, 2, n);\n}\nconst move = (departure, destination, waypoint, numberOfPlate) => {\n if (numberOfPlate === 1) return [[departure, destination]];\n return [\n ...move(departure, waypoint, destination, numberOfPlate - 1),\n ...move(departure, destination, waypoint, 1),\n ...move(waypoint, destination, departure, numberOfPlate - 1),\n ];\n};\n//재귀를 생각해보기에 좋은 문제입니다.\n//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi\n/*\nn개가 있다면\n1. 1->2로 n-1개를 옮김\n2. 1->3으로 가장 큰 1개를 옮김\n3. 2->1로 n-2개를 옮김\n4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김\n의 반복\n\n결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨.\na->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 \n함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음.\n*/\n", + "probId": "12946" + }, + { + "id": "wtTNr-bhCwnjiauq7Nod5", + "author": "chaerin-dev", + "code": "function solution(x) {\n // x의 각 자리에 접근하기 위해 x를 문자열로 변환\n let x_str = x.toString();\n // 각 자릿수의 합을 저장할 변수\n let sum_of_digits = 0;\n // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌\n for (let i = 0; i < x_str.length; i++) {\n sum_of_digits += Number(x_str[i]);\n }\n // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환\n return x % sum_of_digits == 0;\n}\n\n", + "probId": "12947" + }, + { + "id": "wKcC80GK_X-_2azLojpwR", + "author": "jaewon1676", + "code": "function solution(x) {\n let sum = 0;\n let arr = String(x).split(\"\"); // 숫자를 하나씩 분리한다.\n\n for (var i = 0; i < arr.length; i++) {\n sum += Number(arr[i]); // 각 숫자를 더해준다.\n }\n\n return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수\n}\n\n", + "probId": "12947" + }, + { + "id": "135eM2uZnEMcD48QkGH_E", + "author": "prove-ability", + "code": "function solution(x) {\n var answer = true;\n // 모든 자릿수의 합을 구한다\n const sum = x\n .toString()\n .split(\"\")\n .reduce((acc, cur) => acc + parseInt(cur, 10), 0);\n // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환\n if (x % sum !== 0) return false;\n return answer;\n}\n", + "probId": "12947" + }, + { + "id": "5XvrtFCRq-0BStvHZO94h", + "author": "chaerin-dev", + "code": "function solution(phone_number) {\n // \"*\"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과\n // phone_number의 -4인덱스부터 끝까지 추출한 문자열을\n // 이어붙인 후 반환\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}\n\n", + "probId": "12948" + }, + { + "id": "tefPhDO06WwgTAkLRo0X2", + "author": "prove-ability", + "code": "function solution(phone_number) {\n var answer = \"\";\n answer += \"*\".repeat(phone_number.length - 4);\n answer += phone_number.slice(phone_number.length - 4, phone_number.length);\n return answer;\n}\n", + "probId": "12948" + }, + { + "id": "USWePps9_hgqruqOG7QPU", + "author": "codeisneverodd", + "code": "function solution(arr1, arr2) {\n const [row, col] = [arr1.length, arr2[0].length]\n let answer = new Array(row);\n for (let i = 0; i < row; i++) answer[i] = new Array(col)\n //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값\n for (let i = 0; i < row; i++) {\n for (let j = 0; j < col; j++) {\n answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0)\n }\n }\n return answer;\n}\n\n", + "probId": "12949" + }, + { + "id": "Q2hQefh7e2imjcK5nhmy7", + "author": "prove-ability", + "code": "function solution(arr1, arr2) {\n var answer = [];\n // 행만큼 반복\n for(let i = 0, len = arr1.length; i < len; i++) {\n const arr = []\n // 열만큼 반복\n for(let j = 0, len = arr1[i].length; j < len; j++) {\n // 각의 배열에서 행을 더해서 arr push\n arr.push(arr1[i][j] + arr2[i][j])\n }\n // 열 만큼 추가된 arr 를 answer 가 추가\n answer.push(arr)\n }\n \n return answer;\n}", + "probId": "12949" + }, + { + "id": "RugH3epvTcCTKdmBYwJ_1", + "author": "codeisneverodd", + "code": "function solution(arr1, arr2) {\n var answer = new Array(arr1.length);\n for (let i = 0; i < arr1.length; i++) {\n answer[i] = new Array(arr1[0].length);\n }\n for (let row = 0; row < answer.length; row++) {\n for (let col = 0; col < answer[0].length; col++) {\n answer[row][col] = arr1[row][col] + arr2[row][col];\n }\n }\n return answer;\n}\n\n", + "probId": "12950" + }, + { + "id": "7bF-r07E-I_olId-ExYkS", + "author": "chaerin-dev", + "code": "function solution(arr1, arr2) {\n var answer = [];\n for (let i = 0; i < arr1.length; i++) {\n let ans_row = [];\n for (let j = 0; j < arr1[0].length; j++) {\n ans_row.push(arr1[i][j] + arr2[i][j]);\n }\n answer.push(ans_row);\n }\n return answer;\n}\n\n", + "probId": "12950" + }, + { + "id": "Ct8NgJdTl0aMzC4vurbQX", + "author": "yongchanson", + "code": "function solution(A, B) {\n let answer = [];\n\n for (let i = 0; i < A.length; i++) {\n answer[i] = [];\n for (let j = 0; j < A[0].length; j++) {\n answer[i][j] = A[i][j] + B[i][j];\n }\n }\n return answer;\n}\n", + "probId": "12950" + }, + { + "id": "M-dqxY4ZP9oMfEHXhuASa", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = ''\n answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')\n //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다.\n return answer;\n}\n\n", + "probId": "12951" + }, + { + "id": "DYQUE5qTA2Uw89TyGHbhL", + "author": "jaewon1676", + "code": "function solution(s) {\n s = s.split(' ').map(el => el.split('').map((el, index) => \n index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ')\n return s;\n}\n// 문자열을 연습하기에 좋은 문제입니다.\n \n// s.split(' ') // 띄어쓰기를 기준으로 나눕니다.\n// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 \n// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase())\n// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. \n// .join('') 작은 배열들을 합쳐줍니다.\n// .join(' ') 큰 배열들을 합쳐줍니다.\n\n", + "probId": "12951" + }, + { + "id": "KfwHOc5Ihfa3hPdCVYxae", + "author": "yongchanson", + "code": "function solution(s) {\n let answer = [];\n s = s.split(\" \");\n\n for (let i = 0; i < s.length; i++) {\n answer.push(\n s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase()\n );\n }\n return answer.join(\" \");\n}\n\n", + "probId": "12951" + }, + { + "id": "apDgqzmFEDMAUGSn6g6Tq", + "author": "RyanDeclan", + "code": "\nfunction solution(s) {\n return s.toLowerCase().split(\" \").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : \"\").join(\" \");\n}\n\n// 이 문제에서 제일 핵심은 \"공백문자가 연속해서 나올 수 있습니다.\" 입니다. 이 부분을 꼭 고려하셔야합니다. \n// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다.\n// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. \n//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다.\n", + "probId": "12951" + }, + { + "id": "cff6cJwqQA2w7oIeA802v", + "author": "codeisneverodd", + "code": "function solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", + "probId": "12952" + }, + { + "id": "lOznNSDUcC_bzpXe1H65z", + "author": "codeisneverodd", + "code": "function solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", + "probId": "12952" + }, + { + "id": "EWEXMIQZ_zUORJ_OGzM5l", + "author": "codeisneverodd", + "code": "function solution(arr) {\n var answer = 0;\n answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1)\n return answer;\n}\n\nfunction leastCommonMultiple(a, b) {\n return a * b / greatestCommonDivisor(a, b)\n}\n\nfunction greatestCommonDivisor(a, b) {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", + "probId": "12953" + }, + { + "id": "A_uwuQj1ePrpyNpqiMlPx", + "author": "chaerin-dev", + "code": "function solution(x, n) {\n var answer = [];\n let add_gap = x;\n // n번 반복\n for (let i = 0; i < n; i++) {\n answer.push(x); // 처음 배열에 넣을 x\n x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가\n }\n return answer;\n}\n\n", + "probId": "12954" + }, + { + "id": "lIWQ-juInog00niS7o_HE", + "author": "jaewon1676", + "code": "function solution(n) {\n let str = \"\";\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + \"수\") : (str = str + \"박\");\n }\n return str;\n}\n\n", + "probId": "12954" + }, + { + "id": "UR-2RgTlrfVyRUQJTRTw7", + "author": "prove-ability", + "code": "function solution(x, n) {\n var answer = [];\n let i = 1;\n // n개 지니는 리스트를 리턴해야 합니다\n while (answer.length !== n) {\n // x부터 시작해 x씩 증가하는 숫자\n answer.push(x * i);\n i++;\n }\n return answer;\n}\n", + "probId": "12954" + }, + { + "id": "MsAMDtAG1mRp-elG-Fb43", + "author": "chaerin-dev", + "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n // 정답을 저장할 문자열 answer\n answer = \"\";\n // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복\n for (let i = 0; i < b; i++) {\n // 가로 길이만큼 문자열에 별 더해주기\n for (let j = 0; j < a; j++) answer += \"*\";\n // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기\n answer += \"\\n\";\n }\n // 정답 출력\n console.log(answer);\n});\n\n", + "probId": "12969" + }, + { + "id": "1KsgNKD8b55Dz7H3YWdur", + "author": "prove-ability", + "code": "process.stdin.setEncoding('utf8');\nprocess.stdin.on('data', data => {\n const nums = data.split(\" \");\n const n = Number(nums[0]), m = Number(nums[1]);\n \n let result = \"\";\n // 2차원으로 접근\n // 세로 길이만큼 반복\n for(let i = 0; i < m; i++) {\n // 가로 길이만큼 별 더하기\n for(let j = 0; j < n; j++) {\n result += \"*\";\n }\n // 가로가 끝나면 줄내림\n result += \"\\n\";\n }\n console.log(result)\n});\n\n", + "probId": "12969" + }, + { + "id": "ahTyH79aaDpsQ17nfjeYz", + "author": "yongchanson", + "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n console.log((\"*\".repeat(a) + `\\n`).repeat(b));\n});\n/*\n<풀이과정>\nrepeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count);\n'*'.repeat(a) : *를 a만큼 반복한다.\n*/\n", + "probId": "12969" + }, + { + "id": "MaUQmia3Usgq-vpq7uLDM", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = -1;\n let notPairStack = []\n for (let i = 0; i < s.length; i++) notPairStack[notPairStack.length - 1] === s[i] ? notPairStack.pop() : notPairStack.push(s[i])\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}\n\n", + "probId": "12973" + }, + { + "id": "vjfxzgywaYrJAvC-R80MI", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = -1;\n let notPairStack = []\n notPairStack.push(s[0])\n for (let i = 1; i < s.length; i++) {\n if (notPairStack[notPairStack.length - 1] === s[i]) {\n notPairStack.pop()\n } else {\n notPairStack.push(s[i])\n }\n }\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}\n\n", + "probId": "12973" + }, + { + "id": "JXHhsAGX3AJMiCgAzRFj0", + "author": "jaewon1676", + "code": "\nfunction solution(s){\n let cnt = 0; // 빼준 부분을 카운트 해줍니다\n let answer;\n let stack = []\n for (let i of s){\n if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다\n stack.pop();\n cnt++;; \n } else {\n stack.push(i)\n }\n }\n \n (s.length / 2 == cnt ? answer = 1 : answer = 0 ) \n // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다\n return answer;\n }\n // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다", + "probId": "12973" + }, + { + "id": "eiSH9i1gu4HxUt3vXCVkf", + "author": "jaewon1676", + "code": "// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript\n\nfunction solution(nums) {\n let len = nums.length, answer = 0;\n\n for (let i = 0; i < len - 2; i++) {\n for (let j = i + 1; j < len - 1; j++) {\n for (let k = j + 1; k < len; k++) {\n if (isPrime(nums[i] + nums[j] + nums[k])) {\n answer++;\n }\n }\n }\n }\n return answer;\n}\n\nconst isPrime = (n) => {\n for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회\n if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다.\n return false;\n }\n }\n return true;\n}\n// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다.\n\n", + "probId": "12977" + }, + { + "id": "U0YBoRETv2oY4MCvBKZAG", + "author": "chaerin-dev", + "code": "// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수\nconst getCombinations = function (arr, selectNumber) {\n const results = [];\n if (selectNumber === 1) return arr.map((el) => [el]);\n arr.forEach((fixed, index, origin) => {\n const rest = origin.slice(index + 1);\n const combinations = getCombinations(rest, selectNumber - 1);\n const attached = combinations.map((el) => [fixed, ...el]);\n results.push(...attached);\n });\n return results;\n};\n\n// num이 소수인지 여부를 반환하는 함수\nfunction isPrime(num) {\n if (num === 1) return false;\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(nums) {\n const combinationResult = getCombinations(nums, 3);\n let answer = 0;\n combinationResult.forEach((e) => {\n const sum = e[0] + e[1] + e[2];\n if (isPrime(sum)) answer++;\n });\n return answer;\n}\n", + "probId": "12977" + }, + { + "id": "QkBrXKV0bkEF-7cNspKuK", + "author": "pereng11", + "code": "// 다익스트라 + 최소힙 O( N * logN ) \n // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 \nclass MinHeap{\n constructor ()\n {\n this.heap = [ null ];\n }\n // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬\n push ( val )\n {\n this.heap.push(val);\n let childIdx = this.heap.length-1;\n let parentIdx = Math.floor(childIdx / 2);\n while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){\n this.swap( childIdx, parentIdx );\n childIdx = parentIdx;\n parentIdx = Math.floor(childIdx / 2);\n }\n }\n pop ()\n {\n if ( this.heap.length === 1 )\n {\n return undefined;\n }\n // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬\n const minNode = this.heap[ 1 ];\n this.heap[ 1 ] = this.heap[ this.heap.length - 1 ];\n this.heap.pop();\n let parentIdx = 1;\n let leftChildIdx = 2;\n let rightChildIdx = 3;\n while ( parentIdx < this.heap.length )\n {\n // 자식이 없는 경우 \n if ( !this.heap[ leftChildIdx ] )\n {\n break;\n } // 왼쪽 자식만 있는 경우\n else if ( !this.heap[ rightChildIdx ] )\n {\n if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] )\n {\n this.swap( parentIdx, leftChildIdx );\n }\n break;\n // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬\n } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] )\n {\n const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx;\n this.swap( parentIdx, minChildIdx );\n parentIdx = minChildIdx;\n leftChildIdx = parentIdx * 2\n rightChildIdx = parentIdx * 2 + 1;\n } else\n {\n // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지\n break;\n }\n }\n return minNode;\n }\n swap ( idx1, idx2 )\n {\n [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ];\n }\n length ()\n {\n return this.heap.length;\n }\n}\n \nfunction solution ( N, road, K )\n{\n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const heap = new MinHeap();\n\n //시작점 삽입\n heap.push( [sp, 0] );\n\n // 가장 가까운 목적지부터 순서대로 방문\n while ( heap.length() > 1 )\n {\n //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리]\n const [ ep, val ] = heap.pop();\n //아직 방문하지 않은 곳만 처리\n if ( !visited[ ep ] )\n {\n //방문처리, 거리 저장\n visited[ ep ] = true;\n dist[ ep ] = val;\n //방문 지점을 거쳐서 가는 다른 목적지 구하기\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n {\n heap.push( [ nextEp, val + nextVal ] );\n }\n })\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}\n\n", + "probId": "12978" + }, + { + "id": "AeLUQ3svTVceuW-fQCaP-", + "author": "pereng11 O(N * N);", + "code": "//다익스트라 + 선형탐색\nfunction solution ( N, road, K )\n{ \n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const queue = [];\n\n queue.push( [sp, 0] );\n\n while ( queue.length > 0 )\n {\n const [ ep, val ] = queue.shift();\n if ( dist[ ep ] > val )\n {\n dist[ ep ] = val;\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n if ( dist[ nextEp ] > val + nextVal )\n {\n queue.push( [ nextEp, val + nextVal ] );\n }\n } );\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", + "probId": "12978" + }, + { + "id": "xnPAKJdm4aa-JntJ8SXcR", + "author": "codeisneverodd", + "code": "function solution(n) {\n var ans = 0;\n while (n > 0) {\n if (n % 2 !== 0) {\n n = (n - 1) / 2\n ans++\n } else {\n n = n / 2\n }\n }\n return ans;\n}\n\n", + "probId": "12980" + }, + { + "id": "HWd5jAk_1KvMTxe-wQ_J5", + "author": "yongchanson", + "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 2;\n n = Math.floor(n / 2);\n }\n return result;\n}\n", + "probId": "12980" + }, + { + "id": "9bX9YCA_Q1h-USDue0jpz", + "author": "codeisneverodd", + "code": "function solution(n, words) {\n var answer = [];\n let turn = 1\n for (let i = 1; i < words.length; i++) {\n let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i]))\n if (i % n === 0) turn++\n if (!pass) return [i % n + 1, turn]\n }\n return [0, 0];\n}", + "probId": "12981" + }, + { + "id": "kR5WdueW66IsAwPc-n5DA", + "author": "prove-ability", + "code": "function solution(d, budget) {\n let sum = 0;\n let count = 0;\n // 오름차순 정렬\n d.sort((a, b) => a - b);\n for(let i = 0, len = d.length; i < len; i++) {\n // 작은 수 부터 하나씩 더해준다\n sum += d[i];\n // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환\n if(sum > budget) return count;\n count++;\n }\n \n return count;\n}\n\n", + "probId": "12982" + }, + { + "id": "xzqkjhnkoPWKPhdb8zO1Z", + "author": "jaewon1676", + "code": "function solution(d, budget) {\n let count = 0; // 최대 물품 지원 할 수 있는 부서 수 \n d.sort((a, b) => a - b) // 오름차순 정렬\n for (let i=0; i Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호\n while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다.\n if (myNextNumber(a) === myNextNumber(b)) break\n a = myNextNumber(a)\n b = myNextNumber(b)\n currentRound++\n }\n return currentRound\n}\n\n", + "probId": "12985" + }, + { + "id": "OYSlsxTmSALOkL01lS_IT", + "author": "le2sky", + "code": "function solution(n, a, b) {\n let arr = Array.from({ length: n }, () => 0)\n arr[b - 1] = \"B\"\n arr[a - 1] = \"A\"\n\n const isDiff = () => {\n return (\n (arr.indexOf(\"A\") + 1 > arr.length / 2 && arr.indexOf(\"B\") + 1 <= arr.length / 2) ||\n (arr.indexOf(\"A\") + 1 <= arr.length / 2 && arr.indexOf(\"B\") + 1 > arr.length / 2)) ? true : false\n };\n const isLeft = () => {\n return (arr.indexOf(\"A\") + 1 > arr.length / 2) ? false : true\n };\n\n //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴\n while (!isDiff()) {\n if (isLeft()) {\n arr.splice(arr.length / 2)\n } else {\n arr.splice(0, arr.length / 2)\n }\n }\n return Math.log2(arr.length)\n}\n ", + "probId": "12985" + }, + { + "id": "rhKhtmaIbK4IlbLPqzs8D", + "author": "ssi02014", + "code": "\n/**\n * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화\n * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 \n * (테스트 케이스 11 ~ 15 100ms~200ms 차이)\n */\nfunction solution(X, Y) {\n const commons = [];\n const obj = {};\n\n for (const el of X) {\n obj[el] = (obj[el] || 0) + 1;\n }\n\n for (const el of Y) {\n if (obj[el]) {\n commons.push(el);\n obj[el]--;\n }\n }\n\n commons.sort((a, b) => b - a);\n\n if (!commons.length) return \"-1\";\n else if (commons[0] === \"0\") return \"0\";\n return commons.join(\"\");\n}", + "probId": "131128" + }, + { + "id": "duFz7ZI1jdV5kkzo7rRSH", + "author": "codeisneverodd", + "code": "function solution(str1, str2) {\n var answer = 0;\n let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2)\n const union = new Set([...compare1, ...compare2])\n let multiIntersectionLen = 0, multiUnionLen = 0\n for (const slice of union) {\n const compare1Count = compare1.filter(x => x === slice).length,\n compare2Count = compare2.filter(x => x === slice).length\n multiIntersectionLen += Math.min(compare1Count, compare2Count)\n multiUnionLen += Math.max(compare1Count, compare2Count)\n }\n answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536)\n return answer;\n}\n\nfunction verifiedSlices(str) {\n const onlyAlphabet = /[a-zA-Z]{2}/\n let result = []\n for (let i = 0; i < str.length - 1; i++) {\n const slice = str.slice(i, i + 2)\n if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase())\n }\n return result\n}\n\n", + "probId": "17677" + }, + { + "id": "7o_h_eZ1UNpjfK2Hm09AM", + "author": "jaewon1676", + "code": "function solution(str1, str2) {\n\n str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌.\n str2 = str2.toUpperCase();\n let arr1 = new Array() // 빈 객체를 만들어줌.\n let arr2 = new Array()\n \n for (var i = 0; i < str1.length - 1; i++) {\n let tmp = str1.substr(i, 2) // i부터 2개 ( i, i+1 )\n if (tmp.search(/[^A-Z]/g) >= 0) {\n // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) \n // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환.\n continue\n }\n arr1.push(tmp)\n }\n \n for (var i = 0; i < str2.length - 1; i++) {\n let tmp = str2.substr(i, 2)\n if (tmp.search(/[^A-Z]/g) >= 0) {\n continue\n }\n arr2.push(tmp)\n }\n arr1.sort()\n arr2.sort()\n var a = [] // 중복포함, 교집합 배열\n var b = [] // 중복포함, 합집합 배열\n \n for (var i = 0; i < arr2.length; i++) {\n if (arr1.indexOf(arr2[i]) >= 0) { \n // arr1 객체에 arr2[i]과 같은 값이 있는지 확인.\n // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. \n a.push(arr1.splice(arr1.indexOf(arr2[i]), 1))\n }\n // 교집합이 성립되지 않으면 실행.\n b.push(arr2[i])\n }\n\n for (var i = 0; i < arr1.length; i++) {\n b.push(arr1[i])\n }\n\n // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함\n if (b.length === 0) return 65536\n if (a.length === 0) return 0\n\n return Math.floor((a.length / b.length) * 65536)\n}\n", + "probId": "17677" + }, + { + "id": "7M4jDh3oqulLesOJMxF_S", + "author": "codeisneverodd", + "code": "function solution(m, n, board) {\n board = board.map(r => r.split(''));\n const getSquare = ([r, c]) => [\n [r, c],\n [r, c + 1],\n [r + 1, c],\n [r + 1, c + 1],\n ];\n\n const isSquare = ([r, c]) => {\n if (board[r][c] === '@') return false;\n return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1;\n };\n\n const remove = () => {\n const removeArr = [];\n for (let r = 0; r < m - 1; r++) {\n for (let c = 0; c < n - 1; c++) {\n if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v));\n }\n }\n removeArr.forEach(([r, c]) => {\n board[r][c] = '@';\n });\n return removeArr.length !== 0;\n };\n\n const pull = () => {\n for (let c = 0; c < n; c++) {\n const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@');\n const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn];\n resultColumn.forEach((v, r) => {\n board[r][c] = v;\n });\n }\n return board;\n };\n\n while (remove()) {\n pull();\n }\n\n return board.flat().filter(v => v === '@').length;\n}\n", + "probId": "17679" + }, + { + "id": "LtaDzHn9fU4_8XV9fhrHJ", + "author": "codeisneverodd", + "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = []\n if (cacheSize === 0) return 5 * cities.length\n for (const city of cities) {\n const cityLC = city.toLowerCase()\n if (cache.includes(cityLC)) {\n cache.splice(cache.indexOf(cityLC), 1)\n cache.unshift(cityLC)\n answer += 1\n } else {\n if (cache.length >= cacheSize) cache.pop()\n cache.unshift(cityLC)\n answer += 5\n }\n }\n return answer;\n}\n\n", + "probId": "17680" + }, + { + "id": "Re9Ug1pjgpGt9jkgd-PqY", + "author": "jaewon1676", + "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = [];\n \n //캐시 크기가 0인 경우는 따로 처리\n if (cacheSize === 0) return cities.length * 5;\n \n while (cities.length != 0) {\n // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다.\n const city = cities.shift().toLowerCase(); \n // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss)\n if (cache.includes(city)) { \n // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고,\n cache.splice(cache.indexOf(city), 1);\n // 맨 뒤로 push 해준다.\n cache.push(city);\n // cache hit\n answer += 1;\n } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다.\n if (cache.length === cacheSize) {\n cache.shift();\n }\n // 새로운 캐시 맨 뒤로 push\n cache.push(city);\n // cache miss\n answer += 5;\n }\n }\n return answer;\n }\n /* LRU 알고리즘\n n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다.\n n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면\n 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */\n ", + "probId": "17680" + }, + { + "id": "kXNw9dB18q8-sbaNbQbZ6", + "author": "codeisneverodd", + "code": "function solution(n, arr1, arr2) {\n var answer = [];\n let mapA = [];\n let mapB = [];\n for (let i = 0; i < n; i++) {\n let rowArrA = arr1[i].toString(2).split(\"\");\n let rowArrB = arr2[i].toString(2).split(\"\");\n for (let j = 0, len = rowArrA.length; j < n - len; j++)\n rowArrA.unshift(\"0\");\n for (let j = 0, len = rowArrB.length; j < n - len; j++)\n rowArrB.unshift(\"0\");\n mapA.push(rowArrA);\n mapB.push(rowArrB);\n }\n let answer2D = mapA.slice();\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n answer2D[i][j] = mapA[i][j] === \"0\" && mapB[i][j] === \"0\" ? \" \" : \"#\";\n }\n }\n answer = answer2D.map((row) => row.join(\"\"));\n return answer;\n}\n\n", + "probId": "17681" + }, + { + "id": "gtu1jLXU3hbqVsM0QSlzz", + "author": "jaewon1676", + "code": "function solution(n, arr1, arr2) {\n let answer = [];\n for (let i = 0; i < n; i++) {\n let temp = (arr1[i] | arr2[i]).toString(2);\n let line = []; // 한 행의 모든 2진수 보관\n\n for (let j = temp.length - n; j < temp.length; j++) {\n if (temp[j] == 1) {\n line.push(\"#\");\n } else {\n line.push(\" \");\n }\n }\n answer.push(line.join(\"\"));\n }\n return answer;\n}\n\n/* 풀이 과정\n1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다.\n2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다.\n3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/\n", + "probId": "17681" + }, + { + "id": "mHMHFPhv11i3PZOKKm7vS", + "author": "jaewon1676", + "code": "function solution(dartResult) {\n var answer = 0;\n let score = 0;\n let cnt = [];\n\n for (let i = 0; i < dartResult.length; i++) {\n //점수가 주어질때\n if (!isNaN(dartResult[i])) {\n // i가 1인 경우는 10점, 그외에는 점수\n score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]);\n //보너스 S일때\n } else if (dartResult[i] === \"S\") {\n cnt.push(score);\n //보너스 D일때\n } else if (dartResult[i] === \"D\") {\n cnt.push(Math.pow(score, 2));\n //보너스 T일때\n } else if (dartResult[i] === \"T\") {\n cnt.push(Math.pow(score, 3));\n //옵션 *일떄\n } else if (dartResult[i] === \"*\") {\n cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2;\n cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2;\n //옵션 #일때\n } else if (dartResult[i] === \"#\") {\n cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1];\n }\n }\n //3개의 점수 합산\n answer = cnt.reduce((acc, cur) => acc + cur, 0);\n return answer;\n}\n", + "probId": "17682" + }, + { + "id": "qzO7OtG_eo0UIl-p59RGU", + "author": "minjongbaek", + "code": "function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수\n return m\n .replace(/C#/g, 'c')\n .replace(/D#/g, 'd')\n .replace(/F#/g, 'f')\n .replace(/G#/g, 'g')\n .replace(/A#/g, 'a');\n}\n\nfunction solution(m, musicinfos) {\n\n // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다.\n // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다.\n // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다.\n\n const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다.\n \n const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다.\n for (const info of musicinfos) {\n const [start, finish, title, _score] = info.split(',');\n // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다.\n const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5))));\n \n const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다.\n\n // 재생된 멜로디를 구합니다.\n // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다.\n // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다.\n const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration);\n if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다.\n map.set(title, {score, playScore});\n }\n }\n \n // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다.\n // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다.\n const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length);\n return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다.\n}", + "probId": "17683" + }, + { + "id": "3LKcL8nFJi6eAdg8B1-8I", + "author": "codeisneverodd", + "code": "function solution(msg) {\n const outputs = [];\n const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))];\n let [start, end] = [0, 1];\n\n const doesDictHave = (start, end) => dict.includes(msg.substring(start, end));\n\n const getInput = (start, end) => {\n if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end];\n return getInput(start, end + 1);\n };\n\n const addToDict = (start, end) => {\n if (doesDictHave(start, end)) return;\n dict.push(msg.substring(start, end));\n };\n\n const addToOutputs = (start, end) => {\n if (!doesDictHave(start, end)) return;\n outputs.push(dict.indexOf(msg.substring(start, end)));\n };\n\n while (start < msg.length) {\n [start, end] = getInput(start, end);\n addToDict(start, end + 1);\n addToOutputs(start, end);\n start = end;\n }\n return outputs;\n}\n\n", + "probId": "17684" + }, + { + "id": "CnRaYPttgdAv_6iyFDK-o", + "author": "ssi02014", + "code": "function solution(msg) {\n const result = [];\n const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i))\n\n // 시간 복잡도 O(N^2)\n const lastWordAndCompression = msg.split(\"\").reduce((acc, cur) => {\n const nextWord = acc + cur;\n const nextWordIdx = dict.indexOf(nextWord);\n const prevWordIdx = dict.indexOf(acc);\n\n if (nextWordIdx !== -1) return acc + cur;\n dict.push(nextWord);\n\n if (prevWordIdx !== -1) result.push(prevWordIdx + 1);\n return cur;\n }, \"\");\n\n result.push(dict.indexOf(lastWordAndCompression) + 1);\n return result;\n}\n", + "probId": "17684" + }, + { + "id": "7X9KWlXYfznTT-GVNSKqw", + "author": "codeisneverodd", + "code": "function solution(files) {\n var answer = [];\n const numberRegex = /[0-9]+/\n answer = files.sort((a, b) => {\n const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)]\n const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()]\n const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])]\n return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0\n })\n return answer;\n}", + "probId": "17686" + }, + { + "id": "zTD6BXf5pWMerh8tTiTEc", + "author": "codeisneverodd", + "code": "function solution(n, t, m, p) {\n let queue = [], result = [], currentNumDecimal = -1, turn = 0\n while (result.length < t) {\n if (queue.length === 0) {\n currentNumDecimal++\n currentNumDecimal.toString(n).split('').forEach(x => queue.push(x))\n }\n const currentChar = queue.shift()\n if (turn % m === p - 1) result.push(currentChar)\n turn++\n }\n return result.join('').toUpperCase()\n}", + "probId": "17687" + }, + { + "id": "qmwju0x9ffIeWB72tvWUX", + "author": "prove-ability", + "code": "function solution(maps) {\n // BFS 활용\n const row = maps.length - 1, col = maps[0].length - 1;\n \n // 큐 - 시작 위치 y, x, 이동 거리\n const queue = [[0, 0, 1]];\n \n while(queue.length) {\n // 큐 추출\n let [y, x, count] = queue.shift();\n // 상대 팀 진영이라면\n if(y === row && x === col) return count;\n // 동서남북 확인\n for(let i = 0; i < 4; i++) {\n const [dy, dx] = DIRECTION[i];\n // 다음 길 위치\n const nextY = dy + y, nextX = dx + x;\n // 맵 밖으로 나간다면\n if(isOut(nextY, nextX, row, col)) continue;\n // 도착한 곳이 벽이라면\n if(maps[nextY][nextX] === 0) continue;\n // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지\n maps[nextY][nextX] = 0;\n // 다음에 확인해야하는 곳 큐에 추가\n // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 \n queue.push([nextY, nextX, count + 1]);\n // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음..\n }\n }\n \n return -1;\n}\n\n// 상 우 하 좌\nconst DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]];\n\n// 사용이 가능한 길인지 확인하는 함수\nconst isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col;", + "probId": "1844" + }, + { + "id": "hdgHVEJt3d36OpPvA8mLx", + "author": "jaewon1676", + "code": "function solution(nums) {\n let max = nums.length / 2; // N / 2\n let set = [...new Set(nums)]; // 중복을 없앤다.\n return set.length > max ? max : set.length;\n}\n\n/* 풀이 과정\n1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다.\n2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다.\n3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 \n 두가지 경우의 수로 좁혀진다. */\n\n", + "probId": "1845" + }, + { + "id": "fbxEGFJKAA8jKcAc-RCBG", + "author": "prove-ability", + "code": "function solution(nums) {\n var answer = 0;\n // set 을 사용해 중복 제거\n const set = new Set();\n nums.forEach((num) => {\n set.add(num);\n });\n // set 의 사이즈가 N/2 보다 크다면 N/2 반환\n // 그렇지 않다면 set size 반환\n if (set.size > nums.length / 2) answer = nums.length / 2;\n else answer = set.size;\n\n return answer;\n}\n\n", + "probId": "1845" + }, + { + "id": "BBtETRTECdLHgxaoTde5B", + "author": "yongchanson", + "code": "function solution(nums) {\n const unique = nums.filter((element, index) => {\n return nums.indexOf(element) === index;\n });\n\n return unique.length > nums.length / 2 ? nums.length / 2 : unique.length;\n}\n\n", + "probId": "1845" + }, + { + "id": "1iWanVxWW5uAekOwJzY2H", + "author": "chaerin-dev", + "code": "function solution(nums) {\n // 가질 수 있는 폰켓몬의 수\n const getCnt = nums.length / 2;\n // 폰켓몬 종류의 수\n const setSize = new Set(nums).size;\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면\n // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면\n // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수\n return setSize > getCnt ? getCnt : setSize;\n}\n", + "probId": "1845" + }, + { + "id": "bAaCGsM5iCuC7mGMmoTCy", + "author": "jaewon1676", + "code": "function solution(participant, completion) {\n var answer = \"\";\n for (let i = 0; i < participant.length; i++) {\n for (let j = 0; j < completion.length; j++) {\n if (participant[i] === completion[j]) {\n console.log(participant, completion);\n participant.splice(i, 1);\n completion.splice(j, 1);\n i--;\n j--;\n console.log(participant, completion);\n break;\n }\n }\n }\n\n return participant[0];\n}\n\n//완벽한 정답이 아닙니다.\n", + "probId": "42576" + }, + { + "id": "MRelW4KkwG2E6xq1rsk2j", + "author": "hyosung", + "code": "function solution(participant, completion) {\n let answer = \"\";\n // 2개 이상을 가진 특정값의 갯수 기록용 변수\n let max = 0;\n // 반복문 내부에서 set.has 를 사용하기 위해 Set 선언 (처음에는 Array.findIndex 를 사용)\n const set = new Set([...completion]);\n // 반복문 최적화 - 반복되던 연산 제거 (값 비교, length)\n const length = participant.length;\n for (let i = length; i--; ) {\n // 완주자 명단에 없다면 완주하지 못한 참가자 이므로 바로 종료\n if (!set.has(participant[i])) {\n answer = participant[i];\n break;\n }\n // 배열안에 특정값 갯수 확인\n let count = participant.reduce(\n (a, v) => (v === participant[i] ? a + 1 : a),\n 0\n );\n // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면\n // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다\n if (count > 1 && max < count) {\n answer = participant[i];\n // 조건에 맞는 동명이인 수 저장\n max = count;\n }\n }\n return answer;\n}\n\n//완벽한 정답이 아닙니다.\n", + "probId": "42576" + }, + { + "id": "ptZh9FvcxZrBY1JrrMXrP", + "author": "chaerin-dev", + "code": "function solution(participant, completion) {\n var answer = \"\";\n // 두 배열을 정렬한다!\n participant.sort();\n completion.sort();\n // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!!\n // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로\n // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만\n // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음!\n for (let i = 0; i < participant.length; i++) {\n if (participant[i] != completion[i]) {\n answer = participant[i];\n break;\n }\n }\n return answer;\n}\n", + "probId": "42576" + }, + { + "id": "apqELrA9EyeBOnc0P8Qh4", + "author": "codeisneverodd", + "code": "function solution(clothes) {\n\tvar answer = 1;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes)\n\t\tspyWear[clothNPart[1]] = (spyWear[clothNPart[1]] || 0) + 1;\n\tfor (const part in spyWear) answer *= spyWear[part] + 1;\n\treturn answer - 1;\n}\n\n", + "probId": "42578" + }, + { + "id": "SCSNZR6z1-YDPMnvJEyj9", + "author": "codeisneverodd", + "code": "function solution(clothes) {\n\tvar answer = 0;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes) {\n\t\tif (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = [];\n\t\tspyWear[clothNPart[1]].push(clothNPart[0]);\n\t}\n\tconst clothesCount = [];\n\tfor (const part in spyWear) clothesCount.push(spyWear[part].length + 1);\n\tanswer =\n\t\tclothesCount.reduce((previous, current) => previous * current, 1) - 1;\n\treturn answer;\n}\n", + "probId": "42578" + }, + { + "id": "J8oQ-NtfQLtuQ0mJjzWiB", + "author": "hyosung", + "code": "function solution(clothes) {\n\tlet answer = 1;\n\t// 옷 종류\n\tconst types = {};\n\t// 반복문 최적화 - length, 비교연산 제거\n\tconst length = clothes.length;\n\tfor (let i = length; i--; ) {\n\t\t// 해당 옷의 종류가 없다면 종류 1\n\t\tif (!types[clothes[i][1]]) types[clothes[i][1]] = 1;\n\t\t// 해당 옷의 종류가 있다면 종류 증가\n\t\telse types[clothes[i][1]] += 1;\n\t}\n\t// (종류 별 값 + 1 ) 을 다 곱셈\n\tObject.values(types).forEach((v) => {\n\t\tanswer *= v + 1;\n\t});\n\n\treturn answer - 1;\n}\n\n", + "probId": "42578" + }, + { + "id": "gG88eNSpS3vQuYezshN7w", + "author": "jaewon1676", + "code": "function solution(clothes) {\n var answer = 1;\n var obj={};\n for(var i=0;i\n clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1)\n );\n\n // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐\n // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나)\n // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨\n let answer = 1;\n for (let key of Object.keys(clothsObj)) {\n answer *= clothsObj[key] + 1;\n }\n\n // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기\n return answer - 1;\n}", + "probId": "42578" + }, + { + "id": "CJkvJQRfEnwXHhoC_9dy0", + "author": "codeisneverodd", + "code": "function solution(genres, plays) {\n var answer = [];\n const songs = []\n const genreSumHash = {}\n const genreSumArr = []\n\n //고유번호, 장르, 플레이수를 담은 songs\n genres.forEach((genre, id) => {\n songs.push({id: id, genre: genre, play: plays[id]})\n genreSumHash[genre] = genreSumHash[genre] === undefined ? plays[id] : genreSumHash[genre] + plays[id]\n })\n\n //장르별 플레이수 합으로 정렬하기 위해 생성한 배열 genreSumArr\n for (const genre in genreSumHash) genreSumArr.push([genre, genreSumHash[genre]])\n genreSumArr.sort((a, b) => b[1] - a[1])\n\n //각 장르안에서 각 노래의 play수가 높은 순으로 정렬하고 앞에서부터 2개까지 정답에 고유번호를 push\n for (const genre of genreSumArr) {\n const sorted = songs.filter(song => song.genre === genre[0]).sort((a, b) => b.play - a.play)\n for (let i = 0; i < 2 && i < sorted.length; i++) answer.push(sorted[i].id)\n }\n return answer;\n}\n\n", + "probId": "42579" + }, + { + "id": "K5IetySp3sN_bOp6YnHXa", + "author": "codeisneverodd", + "code": "//Map과 고차함수를 적극적으로 이용한 풀이\nfunction solution(genres, plays) {\n const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]}\n genres\n .map((genre, id) => [genre, plays[id]])\n .forEach(([genre, play], id) => {\n const data = genreMap.get(genre) || {totalPlay: 0, songs: []}\n genreMap.set(genre, {\n totalPlay: data.totalPlay + play,\n songs: [...data.songs, {play: play, id: id}]\n .sort((a, b) => b.play - a.play)\n .slice(0, 2)\n })\n })\n\n return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...]\n .sort((a, b) => b[1].totalPlay - a[1].totalPlay)\n .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs]\n .map(song => song.id)\n}", + "probId": "42579" + }, + { + "id": "zqi_qiQ3Z5vy39dtx6GOw", + "author": "codeisneverodd", + "code": "function solution(bridge_length, weight, truck_weights) {\n let [tick, onBridge, weightOnBridge] = [0, [{weight: 0, timeToOut: 0}], 0]\n while (onBridge.length > 0 || truck_weights.length > 0) {\n if (onBridge[0].timeToOut === tick) weightOnBridge -= onBridge.shift().weight\n if (weightOnBridge + truck_weights[0] <= weight) {\n weightOnBridge += truck_weights[0]\n onBridge.push({weight: truck_weights.shift(), timeToOut: tick + bridge_length})\n } else {\n if (onBridge[0]) tick = onBridge[0].timeToOut - 1 // 시간을 줄이는 포인트\n }\n tick++\n }\n return tick\n}\n\n", + "probId": "42583" + }, + { + "id": "CnSL50H__xArEZDs1LvSx", + "author": "codeisneverodd", + "code": "function solution(bridge_length, weight, truck_weights) {\n const bridge = new Array(bridge_length).fill(0)\n let tick = 0\n do {\n tick++\n bridge.pop()\n bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ?\n bridge.unshift(truck_weights.shift()) : bridge.unshift(0)\n } while (bridge.reduce((a, b) => a + b) !== 0)\n return tick;\n}\n\n", + "probId": "42583" + }, + { + "id": "Gn2vGVxg1BZ9FnORZO7fJ", + "author": "jaewon1676", + "code": "function solution(bridge_length, weight, truck_weights) {\n var answer = 0; // 총 걸리는 시간\n let bridge = []; // 다리를 건너는 트럭\n let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게\n \n while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다.\n answer++; // 1초 추가\n if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다.\n bridge_weight -= bridge.shift();\n }\n if (bridge_weight + truck_weights[0] > weight) { \n bridge.push(0);\n continue;\n }\n let truck_weight = truck_weights.shift();\n bridge.push(truck_weight);\n bridge_weight += truck_weight;\n }\n \n answer += bridge_length;\n \n return answer;\n }", + "probId": "42583" + }, + { + "id": "05x5834hVrhNdZ_jMoU5p", + "author": "codeisneverodd - 시간복잡도 감소", + "code": "function solution(progresses, speeds) {\n var answer = [];\n const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index]))\n console.log(remainDays)\n let maxDay = remainDays[0]\n answer.push(0)\n for (let i = 0; i < remainDays.length; i++) {\n if (remainDays[i] <= maxDay) {\n answer[answer.length - 1] += 1\n } else {\n answer.push(1)\n maxDay = remainDays[i]\n }\n }\n return answer;\n}\n\n", + "probId": "42586" + }, + { + "id": "hX5vc8r5EfQf0aVts3kTC", + "author": "codeisneverodd", + "code": "function solution(progresses, speeds) {\n var answer = [];\n while (progresses.length > 0) {\n let done = 0\n progresses = progresses.map((prog, index) => prog + speeds[index])\n const length = progresses.length\n for (let i = 0; i < length; i++) {\n if (progresses[0] >= 100) {\n progresses.shift()\n speeds.shift()\n done += 1\n } else {\n break\n }\n }\n if (done > 0) answer.push(done)\n }\n return answer;\n}\n\n", + "probId": "42586" + }, + { + "id": "OMXNlD-ip71QBwoB25Wzp", + "author": "jaewon1676", + "code": "function solution(progresses, speeds) {\n let answer = [];\n \n while(speeds.length > 0) { \n for(let i=0;i= 100) { \n progresses.shift();\n speeds.shift();\n count++;\n }\n if(count > 0) { // 결과 배열에 넣어주기\n answer.push(count);\n }\n }\n return answer;\n}\n\n", + "probId": "42586" + }, + { + "id": "hLFxa_7Z_qn2pox1PUZkT", + "author": "createhb21", + "code": "function solution(progresses, speeds) {\n // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열\n var answer = [];\n // 각각의 기능이 몇 일 소요되는지 담은 큐\n let queue = [];\n \n for (let i = 0; i < speeds.length; i++) {\n // 각각의 기능이 몇 일 걸리는지 계산\n let task = Math.ceil((100 - progresses[i]) / speeds[i]);\n // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다.\n queue.push(task);\n \n // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push()\n // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화\n if(task > queue[0]) {\n answer.push(queue.length-1);\n // 큐 초기화\n queue = [task];\n }\n }\n \n answer.push(queue.length);\n return answer;\n }\n\n", + "probId": "42586" + }, + { + "id": "bi0wcQp16m-7OtazfuCz_", + "author": "chaerin-dev", + "code": "function solution(progresses, speeds) {\n // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장\n const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i]));\n\n // 최초 배포날은 daysLeftArr의 첫 번째 요소\n let deployDay = daysLeftArr[0];\n // 각 배포에 몇 개의 기능이 배포될지 셀 변수\n let cnt = 0;\n // 각 배포에 몇 개의 기능이 배포될지 저장할 배열\n const answer = [];\n\n // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포\n daysLeftArr.forEach((daysLeft) => {\n if (deployDay < daysLeft) {\n deployDay = daysLeft;\n answer.push(cnt);\n cnt = 0;\n }\n cnt++;\n });\n answer.push(cnt);\n\n // 정답 반환\n return answer;\n}\n\n", + "probId": "42586" + }, + { + "id": "51AL98Mpzj2dePMaHhx3i", + "author": "RyanDeclan", + "code": "// 예제1) 입력값 : [93, 30, 55], [1, 30, 5]\nfunction solution(progresses, speeds) {\n // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열\n let countBox = [];\n let completeBox = [];\n for(k=1; k<100; k++){\n let complete = []\n for(i=0; i= 100){\n complete.push([i,k]);\n progresses.splice(i,1,\"end\")\n } \n }\n if(complete[0] != null)completeBox.push(...complete)\n } \n completeBox.sort((a,b) => a[0] - b[0])\n \n //여기까지 한다면 console.log(completeBox) \t[ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. \n // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 \n \n // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 \n let count = 0;\n completeBox.reduce((acc, cur, i) => {\n if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 \n if(i) countBox.push(count)\n acc[0] = cur[1];\n count = 0;\n count++\n }else{count++}\n if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. \n return acc\n } ,[0])\n return countBox;\n}\n", + "probId": "42586" + }, + { + "id": "G4YhqR1GeSdlQV1FX2AeM", + "author": "codeisneverodd", + "code": "function solution(priorities, location) {\n var answer = 0;\n let documents = priorities.map((priority, index) => ({location: index, priority: priority}))\n let locationPrinted = false\n while (!locationPrinted) {\n const shifted = documents.shift()\n let printAvailable = true\n if (documents.some((document) => shifted.priority < document.priority)) printAvailable = false\n if (printAvailable) {\n answer += 1\n if (shifted.location === location) locationPrinted = true\n } else {\n documents.push(shifted)\n }\n }\n return answer;\n}\n\n", + "probId": "42587" + }, + { + "id": "0j0Rr-sjlpofMav0oK0vJ", + "author": "codeisneverodd", + "code": "function solution(priorities, location) {\n var answer = 0;\n let documents = priorities.map((priority, documentLocation) => [documentLocation, priority])\n let locationPrinted = false\n while (!locationPrinted) {\n const shifted = documents.shift()\n let printAvailable = true\n for (let i = 0; i < documents.length; i++) {\n if (shifted[1] < documents[i][1]) {\n printAvailable = false\n break\n }\n }\n if (printAvailable) {\n answer += 1\n if (shifted[0] === location) locationPrinted = true\n } else {\n documents.push(shifted)\n }\n }\n return answer;\n}\n\n", + "probId": "42587" + }, + { + "id": "xnIbmYxHJ94OvD8MleCvq", + "author": "jaewon1676", + "code": "function solution(priorities, location) {\n var answer = 0;\n while (true) {\n\n if (priorities[0] < Math.max(...priorities)) {\n if (location - 1 < 0) location = priorities.length\n priorities.push(priorities.shift())\n location--;\n } else {\n answer++;\n if (location - 1 < 0) {\n return answer;\n }\n priorities.shift()\n location--;\n }\n console.log(priorities, location, answer)\n\n }\n return answer\n}\n\n", + "probId": "42587" + }, + { + "id": "dTmRPDIjgu6eqAF1yS-Ys", + "author": "createhb21", + "code": "function solution(priorities, location) {\n var answer = priorities.map((priority, index) => {\n return {\n index,\n priority\n };\n });\n \n let queue = [];\n \n while(answer.length > 0){\n const first = answer.shift();\n const isPriority = answer.some((p) => p.priority > first.priority);\n isPriority ? answer.push(first) : queue.push(first);\n }\n const idx = queue.findIndex(p => p.index === location) + 1;\n return idx;\n } \n\n", + "probId": "42587" + }, + { + "id": "wmlkSCt7xiq6A_rLo1wS1", + "author": "codeisneverodd", + "code": "//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다.\nfunction solution(priorities, location) {\n let answer = 0;\n const printer = new Queue;\n priorities.forEach((priority, index) => {\n printer.enqueue([priority, index])\n })\n while (printer.size() > 0) {\n const check = printer.dequeue()\n const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length\n if (countHigherPriority > 0) {\n printer.enqueue(check)\n } else {\n answer += 1\n if (check[1] === location) break\n }\n\n }\n return answer;\n}\n\nclass Queue {\n constructor() {\n this.queue = []\n this.front = 0\n this.rear = 0\n }\n\n enqueue(value) {\n this.queue[this.rear++] = value\n }\n\n dequeue() {\n const value = this.queue[this.front]\n delete this.queue[this.front]\n this.front += 1\n return value\n }\n\n peek() {\n return this.queue(this.front)\n }\n\n size() {\n return this.rear - this.front\n }\n}\n", + "probId": "42587" + }, + { + "id": "FxuCUZF92-5Mq2XTHhJE6", + "author": "jaewon1676", + "code": "function solution(operations) {\n var answer = [];\n for (let i = 0; i < operations.length; i++) {\n // 숫자 삽입\n if (operations[i][0] == 'I') {\n let m = operations[i].substring(2, operations[i].length);\n answer.push(m);\n }\n // if 최댓값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) {\n answer.pop();\n }\n // if 최솟값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) {\n answer.shift();\n }\n\n answer.sort((a, b) => {\n return a - b;\n });\n }\n if (answer.length == 0) return [0, 0];\n else {\n return [parseInt(answer.pop()), parseInt(answer.shift())];\n }\n}\n/* 풀이 과정\n1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다.\n2. answer 배열을 정렬 해준다\n3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다.\n*/\n", + "probId": "42628" + }, + { + "id": "ZfJDGZCLUtKfOcnAxpkCy", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n var answer = '';\n numbers.sort(sortFunc)\n answer = numbers.join('')\n if (answer[0] === '0') return '0'\n return answer;\n}\n\nconst sortFunc = (a, b) => {\n const compareA = parseInt(a.toString() + b.toString())\n const compareB = parseInt(b.toString() + a.toString())\n return compareB - compareA\n}\n\n\n", + "probId": "42746" + }, + { + "id": "ZtF3kqFhmHjk00qGPQv6F", + "author": "createhb21", + "code": "function solution(numbers) {\n let stringNum = \n numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b));\n \n return stringNum[0] === '0' ? '0' : stringNum.join('');\n}\n\n", + "probId": "42746" + }, + { + "id": "zDikFJkJp9HFOAXCSMJQI", + "author": "prove-ability", + "code": "function solution(numbers) {\n if(numbers.every(v => v === 0)) return \"0\";\n return numbers.sort((a, b) => {\n if(a === b) return 0;\n let stringA = a.toString(10), stringB = b.toString(10);\n if(stringA[0] === stringB[0]) {\n let aIndex = 1, bIndex = 1;\n while(true) {\n if(!stringA[aIndex]) --aIndex;\n if(!stringB[bIndex]) --bIndex;\n if(stringA[aIndex] === stringB[bIndex]) {\n aIndex++, bIndex++;\n continue;\n }\n if(stringA[aIndex] < stringB[bIndex]) return 1;\n else return -1;\n } \n } \n return stringB[0] - stringA[0]\n }).join(\"\");\n}\n\n", + "probId": "42746" + }, + { + "id": "BmT_xSFPSR0ASzmxEhFik", + "author": "prove-ability", + "code": "function solution(numbers) {\n return numbers.every(v => v === 0) ? \"0\" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(\"\");\n}\n", + "probId": "42746" + }, + { + "id": "MzaWhj9G5DFefCsefYyeN", + "author": "codeisneverodd", + "code": "function solution(citations) {\n var answer = 0;\n citations.sort((a, b) => b - a)\n let h = 0\n while (h + 1 <= citations[h]) h++\n answer = h\n return answer;\n}\n\n", + "probId": "42747" + }, + { + "id": "OQEjj6xeUZpg8ukIds5V7", + "author": "codeisneverodd", + "code": "function solution(citations) {\n var answer = 0;\n let h = 0\n let length = 0\n while (length >= h) {\n h++\n length = citations.filter(citation => citation >= h).length\n }\n answer = h - 1\n return answer;\n}\n\n", + "probId": "42747" + }, + { + "id": "J3O4HWugASe-80GQ1CUJJ", + "author": "jaewon1676", + "code": "function solution(citations) {\n var answer = 0;\n citations.sort((a,b)=>(b-a))\n\n for(var i=0; i {\n return a - b;\n });\n console.log(temp);\n result.push(temp[commands[i][2] - 1]);\n }\n return result;\n}\n\n", + "probId": "42748" + }, + { + "id": "gK2kxc__gguJbblrNtODL", + "author": "prove-ability", + "code": "function solution(array, commands) {\n var answer = [];\n commands.forEach(([i, j, k]) => {\n const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1];\n answer.push(su);\n });\n return answer;\n}\n\n", + "probId": "42748" + }, + { + "id": "bpmS34uQQ64yL4Q6kl2Ys", + "author": "createhb21", + "code": "\nfunction solution(array, commands) {\n let answer = [];\n for (let i = 0; i < commands.length; i++) {\n let eachCommand = commands[i];\n let slice = array.slice(eachCommand[0] - 1, eachCommand[1]);\n answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]);\n }\n return answer;\n}\n\n", + "probId": "42748" + }, + { + "id": "lJvurGBZL5dnCNOSRqLD5", + "author": "chaerin-dev", + "code": "function solution(array, commands) {\n let t = commands.length;\n let answer = [];\n while (t--) {\n let command = commands.shift();\n answer.push(\n array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[\n command[2] - 1\n ]\n );\n }\n return answer;\n}\n", + "probId": "42748" + }, + { + "id": "BqWit-O_U9hF_K2CMj12o", + "author": "chaerin-dev", + "code": "// 소수인지 판별하는 함수\nfunction isPrime(x) {\n for (let i = 2; i <= Math.sqrt(x); i++) {\n if (x % i === 0) return false;\n }\n return true;\n}\nfunction solution(n) {\n // 소수의 개수를 저장할 변수\n let answer = 0;\n // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해\n for (let i = 2; i <= n; i++) {\n // 소수이면 소수의 개수에 1 추가\n if (isPrime(i)) answer++;\n }\n return answer;\n}\n\n", + "probId": "42839" + }, + { + "id": "xD8DeWfPAfYsU8JM10biT", + "author": "prove-ability", + "code": "// 소수 판별 로직\nfunction isPrime(n) {\n // n 제곱근 후 올림\n for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) {\n if (n % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(n) {\n let count = 0;\n // 1부터 n까지 반복적으로 접근 - i\n for(let i = 1; i <= n; i++) {\n // i 가 소수인지 확인 후 count++\n if(isPrime(i)) count++;\n }\n \n return count;\n}\n\n", + "probId": "42839" + }, + { + "id": "Vlk2V5aDNGsBMzTHYsAz2", + "author": "jaewon1676", + "code": "function solution(n) {\n let arr = [];\n \n // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다.\n for(let i=2; i<=n; i++) {\n arr[i] = i;\n }\n for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다.\n if (arr[i] === 0) continue;\n \n for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다.\n arr[j] = 0;\n }\n }\n \n // filter를 이용해 0이아닌 수들의 개수를 return합니다.\n return arr.filter(v => v!==0).length;\n}\n", + "probId": "42839" + }, + { + "id": "8RxE9N-aPdvBHK3aU4Vna", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n var answer = 0;\n const numArr = numbers.split('')\n const permutationAll = []\n for (let r = 1; r <= numbers.length; r++) {\n const permutationR\n = Permutation(numArr, r).map((permuArr) =>\n parseInt(permuArr.join(''))\n )\n for (let i = 0; i < permutationR.length; i++) permutationAll.push(permutationR[i])\n }\n const permutationSet = [...new Set(permutationAll)]\n for (const number of permutationSet) answer += isPrime(number) ? 1 : 0\n return answer;\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) if (num % i === 0) return false\n return num >= 2\n}", + "probId": "42839" + }, + { + "id": "hsNbaQA9lwkJJCkmw9zhz", + "author": "prove-ability", + "code": "function solution(answers) {\n let result = [];\n\n let players = {\n 1: {\n pattern: [1, 2, 3, 4, 5],\n count: 0,\n },\n 2: {\n pattern: [2, 1, 2, 3, 2, 4, 2, 5],\n count: 0,\n },\n 3: {\n pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],\n count: 0,\n },\n };\n let max = 0;\n answers.forEach((answer, index) => {\n for (let [key, { pattern }] of Object.entries(players)) {\n // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가\n if (pattern[index % pattern.length] === answer) {\n players[key].count++;\n // 제일 높은 count 구하기\n if (max < players[key].count) max = players[key].count;\n }\n }\n });\n // players 중에 count 가 max 와 값이 같다면 result 추가\n for (let [key, { count }] of Object.entries(players)) {\n if (count === max) result.push(parseInt(key, 10));\n }\n\n return result;\n}\n\n", + "probId": "42840" + }, + { + "id": "hygi4H12alShMWuiCsYlW", + "author": "yongchanson", + "code": "function solution(answers) {\n let score = [];\n let answer = [];\n let a1 = [1, 2, 3, 4, 5];\n let a2 = [2, 1, 2, 3, 2, 4, 2, 5];\n let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n\n score.push(answers.filter((a, i) => a === a1[i % a1.length]).length);\n score.push(answers.filter((a, i) => a === a2[i % a2.length]).length);\n score.push(answers.filter((a, i) => a === a3[i % a3.length]).length);\n\n for (let i = 0; i < score.length; i++) {\n const max = Math.max(...score);\n if (score[i] === max) {\n answer.push(i + 1);\n }\n }\n\n return answer;\n}\n\n", + "probId": "42840" + }, + { + "id": "V85SNu9mIFhp6Pew_272q", + "author": "jaewon1676", + "code": "function solution(answers) {\n let arr1 = [1,2,3,4,5]\n let arr2 = [2,1,2,3,2,4,2,5]\n let arr3 = [3,3,1,1,2,2,4,4,5,5]\n \n let score = [0, 0, 0]\n for (let i=0; i {\n for (let j = 0; j < pattern.length; j++) {\n const patternLength = pattern[j].length;\n if (answer === pattern[j][i % patternLength]) scores[j]++;\n }\n });\n\n const answer = [];\n const maxScore = Math.max(...scores);\n scores.forEach((score, i) => {\n if (score === maxScore) answer.push(i + 1);\n });\n return answer;\n}", + "probId": "42840" + }, + { + "id": "5LdBbGqctBYQLxKHLwgnK", + "author": "codeisneverodd", + "code": "function solution(brown, yellow) {\n var answer = [];\n const size = brown + yellow\n answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0]\n return answer;\n}\n\nfunction widthHeightPair(size) {\n let result = []\n for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i])\n return result\n}\n\n", + "probId": "42842" + }, + { + "id": "nnsIDbgigYJWfDytOB9b7", + "author": "jaewon1676", + "code": "function solution(brown, yellow) {\n var answer = [];\n let sum = brown + yellow; \n \n //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색)\n for(let height=3; height A.., 0 <- A.., ..A <- -1\n leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A..\n }\n answer = upDownCount + Math.min(...leftRightCountList)\n return answer;\n}\n\nfunction minUpOrDownCount(destination) {\n const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const index = Alphabet.indexOf(destination)\n return Math.min(index, Alphabet.length - index)\n}", + "probId": "42860" + }, + { + "id": "Ud7Y7hj77MsbAbo3j9jiB", + "author": "prove-ability", + "code": "function solution(n, lost, reserve) {\n // students 초기화 - 학생들은 체육복 개수 1로 초기화\n let students = Array.from({ length: n }).fill(1);\n\n // 읽어버린 학생 개수 반영\n lost.forEach((target) => {\n students[target - 1]--;\n });\n\n // 여별 체육복 개수 반영\n reserve.forEach((target) => {\n students[target - 1]++;\n });\n\n // 학생들 순차적으로 접근\n for (let i = 0, len = students.length; i < len; i++) {\n // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue\n if (students[i] === 0 || students[i] === 1) continue;\n // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (i !== 0 && students[i - 1] === 0) {\n // 이전 학생 증가\n students[i - 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) {\n // 다음 학생 증가\n students[i + 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n }\n // 체육복 1개 이상을 가진 학생들의 수 반환\n return students.filter((v) => v >= 1).length;\n}\n\n", + "probId": "42862" + }, + { + "id": "ELkq0aLnrkMlFcBxr0xfc", + "author": "jaewon1676", + "code": "function solution(n, lost, reserve) {\n let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다\n let cnt = 0;\n for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복\n answer[reserve[i]-1] += 1\n }\n for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1\n answer[lost[i]-1] -= 1\n }\n for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다.\n if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){\n answer[i] = 1\n answer[i+1] = 1\n }\n }\n for(let i = 0; i < answer.length; i++){\n (answer[i] >= 1 ? cnt += 1 : null)\n }\n return cnt\n }\n //그리디\n // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다.\n // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다.\n\n", + "probId": "42862" + }, + { + "id": "fGch_Pm6IHnNOlqTZIfxA", + "author": "chaerin-dev", + "code": "function solution(n, lost, reserve) {\n // 학생들의 체육복 개수를 저장할 배열 students\n // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정\n // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음\n const students = Array.from({ length: n + 1 }, () => 1);\n\n // 체육복 분실/여분 정보 students 배열에 반영\n lost.forEach((lostStudent) => students[lostStudent]--);\n reserve.forEach((reserveStudent) => students[reserveStudent]++);\n\n // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt\n let cnt = 0;\n students.forEach((student, i) => {\n // 현재 인덱스의 학생이 체육복이 없다면\n if (student === 0) {\n // 바로 앞 학생이 체육복 여분이 있다면\n if (students[i - 1] === 2) {\n // 바로 앞 학생에게 체육복 빌리기\n students[i - 1]--;\n student++;\n }\n // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면\n else if (students[i + 1] === 2) {\n // 바로 뒤 학생에게 체육복 빌리기\n students[i + 1]--;\n student++;\n }\n // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음\n else cnt++;\n }\n });\n\n // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수\n return n - cnt;\n}", + "probId": "42862" + }, + { + "id": "P2U1vdDzmn3ki7Q1hDCNp", + "author": "codeisneverodd", + "code": "function solution(number, k) {\n var answer = '';\n let answerStack = [0]\n let deleteCount = -1\n for (let i = 0; i < number.length; i++) {\n while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) {\n answerStack.pop()\n deleteCount++\n }\n if (answerStack.length < number.length - k) answerStack.push(number[i])\n }\n answer = answerStack.join('')\n return answer;\n}\n\n", + "probId": "42883" + }, + { + "id": "Wm74GNLW3oSOfnpE7mjSP", + "author": "jaewon1676", + "code": "function solution(number, k) {\n const stack = [];\n let answer = '';\n \n for(let i=0; i 0 && stack[stack.length-1] < el){\n stack.pop();\n k--;\n }\n stack.push(el);\n }\n stack.splice(stack.length-k, k);\n answer = stack.join(\"\");\n return answer;\n}\n ", + "probId": "42883" + }, + { + "id": "oDx7KSW-hgEPVWaZI_X-E", + "author": "jaewon1676", + "code": "function solution(routes) {\n let cctv = 1; // cctv의 개수는 최소 1개\n routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬\n // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]\n let out = routes[0][1]; // -15\n // 나간 시점(out)은 첫 차량의 나간시점으로 초기화\n \n for(let i = 1; i < routes.length; i++) {\n // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치\n if(out < routes[i][0]) {\n cctv++;\n out = routes[i][1]; // out 시점 업데이트\n }\n \n // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 \n if(out > routes[i][1]) {\n out = routes[i][1]; // out 시점 업데이트 \n }\n }\n \n return cctv;\n}\n// 그리디\n\n// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.\n// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 \n// 나간시점만 검사 해주면 됩니다.\n\n// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.\n// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)\n// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.", + "probId": "42884" + }, + { + "id": "Sxn1X5eCE8EwHlnbRf1DL", + "author": "jaewon1676", + "code": "function solution(people, limit) {\n let cnt = 0;\n \n people.sort((a, b) => {return a - b}) // 몸무게 오름차순\n \n while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 \n if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기\n people.pop()\n people.shift()\n } else {\n people.pop() // 무거운사람을 뺴주자\n }\n cnt++;\n }\n return cnt;\n} // 4주차 2번 문제와 유사함\n\n", + "probId": "42885" + }, + { + "id": "Ja6NaEsDxGaaNg0-mPaXn", + "author": "prove-ability", + "code": "function solution(people, limit) {\n let count = 0;\n // 오름차순 정렬\n people.sort((a, b) => a - b);\n \n // people 배열 요소가 있다면?\n while(people.length) {\n \n // 요소 중 가장 큰 수인 마지막 요소를 가져온다\n let sum = people.pop();\n \n // 요소 중 가장 작은 수를 더한다\n sum += people[0]\n \n // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거\n if(sum <= limit) people.shift();\n \n count++;\n }\n \n return count;\n}\n\n", + "probId": "42885" + }, + { + "id": "KV4eXKftErxLO7X6OMHy7", + "author": "iHoHyeon", + "code": "function solution(people, limit) {\n people.sort((a, b) => a - b); // 오름차순 정렬\n\n let cnt = 0; // 구명보트 개수\n\n let front = 0; // 가장 몸무게가 작은 사람의 index\n let last = people.length; // 가장 몸무게가 큰 사람의 index\n\n while (last > front) {\n cnt++;\n\n const now = people.pop();\n last--;\n\n if (now + people[front] <= limit) {\n front++; // shift() 연산의 비효율로 인해 front 사용\n }\n }\n\n return cnt;\n}", + "probId": "42885" + }, + { + "id": "tFDRvxSaC6b6JLdipTGIX", + "author": "codeisneverodd", + "code": "function solution(record) {\n var answer = [];\n const users = {}\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action !== 'Leave') users[id] = name\n })\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`)\n if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`)\n })\n return answer;\n}\n\n", + "probId": "42888" + }, + { + "id": "JPFztHteQt4pu6t82uPLf", + "author": "jaewon1676", + "code": "function solution(record) {\n let answer = [];\n const map = new Map();\n \n for (let i = 0; i < record.length; ++i) {\n const [state, uid, name] = record[i].split(' '); \n\n if (state == 'Leave') {\n answer.push([uid, '님이 나갔습니다.']);\n \n continue;\n }\n \n if (state == 'Enter') {\n answer.push([uid, '님이 들어왔습니다.']);\n }\n map.set(uid, name);\n }\n return answer.map(ele => map.get(ele[0]) + ele[1]);\n}\n\n", + "probId": "42888" + }, + { + "id": "p4NaqOgrqSyAezdJvyYSk", + "author": "chaerin-dev", + "code": "function solution(record) {\n // 최종 메시지를 저장할 배열\n let result = [];\n // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열\n let resultId = [];\n // 유저의 아이디: 닉네임 쌍을 저장할 Map\n let idNameMap = new Map();\n\n // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환\n record = record.map((e) => e.split(\" \"));\n\n // record의 각 요소에 대해\n record.forEach((e) => {\n // 각 요소의 첫 번째 요소(Enter/Leave/Change)가\n switch (e[0]) {\n // Enter이면\n case \"Enter\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 들어왔습니다.\");\n // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장\n idNameMap.set(e[1], e[2]);\n break;\n // Leave이면\n case \"Leave\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 나갔습니다.\");\n break;\n // Change이면\n case \"Change\":\n // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경\n idNameMap.set(e[1], e[2]);\n break;\n }\n });\n\n // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환\n return result.map((e, i) => idNameMap.get(resultId[i]) + e);\n}\n", + "probId": "42888" + }, + { + "id": "x99vnLMYrMhIQuw2hQMWu", + "author": "codeisneverodd", + "code": "function solution(N, stages) {\n var answer = [];\n let failRate = new Array(N + 2).fill(0);\n let playerChallenging = new Array(N + 2).fill(0);\n let playerReached = new Array(N + 2).fill(0);\n\n for (const stage of stages) {\n for (let i = 1; i <= stage; i++) playerReached[i] += 1;\n playerChallenging[stage] += 1;\n }\n for (let i = 1; i <= N + 1; i++)\n failRate[i] =\n playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i];\n const rateNIndex = failRate\n .slice(1, N + 1)\n .map((rate, stage) => [rate, stage + 1]);\n const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]);\n answer = sortedRate.map((stage) => stage[1]);\n return answer;\n}\n\n", + "probId": "42889" + }, + { + "id": "2ekoYUKJzzlnD6tMzsl6A", + "author": "jaewon1676", + "code": "function solution(N, stages) {\n let map = Array.from(Array(N), () => Array(2).fill(0));\n let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수\n let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율\n let count = 0;\n\n stages.sort(function (a, b) {\n return a - b;\n }); // 난이도 오름차순 정렬\n for (let i = 1; i <= N; i++) {\n while (1) {\n // i 스테이지의 실패율 계산\n if (stages[0] == i) {\n answer[i - 1] += 1;\n count += 1;\n stages.shift();\n } else break;\n }\n rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산\n\n count = 0;\n\n map[i - 1][0] = i;\n map[i - 1][1] = rate[i - 1];\n }\n map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬\n let stack = []; // 답\n for (let i = 0; i < map.length; i++) {\n stack.push(map[i][0]);\n }\n\n return stack;\n}\n\n/* 풀이 과정\n1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다.\n2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다.\n3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서.\n4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다.\n*/\n", + "probId": "42889" + }, + { + "id": "KqRczGou4V4FfLn6PewLc", + "author": "codeisneverodd", + "code": "function solution(relation) {\n //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다.\n //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다.\n //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다.\n const keys = []\n const totalAttrCount = relation[0].length\n const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1]\n\n //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수\n const isUnique = (relation, attrIndexComb) => {\n let result = Array.from(Array(relation.length), x => '')\n for (const attrIndex of attrIndexComb) {\n relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음.\n }\n return result.length === [...new Set(result)].length\n }\n\n //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다.\n const isMinimal = (attrComb) => {\n for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false\n return true\n }\n\n //가능한 모든 조합을 검사\n for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) {\n const combinations = getCombinations(indexList, attrCount)\n for (const attrComb of combinations) {\n if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb)\n }\n }\n\n return keys.length\n}\n\n//Fn for 1. 조합을 반환하는 함수\nconst getCombinations = (array, selectNumber) => {\n const result = [];\n if (selectNumber === 1) {\n return array.map((element) => [element]);\n }\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}\n", + "probId": "42890" + }, + { + "id": "a1zKAO5v5a6cSgJqzSWgs", + "author": "ryong9rrr", + "code": "function solution(food_times, k) {\n const total = food_times.reduce((a, b) => a + b)\n if (total <= k) {\n return -1\n }\n\n // stack으로 풀기\n const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA)\n\n let prev = 0\n while (stack.length > 0 && k >= 0) {\n const [time] = stack[stack.length - 1]\n const acc = (time - prev) * stack.length\n if (k < acc) {\n break\n }\n stack.pop()\n k -= acc\n prev = time\n }\n\n const result = stack\n .reverse()\n .map(([_, order]) => order)\n .sort((orderA, orderB) => orderA - orderB)\n return result[k % result.length]\n}", + "probId": "42891" + }, + { + "id": "TMwohTPFNdVp8sDLh0oPl", + "author": "codeisneverodd", + "code": "function solution(n, computers) {\n let answer = 0\n const visited = new Array(n).fill(false)\n const newNetwork = (startComputer) => {\n //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다.\n const toBeVisited = [startComputer]\n while (toBeVisited.length > 0) {\n //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다\n const currentComputer = toBeVisited.pop()\n visited[currentComputer] = true\n for (let nextComputer = 0; nextComputer < n; nextComputer++) {\n if (!visited[nextComputer] && computers[currentComputer][nextComputer]) {\n toBeVisited.push(nextComputer)\n }\n }\n }\n }\n\n for (let startComputer = 0; startComputer < n; startComputer++) {\n if (!visited[startComputer]) {\n newNetwork(startComputer)\n //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다.\n answer++\n }\n }\n return answer\n}", + "probId": "43162" + }, + { + "id": "Zo4dG6G_do1oh_ab-0eJB", + "author": "codeisneverodd", + "code": "function solution(tickets) {\n const routes = [] //최종 가능 루트들을 담을 배열\n const makeRoutes = (currentDepart, remainTickets, currentRoute) => {\n //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수\n if (remainTickets.length > 0) {\n remainTickets.forEach(([depart, nextDepart], index) => {\n if (depart === currentDepart)\n //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정\n makeRoutes(\n nextDepart,\n [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)],\n [...currentRoute, currentDepart])\n })\n } else {\n //티켓을 모두 사용하면 최종 가능 루트에 포함\n routes.push([...currentRoute, currentDepart])\n }\n }\n makeRoutes(\"ICN\", tickets, [])\n return routes.sort()[0]\n}", + "probId": "43164" + }, + { + "id": "amJdham1OZp3o0v5EtSe4", + "author": "ssi02014", + "code": "function solution(numbers, target) {\n let answer = 0;\n\n dfs(0, 0);\n return answer;\n\n function dfs(index, sum) {\n // 재귀 종료\n if (index === numbers.length) {\n if (sum === target) {\n answer++;\n }\n return;\n }\n\n dfs(index + 1, sum + numbers[index]);\n dfs(index + 1, sum - numbers[index]);\n }\n}\n\n", + "probId": "43165" + }, + { + "id": "HpUdTdOFinVeFrQkpJcrV", + "author": "codeisneverodd", + "code": "function solution(numbers, target) {\n var answer = 0;\n const binaryLength = numbers.length;\n const binary = 2 ** binaryLength;\n for (let i = 0; i < binary; i++) {\n const numSlice = numbers.slice();\n const binaryString = i.toString(2).padStart(binaryLength, '0');\n for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null;\n const calculated = numSlice.reduce((prev, current) => prev + current);\n if (calculated === target) answer += 1;\n }\n return answer;\n}\n", + "probId": "43165" + }, + { + "id": "TFMuO8PrAC7tTv1RWtC9y", + "author": "codeisneverodd", + "code": "function solution(n, times) {\n //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right\n let [left, right] = [1, Math.max(...times) * n];\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0);\n //sum은 mid 시간 동안 처리 할 수 있는 사람의 수\n if (sum < n) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다.\n return left;\n}\n", + "probId": "43238" + }, + { + "id": "_d98-RD0l3ev3jjOYmQYx", + "author": "codeisneverodd", + "code": "function solution(n, edge) {\n const graph = Array.from(Array(n + 1), () => [])\n for (const [src, dest] of edge) {\n graph[src].push(dest)\n graph[dest].push(src)\n }\n const distance = Array(n + 1).fill(0)\n distance[1] = 1\n const toBeSearched = [1]\n while (toBeSearched.length > 0) {\n const src = toBeSearched.shift()\n for (const dest of graph[src]) {\n if (distance[dest] === 0) {\n distance[dest] = distance[src] + 1\n toBeSearched.push(dest)\n }\n }\n }\n return distance.filter(x => x === Math.max(...distance)).length\n}", + "probId": "49189" + }, + { + "id": "N_z1WyMHQRNs2rc3J-kBF", + "author": "codeisneverodd", + "code": "function solution(skill, skill_trees) {\n var answer = 0;\n for (const tree of skill_trees) {\n let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x))\n if (checkOrder(check)) answer += 1\n }\n return answer;\n}\n\nfunction checkOrder(checkArr) {\n for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false\n return true\n}", + "probId": "49993" + }, + { + "id": "l8wq2rO45w__Ocv_dY6_1", + "author": "codeisneverodd", + "code": "function solution(dirs) {\n const move = ([x, y], dir) => {\n let next = [x, y];\n if (dir === 'U') next = [x, y + 1];\n if (dir === 'D') next = [x, y - 1];\n if (dir === 'R') next = [x + 1, y];\n if (dir === 'L') next = [x - 1, y];\n if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y];\n return next;\n };\n\n const isSameRoute = ([s1, e1], [s2, e2]) => {\n const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2;\n return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1));\n };\n\n const trace = {\n visited: [],\n visit(start, end) {\n if (start[0] === end[0] && start[1] === end[1]) return;\n if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]);\n },\n };\n\n let current = [0, 0];\n\n dirs.split('').forEach(dir => {\n const next = move(current, dir);\n trace.visit(current, next);\n current = next;\n });\n\n return trace.visited.length;\n}\n", + "probId": "49994" + }, + { + "id": "xHh0Va77tzrAqLRAQ_8R9", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = 0;\n let lengthArr = []\n for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length)\n answer = Math.min(...lengthArr)\n return answer;\n}\n\nfunction compressedString(str, unitNum) {\n let count = 1\n let result = ['']\n for (let repeat = 0; repeat <= str.length / unitNum; repeat++) {\n const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum)\n if (result[result.length - 1] === slicedGroup) {\n count++\n } else {\n if (count > 1) result[result.length - 1] = count + result[result.length - 1]\n result.push(slicedGroup)\n count = 1\n }\n }\n return result.join('')\n}\n\n", + "probId": "60057" + }, + { + "id": "WTd5Qn0nXnoidihRk1KM_", + "author": "chaerin-dev", + "code": "function solution(s) {\n // len: 압축 전 문자열 길이\n const len = s.length;\n // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화)\n let shortenLen = len;\n\n // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행\n for (let i = 1; i <= len / 2; i++) {\n // cnt: 단위가 반복되는 횟수를 카운트할 변수\n let cnt = 1;\n // temp: 현재 단위 문자열을 임시로 저장해둘 변수\n let temp = s.slice(0, i);\n // shhortenS: 압축 후 문자열을 저장할 변수\n let shortenS = \"\";\n\n // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단\n for (let j = i; j < len; j += i) {\n // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가\n if (temp === s.slice(j, j + i)) cnt++;\n // 현재 단위 문자열과 일치하지 않으면\n else {\n // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 단위가 반복되는 횟수는 다시 1로 초기화\n cnt = 1;\n // 현재 단위 문자열 업데이트\n temp = s.slice(j, j + i);\n }\n }\n\n // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 압축 후 문자열 길이의 최솟값 업데이트\n shortenLen = Math.min(shortenLen, shortenS.length);\n }\n\n // 압축 후 문자열 길이의 최솟값 반환\n return shortenLen;\n}\n", + "probId": "60057" + }, + { + "id": "4JdGatm2NgPm76lb_CgLP", + "author": "codeisneverodd", + "code": "function solution(p) {\n if (p.length === 0) return p\n let bracketCount = 0\n let isURight = true\n for (let i = 0; i < p.length; i++) {\n bracketCount = p[i] === '(' ? bracketCount + 1 : bracketCount - 1\n if (bracketCount < 0) isURight = false\n if (bracketCount === 0) {\n const [u, v] = [p.slice(0, i + 1), p.slice(i + 1)]\n if (isURight) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n }\n}\n\n", + "probId": "60058" + }, + { + "id": "sYeKYoNvq3GbKGGA8kW_J", + "author": "codeisneverodd", + "code": "function solution(p) {\n if (p.length === 0) {\n return p\n } else {\n const sliceIndex = balancedIndex(p)\n const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)]\n if (isRight(u)) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n}\n\nconst isRight = (str) => {\n if (str[0] === ')') return false\n let stack = 0\n for (let i = 0; i < str.length; i++) {\n stack = str[i] === '(' ? stack + 1 : stack - 1\n if (stack < 0) return false\n }\n return stack === 0\n}\nconst balancedIndex = (str) => {\n let count = 0\n for (let i = 0; i < str.length; i++) {\n count = str[i] === '(' ? count + 1 : count - 1\n if (count === 0) return i\n }\n}", + "probId": "60058" + }, + { + "id": "dfcN2IQGD9YoNLHxiJqyk", + "author": "ryong9rrr", + "code": "class Node {\n constructor(value = '') {\n this.value = value\n this.children = new Map()\n this.count = 0\n }\n}\n\nclass Trie {\n constructor() {\n this.root = new Node()\n }\n\n insert(string) {\n let currentNode = this.root\n for (const char of string) {\n if (!currentNode.children.has(char)) {\n currentNode.children.set(char, new Node(currentNode.value + char))\n }\n currentNode = currentNode.children.get(char)\n currentNode.count++\n }\n }\n\n startsWithCount(prefix) {\n let currentNode = this.root\n for (const char of prefix) {\n if (!currentNode.children.has(char)) {\n return 0\n }\n currentNode = currentNode.children.get(char)\n }\n return currentNode.count\n }\n}\n\nfunction reverseString(string) {\n return [...string].reverse().join('')\n}\n\nfunction solution(words, queries) {\n const table = {}\n const reverseTable = {}\n const counter = {}\n\n words.forEach((word) => {\n const key = word.length\n if (!table[key]) table[key] = new Trie()\n if (!reverseTable[key]) reverseTable[key] = new Trie()\n table[key].insert(word)\n reverseTable[key].insert(reverseString(word))\n if (counter[key] === undefined) counter[key] = 0\n counter[key]++\n })\n\n return queries.map((query) => {\n const key = query.length\n if (!table[key]) {\n return 0\n }\n const tQuery = query.replace(/\\?/g, '')\n if (!tQuery) {\n return counter[key]\n }\n if (query[query.length - 1] === '?') {\n return table[key].startsWithCount(tQuery)\n }\n return reverseTable[key].startsWithCount(reverseString(tQuery))\n })\n}", + "probId": "60060" + }, + { + "id": "bg1nA1iOZ7o8w90kEXLHR", + "author": "codeisneverodd", + "code": "function solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor(w, h)\n answer = w * h - (h + w - gcd)\n return answer;\n}\n\nlet greatestCommonDivisor = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}\n\n", + "probId": "62048" + }, + { + "id": "5W48yUElKdVgsH9cuqzoI", + "author": "codeisneverodd", + "code": "function solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor2(w, h)\n const erasedBoxInUnit = h / gcd + w / gcd - 1\n answer = w * h - erasedBoxInUnit * gcd\n return answer;\n}\n\nlet greatestCommonDivisor2 = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}\n\n", + "probId": "62048" + }, + { + "id": "5tg-e62YPGS0CbsuouVbb", + "author": "jaewon1676", + "code": "// 유클리드 호제법을 이용한 최대 공약수 구하기\nfunction gcd(w, h) { \n let mod = w % h; // w와 h의 나머지를 구합니다.\n\n if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다.\n return h;\n }\n // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다.\n return gcd(h, mod);\n}\nfunction solution(w, h) {\n const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다.\n return w * h - (w + h - gcdVal);\n} \n\n", + "probId": "62048" + }, + { + "id": "R9AJ8bcOH6-WXZff4ODyr", + "author": "yongchanson", + "code": "function solution(w,h){\n const slope = h / w;\n let cnt = 0;\n //대각선 아래에 위치한 도형의 개수를 구합니다.\n //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다.\n for(let i = 1; i <= w; i++){\n cnt += Math.ceil(slope * i);\n }\n //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다.\n return ((w*h - cnt) * 2);\n}\n", + "probId": "62048" + }, + { + "id": "eZiNNs5QH0aJbducs7DNm", + "author": "jaewon1676 ", + "code": "function solution(board, moves) {\n var answer = 0; // 인형을 터뜨린 횟수\n let basket = []; // 바구니\n let crane = 0; // 크레인의 행의 위치\n for (let i = 0; i < moves.length; i++) {\n crane = moves[i] - 1; // crane = 0\n for (let j = 0; j < board.length; j++) {\n if (board[j][crane] == 0)\n else if (board[j][crane] != 0) {\n basket.push(board[j][crane])\n board[j][crane] = 0\n if (basket[basket.length - 1] == basket[basket.length - 2]) {\n basket.pop();\n basket.pop();\n answer += 2;\n }\n break;\n }\n }\n }\n\n return answer;\n}\n\n/* 풀이 과정\n1. 입력받은 moves의 length만큼 for문을 돌린다.\n2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다.\n3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다.\n4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */\n\n", + "probId": "64061" + }, + { + "id": "cvL0xkHpC95a-p2BIcBW2", + "author": "chaerin-dev", + "code": "function solution(board, moves) {\n let n = board.length;\n\n // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경\n board = board.flat();\n let rotatedBoard = Array.from({ length: n }, (i) => []);\n for (let i = 0; i < board.length; i++) {\n if (board[i]) rotatedBoard[i % n].push(board[i]);\n }\n\n // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기\n let stack = [];\n let cnt = 0;\n for (let move of moves) {\n let doll = rotatedBoard[move - 1].shift();\n if (doll === undefined) continue;\n if (stack[stack.length - 1] === doll) {\n stack.pop();\n cnt += 2;\n } else {\n stack.push(doll);\n }\n }\n\n return cnt;\n}", + "probId": "64061" + }, + { + "id": "spClcvPas29QM_oFXoooh", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = [];\n let sets = s\n .slice(2, -2)\n .split('},{')\n .map(set => set.split(',').map(x => parseInt(x)))\n .sort((a, b) => a.length - b.length)\n for (const set of sets) answer.push(...set.filter(x => !answer.includes(x)))\n return answer;\n}\n\n", + "probId": "64065" + }, + { + "id": "h-nBZa6MhzPr-j_Hv0VNt", + "author": "chaerin-dev", + "code": "function solution(s) {\n // 문자열 -> 정수 이차원 배열\n const sArr = s\n .substring(2, s.length - 2)\n .split(\"},{\")\n .map((e) => e.split(\",\").map((e) => parseInt(e)))\n .sort((a, b) => a.length - b.length);\n // 정답을 저장할 배열\n const answer = [];\n // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가\n for (let i = 0; i < sArr.length; i++) {\n for (let j = 0; j < sArr[i].length; j++) {\n const temp = sArr[i][j];\n if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]);\n }\n }\n return answer;\n}", + "probId": "64065" + }, + { + "id": "B_i7IFvRIZBetSbd-PAUe", + "author": "chaerin-dev", + "code": "function solution(numbers, hand) {\n // 키패드를 4행 3열의 이차원 배열이라고 생각\n\n // leftRow, leftCol: 왼손의 현재 위치\n let [leftRow, leftCol] = [3, 0];\n // rightRow, rightCol: 오른손의 현재 위치\n let [rightRow, rightCol] = [3, 2];\n // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열\n let result = '';\n\n // 눌러야할 각 번호가\n numbers.forEach(e => {\n // 1/4/7이면 왼손으로 눌러야하므로\n if (e === 1 || e === 4 || e === 7) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 3/6/9이면 오른손으로 눌러야하므로\n else if (e === 3 || e === 6 || e === 9) {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2];\n // result 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n\n // 2/5/8/0이면\n else {\n // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌\n if (e === 0) e = 11;\n\n // leftRow, leftCol: 다음에 눌러야 할 번호의 위치\n let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1];\n // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol);\n // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol);\n\n // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로\n if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [nextRow, nextCol];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로\n else {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [nextRow, nextCol];\n // reuslt 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n }\n });\n\n // result 문자열 반환\n return result;\n}\n\n//정답 3(🎩 refactor 220425) - codeisneverodd\nfunction solution(numbers, hand) {\n let leftNum = 10;\n let rightNum = 12;\n return numbers\n .map(num => {\n if (num === 0) {\n num = 11;\n }\n if (num % 3 === 1) {\n return leftTo(num);\n } else if (num % 3 === 0) {\n return rightTo(num);\n } else {\n const numLocation = numToLocation(num);\n const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation);\n const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation);\n if (leftDistance === rightDistance) {\n return hand === 'left' ? leftTo(num) : rightTo(num);\n } else if (leftDistance < rightDistance) {\n return leftTo(num);\n } else {\n return rightTo(num);\n }\n }\n })\n .join('');\n\n function leftTo(num) {\n leftNum = num;\n return 'L';\n }\n\n function rightTo(num) {\n rightNum = num;\n return 'R';\n }\n}\n", + "probId": "67256" + }, + { + "id": "ZxUt852jTDOwDgHO8N6CQ", + "author": "codeisneverodd", + "code": "function solution(expression) {\n var answer = 0;\n const mathExp = ['*', '+', '-']\n let priorityArr = Permutation(mathExp, 3)\n const calculated = []\n for (const priority of priorityArr) {\n const expressionArr = expression.split(/(\\D)/)\n for (const exp of priority) {\n while (expressionArr.includes(exp)) {\n const index = expressionArr.indexOf(exp)\n expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join('')))\n }\n }\n calculated.push(Math.abs(expressionArr[0]))\n }\n answer = Math.max(...calculated)\n return answer\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}", + "probId": "67257" + }, + { + "id": "4MMPkWfGDUTGeBCtGsf_A", + "author": "prove-ability", + "code": "function solution(numbers) {\n const answer = [];\n \n for(let i = 0, len = numbers.length; i < len; i++) {\n for(let j = i + 1, len = numbers.length; j < len; j++) {\n if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j])\n }\n }\n \n return answer.sort((a, b) => a - b);\n}\n\n", + "probId": "68644" + }, + { + "id": "fMF972vIuWpphnKq-vWIY", + "author": "codeisneverodd", + "code": "function solution(n) {\n const snail = Array.from(Array(n), (_, index) => Array(index + 1));\n let currentNum = 0;\n let [currentRow, currentCol] = [-1, 0];\n let shouldMove = n;\n while (shouldMove > 0) {\n for (let i = 0; i < shouldMove; i++)\n snail[++currentRow][currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 1; i++)\n snail[currentRow][++currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 2; i++)\n snail[--currentRow][--currentCol] = ++currentNum;\n shouldMove -= 3;\n }\n return snail.flatMap((num) => num);\n}\n\n", + "probId": "68645" + }, + { + "id": "1XxEDLHjdyGjRqWdgZXTe", + "author": "jaewon1676", + "code": "function solution(n) {\n const answer = new Array(n).fill().map((e, i) => new Array(i + 1));\n // 이차원배열을 만들어준다\n \n let count = 0;\n let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다.\n let y = 0; // 열 \n while (n > 0) {\n for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다.\n for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다.\n for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다.\n \n n -= 3;\n }\n return answer.flatMap(e => e);\n // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. \n // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] \n // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7]\n}\n", + "probId": "68645" + }, + { + "id": "CUddl6ab2O3SO9kRUROOe", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = 0;\n const ternaryReversed = decimalToTernaryReversed(n);\n answer = parseInt(ternaryReversed, 3);\n return answer;\n}\n\nconst decimalToTernaryReversed = (num) => {\n let ternary = \"\";\n while (num >= 3) {\n ternary += (num % 3).toString();\n num = Math.floor(num / 3);\n }\n ternary += num.toString();\n return ternary;\n};\n\n", + "probId": "68935" + }, + { + "id": "85PaqiBxHYVHXg-4FVzA0", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = n.toString(3).split(\"\").reverse().join(\"\");\n\n return parseInt(answer, 3);\n}\n\n\n", + "probId": "68935" + }, + { + "id": "l0m47eKjmAGR2rnS35isr", + "author": "prove-ability", + "code": "function solution(n) {\n return parseInt(n.toString(3).split(\"\").reverse().join(\"\"), 3)\n}\n", + "probId": "68935" + }, + { + "id": "VjBTGwobQsJgaSC_-3Xoo", + "author": "codeisneverodd", + "code": "function solution(arr) {\n const quad = matrix => {\n const length = matrix.length;\n const half = length / 2;\n const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0]));\n\n if (pass(matrix)) return [matrix[0][0]];\n if (length <= 2) return matrix;\n\n const startPoints = [\n [0, 0],\n [0, half],\n [half, 0],\n [half, half],\n ];\n\n return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half))));\n };\n return quad(arr)\n .flat(Infinity)\n .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]);\n}\n", + "probId": "68936" + }, + { + "id": "ru906YcPbXPOcfCsbRbq3", + "author": "yongchanson", + "code": "function solution(a, b) {\n var answer = 0;\n\n for (i = 0; i < a.length; i++) {\n answer += a[i] * b[i];\n }\n return answer;\n}\n\n", + "probId": "70128" + }, + { + "id": "yVSbigegJeob3iGsWLHPb", + "author": "prove-ability", + "code": "function solution(a, b) {\n var answer = 0;\n\n for (let i = 0, len = a.length; i < len; i++) {\n answer += a[i] * b[i];\n }\n\n return answer;\n}\n\n", + "probId": "70128" + }, + { + "id": "0tsbnkuvnI5KDsxeAkH_7", + "author": "jaewon1676", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i=0; i acc + e * b[i], 0);\n}\n", + "probId": "70128" + }, + { + "id": "C2e8cxdlvFHIVNicP62Sy", + "author": "codeisneverodd", + "code": "function solution(s) {\n const removeZero = s => {\n const removed = s\n .split('')\n .filter(n => n !== '0')\n .join('');\n return { removed, count: s.length - removed.length };\n };\n\n const convertToBinary = (s, turnCount, removedCount) => {\n if (s === '1') return [turnCount, removedCount];\n const { removed, count } = removeZero(s);\n return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count);\n };\n\n return convertToBinary(s, 0, 0);\n}\n\n", + "probId": "70129" + }, + { + "id": "YcU3sQNtn8xHnRaa35Bnp", + "author": "RyanDeclan", + "code": "function solution(s) {\n let box = [0,0]\n while(s.length > 1){\n let reamain = s.replace(/0/g,\"\").length\n box[0] += 1\n box[1] += (s.length - reamain)\n s = reamain.toString(2)\n }\n return box;\n}\n", + "probId": "70129" + }, + { + "id": "sbvUX65aK2-Lwa1ZaT34v", + "author": "codeisneverodd", + "code": "function solution(new_id) {\n let answer = '';\n answer = new_id.toLowerCase(); // step1\n const step2 = /[^0-9a-z._-]/g;\n const step3 = /[.]+/g;\n const step4_1 = /^\\./;\n const step4_2 = /\\.$/;\n answer = answer.replace(step2, '');\n answer = answer.replace(step3, '.');\n answer = answer.replace(step4_1, '');\n answer = answer.replace(step4_2, '');\n answer = answer === '' ? 'a' : answer; // step5\n answer = answer.length >= 16 ? answer.slice(0, 15) : answer; //step6\n answer = answer.replace(step4_2, '');\n switch (\n answer.length // step7\n ) {\n case 1:\n answer = answer + answer[0] + answer[0];\n break;\n case 2:\n answer = answer + answer[1];\n break;\n }\n return answer;\n}\n\n", + "probId": "72410" + }, + { + "id": "sL2GSaV2X3RPQdy49j9UU", + "author": "jaewon1676", + "code": "function solution(new_id) {\n // 1 소문자로 치환\n let answer = new_id\n .toLowerCase()\n\n // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거.\n .replace(/[^a-z0-9-_.]/gi, '')\n\n // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환\n .replace(/[.]{2,}/gi, '.')\n\n // 4 마침표(.)가 처음이나 끝에 위치하면 제거\n .replace(/^[.]|[.]$/gi, '');\n\n // 5 빈 문자열이면 a 대입\n if (answer === '') answer = 'a';\n\n // 6 length > 15이면 그 뒤의 문자들은 제거\n if (answer.length > 15) {\n answer = answer.substring(0, 15);\n // 마침표(.)가 끝에 위치하면 마침표(.)제거\n answer = answer.replace(/[.]$/gi, '');\n }\n\n // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임\n while (answer.length < 3) {\n answer += answer[answer.length - 1];\n }\n return answer;\n}\n\n", + "probId": "72410" + }, + { + "id": "uZddXDn08sQ-xUh5qAfv_", + "author": "chaerin-dev", + "code": "function solution(new_id) {\n // 1단계: 모든 대문자를 소문자로\n new_id = new_id.toLowerCase();\n\n // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거\n new_id = new_id.replace(/[^\\w\\-\\.]/g, '');\n\n // 3단계: 연속되는 마침표는 마침표 하나로\n new_id = new_id.replace(/\\.{2,}/g, '.');\n\n // 4단계: 처음이나 끝에 마침표가 있으면 제거\n new_id = new_id.replace(/^\\.|\\.$/, '');\n\n // 5단계: new_id가 빈 문자열이면 \"a\" 대입\n if (new_id.length === 0) new_id = 'a';\n\n // 6단계: new_id의 길이가 16자 이상이면,\n // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거\n // 제거 후 끝에 마침표가 있으면 제거\n if (new_id.length >= 16) new_id = new_id.slice(0, 15);\n new_id = new_id.replace(/\\.$/, '');\n\n // 7단계: new_id의 길이가 2자 이하이면,\n // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임\n let len = new_id.length;\n if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len);\n\n return new_id;\n}\n//정답 5(🎩 refactor 220425) - codeisneverodd\nfunction solution(new_id) {\n let answer = new_id\n .toLowerCase() //step 1\n .replace(/[^0-9a-z._-]/g, '') // step 2\n .replace(/\\.+/g, '.') //step 3\n .replace(/^\\.|\\.$/g, '') //step 4\n .replace(/^$/, 'a') //step 5\n .slice(0, 15)\n .replace(/\\.$/, ''); //step 6\n // step7\n if (answer.length === 1) answer = answer[0].repeat(3);\n if (answer.length === 2) answer = answer + answer[1];\n\n return answer;\n}\n", + "probId": "72410" + }, + { + "id": "6M1CqHAtBwJKv9vNzxzKq", + "author": "codeisneverodd", + "code": "function solution(orders, course) {\n var answer = [];\n for (const selectNum of course) {\n let combinations = []\n for (const order of orders) {\n getCombinations(Array.from(order), selectNum)\n .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다.\n .forEach(combString => combinations.push(combString))\n }\n const combCounts = combinations.reduce((counts, combination) => {\n counts[combination] = (counts[combination] || 0) + 1;\n return counts;\n }, {});\n let maxCount = 0, maxComb = []\n for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb]\n for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb)\n answer.push(...maxComb)\n }\n answer = answer.sort()\n return answer;\n}\n\nconst getCombinations = (array, selectNum) => {\n const result = [];\n if (selectNum === 1) return array.map((element) => [element]);\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}\n", + "probId": "72411" + }, + { + "id": "ExAUQLm8_DbHoIOkdSICa", + "author": "codeisneverodd", + "code": "function solution(infos, queries) {\n const infoData = {};\n\n const fetchInfoData = (keyArr, score, start) => {\n const key = keyArr.join('');\n\n infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]);\n\n for (let i = start; i < keyArr.length; i++) {\n fetchInfoData(\n keyArr.map((v, index) => (index === i ? '-' : v)),\n score,\n i + 1\n );\n }\n };\n\n const getPassCount = (key, passScore) => {\n const scores = infoData[key];\n\n if (!scores) return 0;\n\n let [left, right] = [0, scores.length];\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n scores[mid] >= passScore ? (right = mid) : (left = mid + 1);\n }\n\n return scores.length - left;\n };\n\n infos\n .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]])\n .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0));\n\n Object.keys(infoData).forEach(key => {\n infoData[key].sort((a, b) => a - b);\n });\n\n return queries\n .map(query => query.replace(/ and /g, '').split(' '))\n .map(([key, passScore]) => getPassCount(key, +passScore));\n}\n// 주의 할 점\n// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림\n// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림.\n// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음.\n", + "probId": "72412" + }, + { + "id": "zTl0_lZtDm1DGz4OiKTUq", + "author": "codeisneverod", + "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (let i = 0; i < absolutes.length; i++) {\n answer += signs[i] ? absolutes[i] : -1 * absolutes[i];\n }\n return answer;\n}\n\n", + "probId": "76501" + }, + { + "id": "-ZARJkkhMxV5YYRxBkQug", + "author": "jaewon1676", + "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (var i = 0; i < absolutes.length; i++) {\n if (signs[i] === false) {\n answer = answer - absolutes[i];\n } else {\n answer = answer + absolutes[i];\n }\n }\n\n return answer;\n}\n\n", + "probId": "76501" + }, + { + "id": "HRq3lHFkcqARmtLHNSx1T", + "author": "prove-ability", + "code": "function solution(absolutes, signs) {\n var answer = 0;\n\n for (let i = 0, len = absolutes.length; i < len; i++) {\n if (!signs[i]) answer += absolutes[i] * -1;\n else answer += absolutes[i];\n }\n\n return answer;\n}\n\n", + "probId": "76501" + }, + { + "id": "JyxLszMY_7MnNq8oUVs3n", + "author": "prove-ability", + "code": "function solution(absolutes, signs) {\n let answer = 0;\n absolutes.forEach((absolute, i) => {\n if(!signs[i]) absolute *= -1;\n answer += absolute;\n })\n return answer;\n}\n\n", + "probId": "76501" + }, + { + "id": "xsaspCq7vezykqs681cDv", + "author": "chaerin-dev", + "code": "function solution(absolutes, signs) {\n // 연산 결과를 저장할 변수\n let result = 0;\n // signs의 각 요소에 대해\n signs.forEach((e, i) => {\n // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌\n if (e) result += absolutes[i];\n // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌\n else result -= absolutes[i];\n });\n // result 반환\n return result;\n}", + "probId": "76501" + }, + { + "id": "Wv4h1yyJSqs5sNDIyGcxb", + "author": "codeisneverodd", + "code": "function solution(s) {\n let answer = 0;\n let sArr = s.split('')\n if (isRight(sArr.join(''))) answer += 1\n for (let i = 0; i < sArr.length - 1; i++) {\n sArr.push(sArr.shift())\n if (isRight(sArr.join(''))) answer += 1\n }\n return answer;\n}\n\nfunction isRight(str) {\n const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')']\n let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}]\n for (let sIndex = 0; sIndex < str.length; sIndex++) {\n for (let bIndex = 0; bIndex < 3; bIndex++) {\n if (str[sIndex] === bracketOpen[bIndex]) {\n status[bIndex].open = true\n status[bIndex].openOrder.push(sIndex)\n }\n if (str[sIndex] === bracketClose[bIndex]) {\n if (status[bIndex].openOrder.length > 0) {\n if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0)\n return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘\n status[bIndex].openOrder.pop()\n status[bIndex].open = false\n } else {\n return false //열리기 전에 닫힘\n }\n }\n }\n }\n for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음\n return true\n}", + "probId": "76502" + }, + { + "id": "2STAKb6FcpCvJ-3owIOdb", + "author": "codeisneverodd", + "code": "function solution(lottos, win_nums) {\n // 0이 없는 경우 > 최저 순위 == 최고 순위\n // 0이 있는 경우 > 모두 0인경우 > 1위\n // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위\n // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함.\n // 순위는 7 - hit\n // 최종적으로 7위인 경우 6위로 변경\n var answer = [];\n if (lottos.indexOf(0) === -1) {\n answer[0] = answer[1] = 7 - hit(lottos, win_nums);\n } else {\n const zeroCount = lottos.length - [...new Set(lottos)].length + 1;\n answer[1] = 7 - hit(lottos, win_nums);\n zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount);\n }\n for (let i = 0; i < 2; i++) {\n answer[i] >= 7 ? (answer[i] = 6) : null;\n }\n return answer;\n}\n\nfunction hit(lottos, win_nums) {\n let result = 0;\n lottos.forEach((element) => {\n win_nums.indexOf(element) === -1 ? null : (result += 1);\n });\n return result;\n}\n\n", + "probId": "77484" + }, + { + "id": "E7IbT0lAHaXr8A226fEgC", + "author": "jaewon1676", + "code": "function solution(lottos, win_nums) {\n var answer = [];\n const correct = lottos.filter((lotto) => win_nums.includes(lotto)).length;\n // lottos배열을 순회하며 당첨배열에 있는 수를 return 하고 총 개수를 correct에 저장\n\n const zeros = lottos.filter((lotto) => lotto === 0).length;\n // lottos배열을 순회하며 0인 총 개수를 zeros에 저장\n\n let min = 7 - correct >= 6 ? 6 : 7 - correct;\n\n let max = min - zeros < 1 ? 1 : min - zeros;\n\n answer = [max, min];\n\n return answer;\n}\n\n", + "probId": "77484" + }, + { + "id": "aG-lSdljg0Xq8v3KlqhMu", + "author": "jaewon1676", + "code": "function solution(lottos, win_nums) {\n var answer = [];\n let max = 7;\n let min = 7;\n console.log(lottos);\n console.log(win_nums);\n for (let i = 0; i < 6; i++) {\n if (lottos.includes(win_nums[i])) {\n max--;\n }\n }\n min = max;\n for (let i = 0; i < 6; i++) {\n if (lottos[i] == 0) min--;\n }\n if (max == 7) max = 6;\n if (min == 7) min = 6;\n answer = [min, max];\n return answer;\n}\n\n", + "probId": "77484" + }, + { + "id": "eAEQUKTRC168pKeDtNrHc", + "author": "yongchanson", + "code": "function solution(lottos, win_nums) {\n //최고당첨개수 : maxPoint + basicPoint\n //최저당첨개수 : basicPoint\n\n let basicPoint = 0;\n let maxPoint = 0;\n let answer = [];\n\n lottos.forEach(function (lottos_item) {\n win_nums.forEach(function (win_nums_item) {\n if (lottos_item == win_nums_item) {\n basicPoint++;\n }\n });\n });\n\n lottos.forEach(function (item) {\n if (item == 0) {\n maxPoint++;\n }\n });\n\n maxPoint + basicPoint >= 2\n ? answer.push(7 - maxPoint - basicPoint)\n : answer.push(6);\n basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6);\n\n return answer;\n}\n\n", + "probId": "77484" + }, + { + "id": "UG3oEzFTwogT8oQw3AHJZ", + "author": "prove-ability", + "code": "function solution(lottos, win_nums) {\n // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화\n let winCount = 0;\n let zeroCount = 0;\n // 내 로또 번호 하니씩 접근\n lottos.forEach((num) => {\n // 번호가 0이 아니고 당첨 번호라면\n if (num !== 0 && win_nums.includes(num)) {\n winCount++;\n // 번호가 0이라면\n } else if (num === 0) {\n zeroCount++;\n }\n });\n // 일치한 수와 등수는 반비례하기 때문에 빼기 7\n // 이때 등수를 벗어나면 낙첨(6) 으로 고정\n let max = 7 - (winCount + zeroCount);\n if (max > 5) max = 6;\n let min = 7 - winCount;\n if (min > 5) min = 6;\n\n return [max, min];\n}\n\n", + "probId": "77484" + }, + { + "id": "Slcl9uWinEGxZ6hpkLgCa", + "author": "chaerin-dev", + "code": "function solution(lottos, win_nums) {\n let zeroCount = 0;\n let winCount = 0;\n lottos.forEach((item) => {\n if (item === 0) zeroCount++;\n else if (win_nums.includes(item)) winCount++;\n });\n let maxRank = Math.min(7 - (winCount + zeroCount), 6);\n let minRank = Math.min(7 - winCount, 6);\n return [maxRank, minRank];\n}\n", + "probId": "77484" + }, + { + "id": "7aFUYRRdi2OuNo96qPL6s", + "author": "codeisneverodd", + "code": "function solution(rows, columns, queries) {\n var answer = [];\n let matrix = new Array(rows)\n for (let i = 0; i < rows; i++) matrix[i] = new Array(columns)\n for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1\n for (const query of queries) {\n let order = []\n const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1]\n //fill order (row1->row2, col1->col2, row2->row2, col2->col1)\n for (let i = row1; i <= row2; i++) order.push(matrix[i][col1])\n for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i])\n for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2])\n for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i])\n //rotate clockwise\n order.push(order.shift())\n answer.push(Math.min(...order))\n //change value in matrix\n for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift()\n for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift()\n for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift()\n for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift()\n }\n return answer;\n}", + "probId": "77485" + }, + { + "id": "JZ-suekDYh7C1uJAOq3w1", + "author": "codeisneverodd", + "code": "function solution(left, right) {\n var answer = 0;\n for (let num = left; num <= right; num++) {\n divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num);\n }\n return answer;\n}\n\nconst divisorCounter = (num) => {\n let count = 0;\n const sqrt = Math.sqrt(num);\n for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1;\n return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2;\n};\n\n", + "probId": "77884" + }, + { + "id": "1-uxRUbsHftjA8reC-nyv", + "author": "jaewon1676", + "code": "function solution(left, right) {\n var answer = 0;\n\n for (left; left <= right; left++) {\n // left의 제곱근이 정수면 약수의 개수는 홀수\n if (Number.isInteger(Math.sqrt(left))) {\n answer -= left;\n } else {\n answer += left;\n }\n }\n return answer;\n}\n\n", + "probId": "77884" + }, + { + "id": "4lkGiXI-BbDVR2T8YSL9c", + "author": "prove-bility", + "code": "function getDivisorCount(i) {\n let count = 0;\n for(let j = 1; j <= i; j++) {\n if(i % j === 0) count++;\n }\n return count;\n}\n\nfunction solution(left, right) {\n let answer = 0;\n for(let i = left; i <= right; i++) {\n let count = getDivisorCount(i);\n if(count % 2 === 0) answer += i;\n else answer -= i;\n }\n return answer;\n}\n", + "probId": "77884" + }, + { + "id": "JaiaOfBthf1gf6vhQD57J", + "author": "le2sky", + "code": "function solution(numbers) {\n const answer = [];\n numbers.forEach((num) => {\n if (num % 2 == 0) answer.push(num + 1);\n else {\n let binary = [\"0\", ...num.toString(2)];\n let last = binary.lastIndexOf(\"0\");\n binary[last] = \"1\";\n binary[last + 1] = \"0\";\n answer.push(parseInt(binary.join(\"\"), 2));\n }\n });\n return answer;\n}\n", + "probId": "77885" + }, + { + "id": "VmyVBcoqswOzMGDgI-q-7", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = 0;\n let answerString = s;\n const stringToNum = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n for (let i = 0; i < 10; i++) {\n const regex = new RegExp(stringToNum[i], \"g\");\n answerString = answerString.replace(regex, i);\n }\n answer = Number(answerString);\n return answer;\n}\n\n", + "probId": "81301" + }, + { + "id": "NJa8AsdmnIhvsVqNc-s5b", + "author": "jaewon1676", + "code": "function solution(s) {\n let answer = 0;\n\n s = s.replace(/zero/g, 0);\n s = s.replace(/one/g, 1);\n s = s.replace(/two/g, 2);\n s = s.replace(/three/g, 3);\n s = s.replace(/four/g, 4);\n s = s.replace(/five/g, 5);\n s = s.replace(/six/g, 6);\n s = s.replace(/seven/g, 7);\n s = s.replace(/eight/g, 8);\n s = s.replace(/nine/g, 9);\n\n answer = Number(s);\n return answer;\n}\n\n", + "probId": "81301" + }, + { + "id": "RVyqCkKssdT4Zh-C7Vf86", + "author": "chaerin-dev", + "code": "function solution(s) {\n s = s\n .replace(/zero/g, 0)\n .replace(/one/g, 1)\n .replace(/two/g, 2)\n .replace(/three/g, 3)\n .replace(/four/g, 4)\n .replace(/five/g, 5)\n .replace(/six/g, 6)\n .replace(/seven/g, 7)\n .replace(/eight/g, 8)\n .replace(/nine/g, 9);\n return parseInt(s);\n}\n\n", + "probId": "81301" + }, + { + "id": "bVdLBqknAui_cX1jO9r2A", + "author": "yongchanson", + "code": "function solution(s) {\n let en = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n\n for (let i = 0; i < s.length * 2; i++) {\n let p = i % en.length;\n s = s.replace(en[p], p);\n }\n return Number(s);\n}\n", + "probId": "81301" + }, + { + "id": "5lahRK7RIzbT5874DsA0n", + "author": "codeisneverodd", + "code": "function solution(places) {\n var answer = [];\n answer = places.map(place => {\n return place.some((row, rowIndex) =>\n row.split('').some((mark, colIndex, rowArr) => {\n if (mark === 'X') return false\n const countPeopleAround = [\n rowArr[colIndex - 1] || '',\n rowArr[colIndex + 1] || '',\n (place[rowIndex - 1] || '')[colIndex],\n (place[rowIndex + 1] || '')[colIndex],\n ].filter(mark => mark === 'P').length\n return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1)\n })\n ) ? 0 : 1\n })\n return answer;\n}", + "probId": "81302" + }, + { + "id": "Ou7GGs1ci1wbjoHZE9ZuX", + "author": "yongchanson", + "code": "function solution(price, money, count) {\n var answer = 0;\n let sum = price;\n\n for (i = 2; i <= count; i++) {\n sum += price * i;\n }\n\n if (sum <= money) {\n answer = 0;\n } else {\n answer = sum - money;\n }\n return answer;\n}\n\n", + "probId": "82612" + }, + { + "id": "dyvvJvC_T-CJF2x71HTCQ", + "author": "jaewon1676", + "code": "function solution(price, money, count) {\n let sum_price = 0; // 놀이기구의 이용료의 합\n for (let i = 1; i <= count; i++) {\n sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다.\n }\n if (sum_price <= money) {\n return 0;\n }\n return sum_price - money;\n}\n\n", + "probId": "82612" + }, + { + "id": "DR0j4ZTJS7p36FPW1KGud", + "author": "prove-ability", + "code": "function solution(price, money, count) {\n let sum = 0;\n for(let i = 1; i <= count; i++) {\n sum += (i * price)\n }\n \n return sum < money ? 0 : sum - money;\n}\n\n", + "probId": "82612" + }, + { + "id": "DL1TsuM--PRWhwT-6NTTR", + "author": "chaerin-dev", + "code": "function solution(price, money, count) {\n let totalPrice = 0;\n for(let i=1; i<=count; i++){\n totalPrice += i * price;\n }\n return money > totalPrice ? 0 : totalPrice-money;\n}\n\n", + "probId": "82612" + }, + { + "id": "0xHW5niSbtQFA-NHOYZdA", + "author": "codeisneverodd", + "code": "function solution(word) {\n const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 };\n const price = calculatePrice([1], 5);\n return word\n .split(\"\")\n .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet])\n .reduce((acc, curr) => acc + curr, 0);\n}\nconst calculatePrice = (result = [1], targetLength) => {\n if (result.length === targetLength) return result;\n return calculatePrice([result[0] * 5 + 1, ...result], targetLength);\n};\n/*\n각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까?\n4번째 자리 - 1\n3번째 자리 - 1*5 + 1 = 6\n2번째 자리 - 6*5 + 1 = 31\n1번째 자리 - 31*5 + 1 = 156\n0번째 자리 - 156*5 + 1 = 781\n\n검증(1부터 시작하므로 1 + 비용)\nI => (1 + 781 * 2) = 1563\nEIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189\nAAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10\nAAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6\n추천 레퍼런스: https://seongho96.tistory.com/50\n*/\n", + "probId": "84512" + }, + { + "id": "nsPhxviNXx_kT5M74ya-s", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n var answer = 0;\n for (let i = 0; i < 10; i++) {\n answer += numbers.includes(i) ? 0 : i;\n }\n return answer;\n}\n\n", + "probId": "86051" + }, + { + "id": "J6eLzTS6eX7DjJ2XQ6ala", + "author": "yongchanson", + "code": "function solution(numbers) {\n var answer = -1;\n\n let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let arr_sum = 0;\n let numbers_sum = 0;\n\n for (i = 0; i < arr.length / 2; i++) {\n if (arr[i] == arr[arr.length - 1 - i]) {\n arr_sum += arr[i];\n } else {\n arr_sum += arr[i] + arr[arr.length - 1 - i];\n }\n }\n\n for (i = 0; i < numbers.length; i++) {\n numbers_sum += numbers[i];\n }\n\n answer = arr_sum - numbers_sum;\n return answer;\n}\n\n", + "probId": "86051" + }, + { + "id": "OHpRs55xZu_xUWxVD0a6u", + "author": "prove-ability", + "code": "function solution(numbers) {\n var answer = 0;\n\n for (let i = 0; i < 10; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n\n return answer;\n}\n\n", + "probId": "86051" + }, + { + "id": "19dcxkCwv3HaFz0JR01Mw", + "author": "chaerin-dev", + "code": "function solution(numbers) {\n let answer = 0;\n for (let i = 0; i <= 9; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n return answer;\n}", + "probId": "86051" + }, + { + "id": "M7VGn_6Jo7hwRRjehWeqX", + "author": "minjongbaek", + "code": "\n// 빛의 이동을 위한 DX, DY 변수를 선언합니다.\nconst DX = [-1, 1, 0, 0];\nconst DY = [0, 0, -1, 1];\n\nfunction solution(grid) {\n\n // DFS에 4방향을 고려하여 문제를 풉니다.\n // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다.\n\n const answer = [];\n\n // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]]\n const visited = Array.from({ length: grid.length }, () => []).map((v) => {\n for (let i = 0; i < grid[0].length; i += 1) {\n v.push(new Array(4).fill(false));\n }\n return v\n });\n\n for (let x = 0; x < grid.length; x += 1) {\n for (let y = 0; y < grid[0].length; y += 1) {\n for (let d = 0; d < 4; d += 1) {\n // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다.\n if (!visited[x][y][d]) {\n const stack = [];\n stack.push([x, y, d]);\n\n let cnt = 0;\n while (stack.length !== 0) {\n const [currentX, currentY, currentD] = stack.pop();\n if (!visited[currentX][currentY][currentD]) {\n visited[currentX][currentY][currentD] = true;\n cnt += 1;\n\n const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다.\n const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다.\n \n stack.push([nextX, nextY, nextD])\n }\n\n }\n answer.push(cnt);\n }\n }\n }\n }\n return answer.sort((a, b) => a - b);\n}\n\n// 다음 행선지를 구하는 함수\nfunction getNextXY(x, y, d, xLength, yLength) {\n x += DX[d];\n y += DY[d];\n\n // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다.\n if (x < 0) x = xLength - 1;\n if (x >= xLength) x = 0;\n if (y < 0) y = yLength - 1;\n if (y >= yLength) y = 0;\n\n return [x, y];\n}\n\n// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수\nfunction getNextD(command, d) {\n if (command === 'L') {\n d = [2, 3, 1, 0][d]\n } else if (command === 'R') {\n d = [3, 2, 0, 1][d]\n }\n return d\n}\n", + "probId": "86052" + }, + { + "id": "OCnmAxjoeOKOd5M83auiw", + "author": "prove-ability", + "code": "function solution(sizes) {\n // 가로, 세로 중 큰 값을 가로 길이로 변경(스압)\n sizes.forEach(([width, height], index) => {\n if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]];\n });\n\n // 가로, 세로 각각 큰 값 추출\n const widthMax = Math.max(...sizes.map(v => v[0]));\n const widthHeight = Math.max(...sizes.map(v => v[1]));\n\n return widthMax * widthHeight;\n}\n//정답 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(sizes) {\n for (let card of sizes) {\n if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]];\n }\n\n const maxWidth = Math.max(...sizes.map(card => card[0]));\n const maxHeight = Math.max(...sizes.map(card => card[1]));\n return maxWidth * maxHeight;\n}\n", + "probId": "86491" + }, + { + "id": "n0OtioLl0J3ebor51ilCv", + "author": "codeisneverodd", + "code": "function solution(n, wires) {\n const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b);\n\n const convertWiresToTree = wires => [...new Set(wires.flat())];\n\n const generateTree = (wires, tree) => {\n if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree;\n\n const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire));\n const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))];\n\n return [...new Set(generateTree(nextWires, nextTree))];\n };\n\n let minDiff = Infinity;\n const length = convertWiresToTree(wires).length;\n\n wires.forEach((_, i) => {\n const [initWire, ...remainWires] = wires.filter((_, j) => j !== i);\n const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length;\n const diff = Math.abs(lengthA - (length - lengthA));\n minDiff = Math.min(diff, minDiff);\n });\n\n return minDiff;\n}\n", + "probId": "86971" + }, + { + "id": "3AMMuG2wA7mC_uK9vF45o", + "author": "codeisneverodd", + "code": "function solution(line) {\n const getCrossPoint = ([A, B, E], [C, D, F]) => {\n if (A * D - B * C === 0) return [Infinity, Infinity];\n return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)];\n }; //문제 설명 최하단 참조\n\n const crossPoints = line.flatMap((lineA, i) =>\n line\n .slice(i + 1)\n .map(lineB => getCrossPoint(lineA, lineB))\n .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y))\n );\n\n const generateCanvas = crossPoints => {\n const xPoints = [...crossPoints.map(([x, y]) => x)];\n const yPoints = [...crossPoints.map(([x, y]) => y)];\n const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)];\n const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)];\n const xLength = Math.abs(maxX - minX) + 1;\n const yLength = Math.abs(maxY - minY) + 1;\n\n return {\n canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')),\n draw([x, y], value) {\n this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value;\n },\n print() {\n return this.canvas.map(row => row.join(''));\n },\n };\n };\n\n const canvas = generateCanvas(crossPoints);\n\n crossPoints.forEach(point => {\n canvas.draw(point, '*');\n });\n\n return canvas.print();\n}\n", + "probId": "87377" + }, + { + "id": "Lr1-3pilHfPrXHpMHFK_U", + "author": "prove-ability", + "code": "function solution(n) {\n var answer = 0;\n let i = 0;\n while(true) {\n if(n % i === 1) {\n answer = i;\n break;\n }\n i++;\n }\n return answer;\n}\n\n", + "probId": "87389" + }, + { + "id": "gSiNerqUYWURZE5ZEI4uf", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = 0;\n for (let i=1; i minNeededFatigue <= currentFatigue);\n if (possibleDungeons.length === 0) return visitedCount;\n\n const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => {\n const [_, usedFatigue] = curr;\n const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex);\n const currentCount = getMaxCount(\n currentFatigue - usedFatigue,\n visitedCount + 1,\n nextDungeons\n );\n return Math.max(currentCount, prevCount);\n }, 0);\n\n return maxCount;\n}\n\n\n\n", + "probId": "87946" + }, + { + "id": "VvZy92A9uO87EvDmTYfkt", + "author": "jaewon1676", + "code": "function solution(id_list, report, k) {\n let answer = new Array(id_list.length).fill(0);\n let report_list = {}; // 신고당한 ID\n\n // key, value 형식의 report_list 객체를 만든다.\n id_list.map(user => {\n report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체\n });\n // report_list { muzi: [], frodo: [], apeach: [], neo: [] }\n\n // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다.\n report.map(user => {\n const [user_id, report_id] = user.split(' ');\n // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다.\n if (!report_list[report_id].includes(user_id)) {\n report_list[report_id].push(user_id);\n // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다.\n }\n });\n for (const key in report_list) {\n // report_list의 index 순회\n if (report_list[key].length >= k) {\n report_list[key].map(user => {\n answer[id_list.indexOf(user)] += 1;\n });\n }\n }\n return answer;\n}\n\n", + "probId": "92334" + }, + { + "id": "5zrHxl5vLopStaWFq6wYV", + "author": "prove-ability", + "code": "function solution(id_list, report, k) {\n // 사용자 길이의 빈 배열을 만든다 0\n var answer = new Array(id_list.length).fill(0);\n // 신고된 내용 정리할 객체 선언\n const obj = {};\n // 신고된 내용 정리할 객체 사용자 아이디로 초기화\n id_list.forEach(id => {\n obj[id] = new Set();\n });\n // 신고 리스트를 조회하며 신고 내용 객체에 정리\n // set.add 를 활용해 같은 사용자의 중복 신고 제거\n report.forEach(str => {\n const [reporter, target] = str.split(' ');\n obj[target].add(reporter);\n });\n // obj value 하나씩 접근\n for (const value of Object.values(obj)) {\n // 신고당한 횟수가 정지 기준에 적합하다면\n if (value.size >= k) {\n // 해당 유저를 신고한 사람들\n for (let item of value) {\n // 인덱스 구해서 증가\n let index = id_list.indexOf(item);\n answer[index]++;\n }\n }\n }\n\n return answer;\n}\n\n", + "probId": "92334" + }, + { + "id": "QYE52Bx6qcuF9FEKzkeev", + "author": "prove-ability", + "code": "function solution(id_list, report, k) {\n // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기\n var answer = Array.from({ length: id_list.length }).fill(0);\n // 신고 내용 객체 초기화 - 신고된 내용 정리\n const reportObj = {};\n // 신고건 반복문으로 하나씩 접근\n for (let i = 0, len = report.length; i < len; i++) {\n const [userId, reportUserId] = report[i].split(' ');\n // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가\n if (reportObj[reportUserId]) {\n if (!reportObj[reportUserId].includes(userId)) {\n reportObj[reportUserId] = [...reportObj[reportUserId], userId];\n }\n // 신고 내용 객체에 신고당한 사람이 없다면 추가\n } else reportObj[reportUserId] = [userId];\n }\n // 만들어진 신고 내용 객체로 반복적으로 접근\n for (const item of Object.values(reportObj)\n .filter(v => v.length >= k)\n .flatMap(v => v)) {\n // 인덱스로 접근해 메일 카운트 증가\n const index = id_list.findIndex(v => v === item);\n answer[index]++;\n }\n\n return answer;\n}\n\n", + "probId": "92334" + }, + { + "id": "MpqPHzD7ZEtTTVMmPc85b", + "author": "chaerin-dev", + "code": "function solution(id_list, report, k) {\n // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리\n let set = new Set(report);\n report = Array.from(set);\n\n // 1. report를 2차원배열로 변형\n // 2. 각 유저가 신고당한 횟수 cnt에 저장\n // 3. 각 유저를 신고한 유저 who에 저장\n let cnt = Array.from({ length: id_list.length }, i => 0);\n let who = Array.from({ length: id_list.length }, i => []);\n for (let i = 0; i < report.length; i++) {\n report[i] = report[i].split(' ');\n cnt[id_list.indexOf(report[i][1])]++;\n who[id_list.indexOf(report[i][1])].push(report[i][0]);\n }\n\n // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장\n let mail = Array.from({ length: id_list.length }, i => 0);\n for (let i = 0; i < cnt.length; i++) {\n if (cnt[i] < k) continue;\n for (let j = 0; j < who[i].length; j++) {\n mail[id_list.indexOf(who[i][j])]++;\n }\n }\n return mail;\n}\n//정답 6(🎩 refactor 220425) - codeisneverodd\nfunction solution(id_list, report, k) {\n //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장,\n //각 id를 신고한 사람 array를 reportedBy에 저장,\n //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장\n //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장.\n const reportSet = new Set(report);\n const reportedCount = {}; //{\"id\": Number(count)}\n const reportedBy = {}; //{\"id\":[]}\n const mailCount = {}; //{\"id\":Number(count)}\n\n id_list.forEach(element => {\n reportedCount[element] = 0;\n mailCount[element] = 0;\n reportedBy[element] = [];\n });\n\n reportSet.forEach(element => {\n const [id, reported] = element.split(' ');\n reportedCount[reported] += 1;\n reportedBy[reported].push(id);\n });\n\n for (const reportedId in reportedCount) {\n if (reportedCount[reportedId] >= k) {\n reportedBy[reportedId].forEach(reporter => {\n mailCount[reporter] += 1;\n });\n }\n }\n return id_list.map(id => mailCount[id]);\n}\n", + "probId": "92334" + }, + { + "id": "-1rwNGDKeKcZcNF2b8NBo", + "author": "minjongbaek", + "code": "function isPrime(number) { // 소수를 판별하는 함수\n if (number < 2) return false;\n for (let i = 2; i * i <= number; i += 1) {\n if (number % i === 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction solution(n, k) {\n // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만,\n // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다.\n // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다.\n\n // (n).toString(k) // n을 k진수로 변환합니다.\n // .split('0') // 0을 기준으로 나눕니다.\n // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다.\n return (n).toString(k).split('0').filter((number) => isPrime(+number)).length;\n}", + "probId": "92335" + }, + { + "id": "sUDonIHVdTj1KyxZbPNa8", + "author": "ljw0096", + "code": "\nfunction solution(fees, records) {\n const answer = []\n\n const parkingTable = getParkingTable(records)\n const sortedKeys = Object.keys(parkingTable).sort()\n\n for (const targetCar of sortedKeys) {\n if (parkingTable[targetCar].length % 2 === 1) {\n parkingTable[targetCar].push(['23:59', 'OUT'])\n }\n const totalTime = getTotalTime(parkingTable, targetCar)\n const fee = calculateFee(totalTime, fees)\n answer.push(fee)\n }\n\n return answer\n}\n\nfunction getParkingTable(records) {\n const parkingTable = {}\n\n records.forEach((val) => {\n const info = val.split(' ')\n if (Object.keys(parkingTable).includes(info[1])) {\n parkingTable[info[1]].push([info[0], info[2]])\n } else {\n parkingTable[info[1]] = [[info[0], info[2]]]\n }\n })\n\n return parkingTable\n}\n\nfunction getTotalTime(parkingTable, targetCar) {\n let totalTime = 0\n for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) {\n totalTime += calculateTotalTime(\n parkingTable[targetCar][i][0],\n parkingTable[targetCar][i + 1][0]\n )\n }\n return totalTime\n}\n\nfunction calculateTotalTime(time1, time2) {\n const [hour1, minute1] = time1.split(':').map((val) => parseInt(val))\n const [hour2, minute2] = time2.split(':').map((val) => parseInt(val))\n\n return hour2 * 60 + minute2 - (hour1 * 60 + minute1)\n}\n\nfunction calculateFee(totalTime, feeInfo) {\n let fee = 0\n if (feeInfo[0] >= totalTime) {\n fee = feeInfo[1]\n } else {\n fee =\n feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3]\n }\n return fee\n}\n", + "probId": "92341" + }, + { + "id": "XoxTMjsv5vhSm2IPcRC2A", + "author": "codeisneverodd", + "code": "// 문제 풀이 전략\n// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다.\n// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다.\n// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다.\n// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다.\n// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다.\n// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다\n// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다.\n// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다.\nfunction solution(possibleArrows, apeachComb) {\n const compareTable = apeachComb.map(apeachArrow => ({\n apeachArrow,\n ryanArrow: 0,\n }));\n const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows);\n const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff));\n const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff);\n if (maxScoreDiff <= 0) return [-1];\n const getIndexOfLastArrow = arrowTable =>\n arrowTable.length -\n arrowTable\n .slice()\n .reverse()\n .findIndex(x => x !== 0);\n return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable;\n}\nfunction getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) {\n const { apeachArrow } = compareTable[currentIndex];\n const lastIndex = compareTable.length - 1;\n const possibleRyanArrows = [\n 0,\n numberOfArrowLeft > apeachArrow && apeachArrow + 1,\n numberOfArrowLeft >= apeachArrow && apeachArrow,\n ];\n\n if (currentIndex === lastIndex || numberOfArrowLeft === 0) {\n if (numberOfArrowLeft > 0) {\n compareTable[compareTable.length - 1] = {\n apeachArrow,\n ryanArrow: numberOfArrowLeft,\n };\n }\n const appeachScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) =>\n apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc,\n 0\n );\n const ryanScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc),\n 0\n );\n return [\n {\n scoreDiff: ryanScore - appeachScore,\n ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow),\n },\n ];\n }\n return [\n ...possibleRyanArrows.flatMap(ryanUsedArrow => {\n const nextCompareTable = [...compareTable];\n nextCompareTable.splice(currentIndex, 1, {\n apeachArrow,\n ryanArrow: ryanUsedArrow,\n });\n return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow);\n }),\n ];\n}\n", + "probId": "92342" + } + ] +} diff --git a/build/run.js b/build/run.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/build/run.js @@ -0,0 +1 @@ +export {}; diff --git "a/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" "b/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 59% rename from "level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" rename to "build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 24affdc..5482f35 100644 --- "a/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" +++ "b/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(num_list, n) { let result = []; for (let i = 0; i < num_list.length / n; i++) { diff --git "a/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" new file mode 100644 index 0000000..d92af68 --- /dev/null +++ "b/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(order) { + return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length; +} diff --git "a/build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..699a5a4 --- /dev/null +++ "b/build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(array) { + return [...array.join('')].filter(a => a === '7').length; +} diff --git "a/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" "b/build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 58% rename from "level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" rename to "build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 2077ea2..d3dfa7f 100644 --- "a/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" +++ "b/build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(before, after) { const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); return sort(before) === sort(after) ? 1 : 0; diff --git "a/level-0/OX\355\200\264\354\246\210&120907&.js" "b/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" similarity index 55% rename from "level-0/OX\355\200\264\354\246\210&120907&.js" rename to "build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" index f28d23e..3723803 100644 --- "a/level-0/OX\355\200\264\354\246\210&120907&.js" +++ "b/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(quiz) { return quiz.map(q => { const [formula, answer] = q.split('='); diff --git "a/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" "b/build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" similarity index 57% rename from "level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" rename to "build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" index cebb90d..405a2fd 100644 --- "a/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" +++ "b/build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(i, j, k) { let count = 0; for (let num = i; num <= j; num++) { diff --git "a/build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..4209c3e --- /dev/null +++ "b/build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(n, numlist) { + return numlist.filter(num => num % n === 0); +} diff --git "a/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" "b/build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" similarity index 58% rename from "level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" rename to "build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" index ee4c433..57be8dd 100644 --- "a/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" +++ "b/build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(array, n) { const minDiff = Math.min(...array.map(a => Math.abs(a - n))); return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff); diff --git "a/build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" new file mode 100644 index 0000000..ecb5b86 --- /dev/null +++ "b/build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" @@ -0,0 +1,4 @@ +function solution(rsp) { + const win = { 0: 5, 2: 0, 5: 2 }; + return [...rsp].map(num => win[num]).join(''); +} diff --git "a/build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..030cc7c --- /dev/null +++ "b/build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" @@ -0,0 +1,4 @@ +function solution(array) { + const max = Math.max(...array); + return [max, array.indexOf(max)]; +} diff --git "a/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" "b/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" similarity index 51% rename from "level-0/\352\260\201\353\217\204\352\270\260&120829&.js" rename to "build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" index e21ec41..e6b6797 100644 --- "a/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" +++ "b/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(angle) { if (angle === 180) return 4; if (angle > 90) return 3; diff --git "a/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" "b/build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" similarity index 60% rename from "level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" rename to "build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" index 9624393..f6af630 100644 --- "a/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" +++ "b/build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(hp) { const first = Math.floor(hp / 5); const second = Math.floor((hp - first * 5) / 3); diff --git "a/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" "b/build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" similarity index 67% rename from "level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" rename to "build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" index df5f34e..07ba70e 100644 --- "a/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" +++ "b/build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(lines) { const visited = lines.reduce((a, [x, y]) => { for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1; diff --git "a/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" "b/build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" similarity index 61% rename from "level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" rename to "build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" index ecb6380..4db3521 100644 --- "a/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" +++ "b/build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(numbers, k) { const goNext = current => (current + 2) % numbers.length; let current = 0; diff --git "a/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" "b/build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" similarity index 64% rename from "level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" rename to "build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" index bdcfcf3..40bc29a 100644 --- "a/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" +++ "b/build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(balls, share) { const [n, m] = [balls, share]; const fact = [BigInt(1), BigInt(1)]; diff --git "a/build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..471bd94 --- /dev/null +++ "b/build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num1, num2) { + return num1 % num2; +} diff --git "a/build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" "b/build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" new file mode 100644 index 0000000..31c9260 --- /dev/null +++ "b/build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(age) { + return 2022 - age + 1; +} diff --git "a/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" "b/build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" similarity index 64% rename from "level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" rename to "build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" index 9c6f012..4c69c58 100644 --- "a/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" +++ "b/build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(common) { const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0]; return isAP(common) diff --git "a/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" "b/build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" similarity index 80% rename from "level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" rename to "build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" index f243aef..03de0fb 100644 --- "a/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" +++ "b/build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(polynomial) { const countX = x => { const count = x.replaceAll('x', ''); diff --git "a/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" "b/build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220/codeisneverodd.js" similarity index 54% rename from "level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" rename to "build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220/codeisneverodd.js" index b7c8a5c..cea4347 100644 --- "a/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" +++ "b/build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(my_string) { return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join(''); } \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" new file mode 100644 index 0000000..5446c6a --- /dev/null +++ "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num1, num2) { + return num1 * num2; +} diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" new file mode 100644 index 0000000..cd5418a --- /dev/null +++ "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num1, num2) { + return Math.floor((num1 / num2) * 1000); +} diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" new file mode 100644 index 0000000..456a44d --- /dev/null +++ "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num1, num2) { + return num1 - num2; +} diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" new file mode 100644 index 0000000..8ab1a1f --- /dev/null +++ "b/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num1, num2) { + return num1 + num2 +} \ No newline at end of file diff --git "a/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" "b/build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" similarity index 74% rename from "level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" rename to "build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" index 5c01af3..ad80462 100644 --- "a/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" +++ "b/build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(score) { const avgs = score.map(([a, b]) => (a + b) / 2); const avgRank = [...avgs] diff --git "a/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" "b/build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" similarity index 61% rename from "level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" rename to "build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" index 82f42d8..0f4877c 100644 --- "a/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" +++ "b/build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(id_pw, db) { const [id, pw] = id_pw; if (!db.find(([_id]) => _id === id)) return 'fail'; diff --git "a/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" "b/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" new file mode 100644 index 0000000..8e53237 --- /dev/null +++ "b/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(array, height) { + return array.filter(a => a > height).length; +} diff --git "a/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" "b/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" similarity index 76% rename from "level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" rename to "build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" index 032c628..e89a61e 100644 --- "a/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" +++ "b/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(letter) { const morse = { '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f', diff --git "a/build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" "b/build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" new file mode 100644 index 0000000..bbbe8c5 --- /dev/null +++ "b/build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(my_string) { + return my_string.replace(/[aeiou]/g, ''); +} diff --git "a/build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..d15a720 --- /dev/null +++ "b/build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num1, num2) { + return Math.floor(num1 / num2); +} diff --git "a/build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..44bbf33 --- /dev/null +++ "b/build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(my_string, n) { + return [...my_string].map(char => char.repeat(n)).join(''); +} diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..50bd5cc --- /dev/null +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(my_string) { + return eval(my_string); +} diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..bc890f0 --- /dev/null +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(my_string) { + return [...my_string].reverse().join(''); +} diff --git "a/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" similarity index 64% rename from "level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" index 03a03b5..6468be1 100644 --- "a/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(A, B) { const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join(''); for (let i = 0; i <= A.length; i++) { diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" new file mode 100644 index 0000000..af7729e --- /dev/null +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" @@ -0,0 +1,6 @@ +function solution(my_string) { + return my_string + .match(/[0-9]/g) + .map(str => +str) + .sort((a, b) => a - b); +} diff --git "a/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" similarity index 56% rename from "level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" index ac952aa..4050cb3 100644 --- "a/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(my_string) { return [...my_string] .map(char => char.toLowerCase()) diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" new file mode 100644 index 0000000..ea9090a --- /dev/null +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(str1, str2) { + return str1.includes(str2) ? 1 : 2; +} diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..9268c20 --- /dev/null +++ "b/build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(numbers) { + return numbers.map(n => n * 2); +} diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..2be0b8d --- /dev/null +++ "b/build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num_list) { + return num_list.reverse(); +} diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" new file mode 100644 index 0000000..4c06f2e --- /dev/null +++ "b/build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(strlist) { + return strlist.map(s => s.length); +} diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..cd58694 --- /dev/null +++ "b/build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(numbers, num1, num2) { + return numbers.slice(num1, num2 + 1); +} diff --git "a/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" "b/build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" similarity index 60% rename from "level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" rename to "build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" index 711d42b..b9c9a79 100644 --- "a/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(numbers, direction) { return direction === 'right' ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)] diff --git "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" new file mode 100644 index 0000000..1732e52 --- /dev/null +++ "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(s1, s2) { + return s1.filter(s => s2.includes(s)).length; +} diff --git "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" new file mode 100644 index 0000000..2e262da --- /dev/null +++ "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(numbers) { + return numbers.reduce((a, c) => a + c, 0) / numbers.length; +} diff --git "a/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" "b/build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" similarity index 67% rename from "level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" rename to "build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" index 1b66e1a..475ded2 100644 --- "a/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" +++ "b/build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(denum1, num1, denum2, num2) { const denum = denum2 * num1 + denum1 * num2; const num = num1 * num2; diff --git "a/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" similarity index 50% rename from "level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" rename to "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" index 17ff2b2..79b9622 100644 --- "a/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" +++ "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(sides) { const max = Math.max(...sides); return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2; diff --git "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" new file mode 100644 index 0000000..58761b3 --- /dev/null +++ "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(sides) { + return Math.min(...sides) * 2 - 1; +} diff --git "a/build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" "b/build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" new file mode 100644 index 0000000..77a9bc3 --- /dev/null +++ "b/build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(n, t) { + return n * 2 ** t; +} diff --git "a/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" "b/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" similarity index 81% rename from "level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" rename to "build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" index 7540490..14b4d29 100644 --- "a/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" +++ "b/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { let pFactors = []; for (let i = 2; i <= Math.sqrt(n); i++) { diff --git "a/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" "b/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" similarity index 59% rename from "level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" rename to "build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" index 99ee6e6..b3fd964 100644 --- "a/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" +++ "b/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { let count = 0; for (let i = 1; i < Math.sqrt(n); i++) { diff --git "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" new file mode 100644 index 0000000..6836f7d --- /dev/null +++ "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(my_string) { + return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0); +} diff --git "a/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" similarity index 54% rename from "level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" rename to "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" index 8efbb5a..ff760aa 100644 --- "a/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" +++ "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(my_string) { const nums = my_string.match(/[0-9]+/g); return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0; diff --git "a/build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..5d38198 --- /dev/null +++ "b/build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num1, num2) { + return num1 === num2 ? 1 : -1; +} diff --git "a/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" "b/build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" similarity index 50% rename from "level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" rename to "build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" index 6a64cfe..6c5f022 100644 --- "a/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" +++ "b/build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(num, k) { const index = [...('' + num)].findIndex(n => +n === k); return index === -1 ? -1 : index + 1; diff --git "a/build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" "b/build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" new file mode 100644 index 0000000..2570aca --- /dev/null +++ "b/build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(money) { + return [Math.floor(money / 5500), money % 5500]; +} diff --git "a/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" "b/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" similarity index 82% rename from "level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" rename to "build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" index b675974..e103c21 100644 --- "a/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" +++ "b/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(board) { const isBombNearby = (r, c) => { const nearby = [ diff --git "a/build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" "b/build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" new file mode 100644 index 0000000..94fd584 --- /dev/null +++ "b/build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(cipher, code) { + return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), ''); +} diff --git "a/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" "b/build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 67% rename from "level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" rename to "build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" index 4cbd275..88c9708 100644 --- "a/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" +++ "b/build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { let answer = []; for (let i = 1; i < Math.sqrt(n); i++) { diff --git "a/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" "b/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" new file mode 100644 index 0000000..6e95d1a --- /dev/null +++ "b/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(n, k) { + return n * 12000 + (k - Math.floor(n / 10)) * 2000; +} diff --git "a/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" "b/build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" similarity index 60% rename from "level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" rename to "build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" index f67702e..47c6a11 100644 --- "a/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" +++ "b/build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(num, total) { const numArr = Array.from({ length: num }, (_, i) => i); const sum = numArr.reduce((a, c) => a + c); diff --git "a/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" "b/build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" similarity index 67% rename from "level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" rename to "build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" index eb1f8c6..8363892 100644 --- "a/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" +++ "b/build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(numbers) { const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 }; const regex = new RegExp(Object.keys(nums).join('|'), 'g'); diff --git "a/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" "b/build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" similarity index 62% rename from "level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" rename to "build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" index 0fbd920..d354f14 100644 --- "a/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" +++ "b/build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(price) { if (price >= 500000) return Math.floor(price * 0.8); if (price >= 300000) return Math.floor(price * 0.9); diff --git "a/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" "b/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" similarity index 78% rename from "level-0/\354\230\271\354\225\214\354\235\264&120956&.js" rename to "build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" index a8bfecb..dd68691 100644 --- "a/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" +++ "b/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(babbling) { const convertPWordsToNum = word => { const pWords = ['aya', 'ye', 'woo', 'ma']; diff --git "a/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" "b/build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" similarity index 60% rename from "level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" rename to "build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" index 505e556..b403da1 100644 --- "a/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" +++ "b/build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(spell, dic) { const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2; diff --git "a/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264/codeisneverodd.js" new file mode 100644 index 0000000..fc7a928 --- /dev/null +++ "b/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(age) { + return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join(''); +} \ No newline at end of file diff --git "a/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" "b/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" similarity index 81% rename from "level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" rename to "build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" index fe8b4f7..7379134 100644 --- "a/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" +++ "b/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(a, b) { const getGCD = (a, b) => { let gcd = 1; diff --git "a/build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..53f9e12 --- /dev/null +++ "b/build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(bin1, bin2) { + return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2); +} diff --git "a/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" "b/build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" similarity index 54% rename from "level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" rename to "build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" index 176b728..342dd09 100644 --- "a/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" +++ "b/build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(my_string, num1, num2) { const str = [...my_string]; diff --git "a/build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..d425f0e --- /dev/null +++ "b/build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(n) { + return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0); +} diff --git "a/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" "b/build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" similarity index 57% rename from "level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" rename to "build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" index a854dc6..b607d24 100644 --- "a/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" +++ "b/build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(my_str, n) { let result = []; for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)]; diff --git "a/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" "b/build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" similarity index 58% rename from "level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" rename to "build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" index 8e1f33a..886e3ce 100644 --- "a/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" +++ "b/build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { let num = 0; let count = 0; diff --git "a/build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..2f3bf31 --- /dev/null +++ "b/build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,5 @@ +function solution(dot) { + const [x, y] = dot; + if (y > 0) return x > 0 ? 1 : 2; + return x < 0 ? 3 : 4; +} diff --git "a/build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..57a0e8f --- /dev/null +++ "b/build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(n) { + return Number.isInteger(Math.sqrt(n)) ? 1 : 2; +} diff --git "a/build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..80a1c07 --- /dev/null +++ "b/build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(M, N) { + return M * N - 1; +} diff --git "a/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..c8b3d79 --- /dev/null +++ "b/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(box, n) { + return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n); +} diff --git "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" new file mode 100644 index 0000000..0099921 --- /dev/null +++ "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(my_string) { + return [...new Set(my_string)].join(''); +} diff --git "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..b07a5fb --- /dev/null +++ "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(array, n) { + return array.filter(a => a === n).length; +} diff --git "a/build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..f782bbd --- /dev/null +++ "b/build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(array) { + return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]; +} diff --git "a/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" "b/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" similarity index 71% rename from "level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" rename to "build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" index 9563816..b8a9b9c 100644 --- "a/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" +++ "b/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, diff --git "a/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" "b/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 67% rename from "level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" rename to "build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" index dc022c9..c7508d7 100644 --- "a/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" +++ "b/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(dots) { const xDots = dots.flatMap(([x, y]) => x); const yDots = dots.flatMap(([x, y]) => y); diff --git "a/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" "b/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" similarity index 55% rename from "level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" rename to "build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" index 6efc72e..46d02b0 100644 --- "a/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" +++ "b/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(emergency) { const sorted = [...emergency].sort((a, b) => b - a); return emergency.map(e => sorted.findIndex(s => s === e) + 1); diff --git "a/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" "b/build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" similarity index 54% rename from "level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" rename to "build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" index 3312f99..aeabe7a 100644 --- "a/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" +++ "b/build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(num_list) { const evenLength = num_list.filter(n => n % 2 === 0).length; return [evenLength, num_list.length - evenLength]; diff --git "a/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" "b/build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" similarity index 52% rename from "level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" rename to "build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" index e308d35..181171d 100644 --- "a/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" +++ "b/build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { let nums = []; for (let i = 0; i <= n; i++) { diff --git "a/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" "b/build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" similarity index 51% rename from "level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" rename to "build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" index 8c6c310..d03dff6 100644 --- "a/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" +++ "b/build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { let answer = 0; for (let i = 0; i <= n; i++) { diff --git "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" new file mode 100644 index 0000000..ed1e14e --- /dev/null +++ "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" @@ -0,0 +1,4 @@ +function solution(numbers) { + const [first, second, ...rest] = numbers.sort((a, b) => b - a); + return first * second; +} diff --git "a/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" similarity index 58% rename from "level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" rename to "build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" index 62a9b75..df18bad 100644 --- "a/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" +++ "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(numbers) { const sorted = numbers.sort((a, b) => a - b); return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]); diff --git "a/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" "b/build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 70% rename from "level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" rename to "build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" index 5682839..af187ff 100644 --- "a/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" +++ "b/build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(array) { const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); const max = Math.max(...Object.values(counts)); diff --git "a/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" "b/build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" similarity index 64% rename from "level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" rename to "build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" index 52ed4f4..3ddb663 100644 --- "a/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" +++ "b/build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(chicken) { const order = coupons => { if (coupons < 10) return 0; diff --git "a/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" "b/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" new file mode 100644 index 0000000..4fb32c1 --- /dev/null +++ "b/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" @@ -0,0 +1,22 @@ +//명령형 +function solution(keyinput, board) { + const moves = { + up: [0, 1], + down: [0, -1], + left: [-1, 0], + right: [1, 0], + }; + const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; + + let pos = [0, 0]; + + keyinput + .map(key => moves[key]) + .forEach(move => { + if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return; + pos[0] += move[0]; + pos[1] += move[1]; + }); + + return pos; +} diff --git "a/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" "b/build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" similarity index 58% rename from "level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" rename to "build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" index eb35f6f..2b81e1c 100644 --- "a/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" +++ "b/build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(s) { const arr = s.split(' '); while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2); diff --git "a/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" "b/build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" similarity index 61% rename from "level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" rename to "build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" index 8422a58..d89fc4c 100644 --- "a/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" +++ "b/build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(numlist, n) { return numlist.sort((a, b) => { const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)]; diff --git "a/build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..7c98d35 --- /dev/null +++ "b/build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(my_string, letter) { + return my_string.replaceAll(letter, ''); +} diff --git "a/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" "b/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" similarity index 64% rename from "level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" rename to "build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" index d888302..6581749 100644 --- "a/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" +++ "b/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { let factorial = [1, 1]; for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i; diff --git "a/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" "b/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" new file mode 100644 index 0000000..d2b45a3 --- /dev/null +++ "b/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(message) { + return message.length * 2; +} diff --git "a/level-0/\355\217\211\355\226\211&120875&.js" "b/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" similarity index 76% rename from "level-0/\355\217\211\355\226\211&120875&.js" rename to "build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" index b8a3f33..adbb802 100644 --- "a/level-0/\355\217\211\355\226\211&120875&.js" +++ "b/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(dots) { const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity); const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2); diff --git "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" new file mode 100644 index 0000000..c9ffc15 --- /dev/null +++ "b/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(n) { + return Math.floor((n - 1) / 7) + 1; +} diff --git "a/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" "b/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" similarity index 60% rename from "level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" rename to "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" index a0a72c7..a2b7622 100644 --- "a/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" +++ "b/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { const getLCM = (a, b) => { let lcm = 1; diff --git "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" new file mode 100644 index 0000000..3c815ad --- /dev/null +++ "b/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(slice, n) { + return Math.floor((n - 1) / slice) + 1; +} diff --git "a/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" "b/build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" similarity index 67% rename from "level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" rename to "build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" index c22230e..305ff8e 100644 --- "a/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" +++ "b/build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(s) { const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); return Object.keys(count) diff --git "a/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" "b/build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" similarity index 68% rename from "level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" rename to "build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" index 7a9cf4f..b82db9f 100644 --- "a/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" +++ "b/build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { const isPrime = num => { for (let i = 2; i <= Math.sqrt(num); i++) { diff --git "a/build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" new file mode 100644 index 0000000..ea9bc73 --- /dev/null +++ "b/build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" @@ -0,0 +1,3 @@ +function solution(n) { + //정답을 다른 방법으로도 작성했다면 추가해 주세요! +} diff --git "a/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" "b/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" new file mode 100644 index 0000000..5d7b168 --- /dev/null +++ "b/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" @@ -0,0 +1,12 @@ +function solution(a, b) { + let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; + // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수 + let passedDays = 0; + // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌 + for (let i = 1; i < a; i++) passedDays += arr[i]; + // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌 + passedDays += b - 1; + return week[(5 + passedDays) % 7]; +} + diff --git "a/build/solutions/level-1/2016\353\205\204/prove-ability.js" "b/build/solutions/level-1/2016\353\205\204/prove-ability.js" new file mode 100644 index 0000000..fcc6dc0 --- /dev/null +++ "b/build/solutions/level-1/2016\353\205\204/prove-ability.js" @@ -0,0 +1,15 @@ +function solution(a, b) { + var answer = ""; + // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? + const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; + const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + // 2016년 1월 1일은 금요일로 4를 더해준다 + let totalDays = 4; + // a 이전 모든 달의 일 수를 더한다 + for (let i = 0, len = a - 1; i < len; i++) { + totalDays += daysOfMonth[i]; + } + // totalDays 와 해당 일을 더해주고 7로 나눈 나머지 + const dayIndex = (totalDays + b) % 7; + return days[dayIndex]; +} diff --git "a/build/solutions/level-1/2016\353\205\204/yongchanson.js" "b/build/solutions/level-1/2016\353\205\204/yongchanson.js" new file mode 100644 index 0000000..eb80093 --- /dev/null +++ "b/build/solutions/level-1/2016\353\205\204/yongchanson.js" @@ -0,0 +1,15 @@ +function solution(a, b) { + const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + const week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]; + + let sum = b; + for ( + let i = 0; + i < a - 1; + i++ //ex)5월인 경우 1~4월까지 더해준다. + ) + sum += month[i]; + + return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다. +} + diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..5009283 --- /dev/null +++ "b/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" @@ -0,0 +1,17 @@ +function solution(n) { + var answer = 0; + const ternaryReversed = decimalToTernaryReversed(n); + answer = parseInt(ternaryReversed, 3); + return answer; +} + +const decimalToTernaryReversed = (num) => { + let ternary = ""; + while (num >= 3) { + ternary += (num % 3).toString(); + num = Math.floor(num / 3); + } + ternary += num.toString(); + return ternary; +}; + diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" "b/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..52360c0 --- /dev/null +++ "b/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" @@ -0,0 +1,7 @@ +function solution(n) { + var answer = n.toString(3).split("").reverse().join(""); + + return parseInt(answer, 3); +} + + diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" "b/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" new file mode 100644 index 0000000..e15f522 --- /dev/null +++ "b/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" @@ -0,0 +1,3 @@ +function solution(n) { + return parseInt(n.toString(3).split("").reverse().join(""), 3) +} diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" new file mode 100644 index 0000000..5632b2a --- /dev/null +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" @@ -0,0 +1,13 @@ +function solution(array, commands) { + let t = commands.length; + let answer = []; + while (t--) { + let command = commands.shift(); + answer.push( + array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[ + command[2] - 1 + ] + ); + } + return answer; +} diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" new file mode 100644 index 0000000..acd9243 --- /dev/null +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" @@ -0,0 +1,11 @@ + +function solution(array, commands) { + let answer = []; + for (let i = 0; i < commands.length; i++) { + let eachCommand = commands[i]; + let slice = array.slice(eachCommand[0] - 1, eachCommand[1]); + answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]); + } + return answer; +} + diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" new file mode 100644 index 0000000..101242d --- /dev/null +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" @@ -0,0 +1,13 @@ +function solution(array, commands) { + var result = []; + var temp = []; + for (var i = 0; i < commands.length; i++) { + temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => { + return a - b; + }); + console.log(temp); + result.push(temp[commands[i][2] - 1]); + } + return result; +} + diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" new file mode 100644 index 0000000..5a3c5cb --- /dev/null +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" @@ -0,0 +1,9 @@ +function solution(array, commands) { + var answer = []; + commands.forEach(([i, j, k]) => { + const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1]; + answer.push(su); + }); + return answer; +} + diff --git "a/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" "b/build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" similarity index 56% rename from "level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" rename to "build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" index 92a9564..dd38907 100644 --- "a/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" +++ "b/build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" @@ -1,31 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(dartResult) { - const regex = /\d{1,2}[SDT]{1}[*|#]?/g; - let result = []; - for (const dart of dartResult.match(regex)) { - const game = [...dart.split(/([SDT]{1})/)]; - const score = game[0]; - let bonus = 1; - let option = 1; - if (game[1] === "S") bonus = 1; - if (game[1] === "D") bonus = 2; - if (game[1] === "T") bonus = 3; - - if (game[2] === "*") { - if (result.length !== 0) result[result.length - 1] *= 2; - option = 2; - } - if (game[2] === "#") option = -1; - - result.push(score ** bonus * option); - } - - return result.reduce((a, b) => a + b); -} - -//정답 2 - jaewon1676 function solution(dartResult) { var answer = 0; let score = 0; diff --git "a/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" "b/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" new file mode 100644 index 0000000..00b7f0e --- /dev/null +++ "b/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" @@ -0,0 +1,24 @@ +function solution(n, arr1, arr2) { + var answer = []; + let mapA = []; + let mapB = []; + for (let i = 0; i < n; i++) { + let rowArrA = arr1[i].toString(2).split(""); + let rowArrB = arr2[i].toString(2).split(""); + for (let j = 0, len = rowArrA.length; j < n - len; j++) + rowArrA.unshift("0"); + for (let j = 0, len = rowArrB.length; j < n - len; j++) + rowArrB.unshift("0"); + mapA.push(rowArrA); + mapB.push(rowArrB); + } + let answer2D = mapA.slice(); + for (let i = 0; i < n; i++) { + for (let j = 0; j < n; j++) { + answer2D[i][j] = mapA[i][j] === "0" && mapB[i][j] === "0" ? " " : "#"; + } + } + answer = answer2D.map((row) => row.join("")); + return answer; +} + diff --git "a/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" "b/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" new file mode 100644 index 0000000..a1ff0c4 --- /dev/null +++ "b/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" @@ -0,0 +1,22 @@ +function solution(n, arr1, arr2) { + let answer = []; + for (let i = 0; i < n; i++) { + let temp = (arr1[i] | arr2[i]).toString(2); + let line = []; // 한 행의 모든 2진수 보관 + + for (let j = temp.length - n; j < temp.length; j++) { + if (temp[j] == 1) { + line.push("#"); + } else { + line.push(" "); + } + } + answer.push(line.join("")); + } + return answer; +} + +/* 풀이 과정 +1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다. +2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다. +3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/ diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" "b/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" new file mode 100644 index 0000000..da131d6 --- /dev/null +++ "b/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" @@ -0,0 +1,11 @@ +function solution(x, n) { + var answer = []; + let add_gap = x; + // n번 반복 + for (let i = 0; i < n; i++) { + answer.push(x); // 처음 배열에 넣을 x + x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가 + } + return answer; +} + diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" "b/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" new file mode 100644 index 0000000..8e83739 --- /dev/null +++ "b/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" @@ -0,0 +1,9 @@ +function solution(n) { + let str = ""; + for (let i = 0; i < n; i++) { + // 삼항 연산자와 +로 문자열을 붙여주어 추가. + i % 2 == 0 ? (str = str + "수") : (str = str + "박"); + } + return str; +} + diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" "b/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" new file mode 100644 index 0000000..e3d8eed --- /dev/null +++ "b/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" @@ -0,0 +1,11 @@ +function solution(x, n) { + var answer = []; + let i = 1; + // n개 지니는 리스트를 리턴해야 합니다 + while (answer.length !== n) { + // x부터 시작해 x씩 증가하는 숫자 + answer.push(x * i); + i++; + } + return answer; +} diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..1f427ca --- /dev/null +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" @@ -0,0 +1,6 @@ +function solution(s) { + return s.length % 2 + ? s[parseInt(s.length / 2)] + : s[s.length / 2 - 1] + s[s.length / 2]; +} + diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..93fc145 --- /dev/null +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" @@ -0,0 +1,10 @@ +function solution(s) { + var answer = ''; + + if (s.length % 2 == 0 ) { // 짝수일 경우, + answer = s[s.length / 2 - 1] + s[s.length / 2]; + } else { + answer = s[parseInt(s.length / 2)]; // 홀수일 경우 + } + return answer; +} diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" new file mode 100644 index 0000000..53d44c9 --- /dev/null +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" @@ -0,0 +1,11 @@ +function solution(s) { + var answer = ''; + // 중간 지점 찾기 + const point = Math.floor(s.length / 2); + // 짝수인 경우 - (중간지점 - 1) + 중간지점 + if(s.length % 2 ===0) answer = s[point - 1] + s[point]; + // 홀수인 경우 - 중간지점 + else answer = s[point]; + return answer; +} + diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" new file mode 100644 index 0000000..a983d46 --- /dev/null +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" @@ -0,0 +1,10 @@ +function solution(s) { + var answer = ""; + let L2 = s.length / 2; + + answer = + s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]); + + return answer; +} + diff --git "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" "b/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" new file mode 100644 index 0000000..4cec076 --- /dev/null +++ "b/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" @@ -0,0 +1,7 @@ +function solution(arr) { + // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고, + // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용 + // 첫 번째 요소의 경우 undefined와 비교 + return arr.filter((item, index) => item !== arr[index - 1]); +} + diff --git "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" "b/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" new file mode 100644 index 0000000..441f5fa --- /dev/null +++ "b/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" @@ -0,0 +1,9 @@ +function solution(arr) { + var answer = [arr[0]]; + for (let i = 1; i < arr.length; i++) { + //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다. + answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null; + } + return answer; +} + diff --git "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" "b/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" new file mode 100644 index 0000000..980ab41 --- /dev/null +++ "b/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" @@ -0,0 +1,17 @@ +function solution(arr) { + let answer = []; + // 이중 배열을 사용해서 포인터?를 두 개를 사용한다 + for (let i = 0, len = arr.length - 1; i < len; i++) { + // i 의 다음수를 비교하기 위해 j = (i + 1) + for (let j = i + 1, len = arr.length; j < len; j++) { + // i 와 j 번째 값이 같이 않다면 + if (arr[i] !== arr[j]) { + answer.push(arr[i]); + i = j - 1; + break; + } + } + } + answer.push(arr[arr.length - 1]); + return answer; +} diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" new file mode 100644 index 0000000..98a999b --- /dev/null +++ "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" @@ -0,0 +1,19 @@ +function solution(arr, divisor) { + var answer = []; + arr.forEach((element) => { + element % divisor === 0 ? answer.push(element) : null; + }); + answer.length === 0 ? answer.push(-1) : null; + answer.sort((a, b) => a - b); + return answer; +} + +//정답 3. chaerin-dev +function solution(arr, divisor) { + let answer = []; + arr.forEach((e) => { + if (e % divisor === 0) answer.push(e); + }); + return answer.length ? answer.sort((a, b) => a - b) : [-1]; +} + diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" new file mode 100644 index 0000000..88caaad --- /dev/null +++ "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" @@ -0,0 +1,5 @@ +function solution(arr, divisor) { + var answer = []; + arr.forEach((v) => v % divisor === 0 && answer.push(v)) + return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b); +} diff --git "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..bcf5526 --- /dev/null +++ "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" @@ -0,0 +1,9 @@ +function solution(n) { + var answer = 0; + for (let i=1; i acc + e * b[i], 0); +} diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" "b/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" new file mode 100644 index 0000000..32931ee --- /dev/null +++ "b/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" @@ -0,0 +1,8 @@ +function solution(a, b) { + let answer = 0; + for (let i=0; i a - b); +} + diff --git "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" "b/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" new file mode 100644 index 0000000..4c7380d --- /dev/null +++ "b/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" @@ -0,0 +1,8 @@ +function solution(a, b) { + let answer = 0; + for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { + answer += i; + } + return answer; +} + diff --git "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" "b/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" new file mode 100644 index 0000000..ee4f444 --- /dev/null +++ "b/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" @@ -0,0 +1,12 @@ +function solution(a, b) { + if (b < a){ // b가 a보다 큰 수가 되도록 해준다. + let c = b + b = a + a = c + } + let sum = 0; // 합을 구할 변수 + for (let i=a; i<=b; i++){ + sum += i + } + return sum; +} diff --git "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" "b/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" new file mode 100644 index 0000000..ed0d8c9 --- /dev/null +++ "b/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" @@ -0,0 +1,4 @@ +function solution(a, b) { + return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0); +} + diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" new file mode 100644 index 0000000..80e8b96 --- /dev/null +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" @@ -0,0 +1,11 @@ +function solution(lottos, win_nums) { + let zeroCount = 0; + let winCount = 0; + lottos.forEach((item) => { + if (item === 0) zeroCount++; + else if (win_nums.includes(item)) winCount++; + }); + let maxRank = Math.min(7 - (winCount + zeroCount), 6); + let minRank = Math.min(7 - winCount, 6); + return [maxRank, minRank]; +} diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" new file mode 100644 index 0000000..198ee78 --- /dev/null +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" @@ -0,0 +1,29 @@ +function solution(lottos, win_nums) { + // 0이 없는 경우 > 최저 순위 == 최고 순위 + // 0이 있는 경우 > 모두 0인경우 > 1위 + // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위 + // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함. + // 순위는 7 - hit + // 최종적으로 7위인 경우 6위로 변경 + var answer = []; + if (lottos.indexOf(0) === -1) { + answer[0] = answer[1] = 7 - hit(lottos, win_nums); + } else { + const zeroCount = lottos.length - [...new Set(lottos)].length + 1; + answer[1] = 7 - hit(lottos, win_nums); + zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount); + } + for (let i = 0; i < 2; i++) { + answer[i] >= 7 ? (answer[i] = 6) : null; + } + return answer; +} + +function hit(lottos, win_nums) { + let result = 0; + lottos.forEach((element) => { + win_nums.indexOf(element) === -1 ? null : (result += 1); + }); + return result; +} + diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" new file mode 100644 index 0000000..8815d4f --- /dev/null +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" @@ -0,0 +1,21 @@ +function solution(lottos, win_nums) { + var answer = []; + let max = 7; + let min = 7; + console.log(lottos); + console.log(win_nums); + for (let i = 0; i < 6; i++) { + if (lottos.includes(win_nums[i])) { + max--; + } + } + min = max; + for (let i = 0; i < 6; i++) { + if (lottos[i] == 0) min--; + } + if (max == 7) max = 6; + if (min == 7) min = 6; + answer = [min, max]; + return answer; +} + diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" new file mode 100644 index 0000000..427be9b --- /dev/null +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" @@ -0,0 +1,24 @@ +function solution(lottos, win_nums) { + // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화 + let winCount = 0; + let zeroCount = 0; + // 내 로또 번호 하니씩 접근 + lottos.forEach((num) => { + // 번호가 0이 아니고 당첨 번호라면 + if (num !== 0 && win_nums.includes(num)) { + winCount++; + // 번호가 0이라면 + } else if (num === 0) { + zeroCount++; + } + }); + // 일치한 수와 등수는 반비례하기 때문에 빼기 7 + // 이때 등수를 벗어나면 낙첨(6) 으로 고정 + let max = 7 - (winCount + zeroCount); + if (max > 5) max = 6; + let min = 7 - winCount; + if (min > 5) min = 6; + + return [max, min]; +} + diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" new file mode 100644 index 0000000..7d71795 --- /dev/null +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" @@ -0,0 +1,30 @@ +function solution(lottos, win_nums) { + //최고당첨개수 : maxPoint + basicPoint + //최저당첨개수 : basicPoint + + let basicPoint = 0; + let maxPoint = 0; + let answer = []; + + lottos.forEach(function (lottos_item) { + win_nums.forEach(function (win_nums_item) { + if (lottos_item == win_nums_item) { + basicPoint++; + } + }); + }); + + lottos.forEach(function (item) { + if (item == 0) { + maxPoint++; + } + }); + + maxPoint + basicPoint >= 2 + ? answer.push(7 - maxPoint - basicPoint) + : answer.push(6); + basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6); + + return answer; +} + diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" new file mode 100644 index 0000000..e157ad4 --- /dev/null +++ "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" @@ -0,0 +1,22 @@ +function solution(answers) { + const pattern = [ + [1, 2, 3, 4, 5], + [2, 1, 2, 3, 2, 4, 2, 5], + [3, 3, 1, 1, 2, 2, 4, 4, 5, 5], + ]; + const scores = [0, 0, 0]; + + answers.forEach((answer, i) => { + for (let j = 0; j < pattern.length; j++) { + const patternLength = pattern[j].length; + if (answer === pattern[j][i % patternLength]) scores[j]++; + } + }); + + const answer = []; + const maxScore = Math.max(...scores); + scores.forEach((score, i) => { + if (score === maxScore) answer.push(i + 1); + }); + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" new file mode 100644 index 0000000..6fa7f47 --- /dev/null +++ "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" @@ -0,0 +1,24 @@ +function solution(answers) { + let arr1 = [1,2,3,4,5] + let arr2 = [2,1,2,3,2,4,2,5] + let arr3 = [3,3,1,1,2,2,4,4,5,5] + + let score = [0, 0, 0] + for (let i=0; i { + for (let [key, { pattern }] of Object.entries(players)) { + // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가 + if (pattern[index % pattern.length] === answer) { + players[key].count++; + // 제일 높은 count 구하기 + if (max < players[key].count) max = players[key].count; + } + } + }); + // players 중에 count 가 max 와 값이 같다면 result 추가 + for (let [key, { count }] of Object.entries(players)) { + if (count === max) result.push(parseInt(key, 10)); + } + + return result; +} + diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" new file mode 100644 index 0000000..21b8607 --- /dev/null +++ "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" @@ -0,0 +1,21 @@ +function solution(answers) { + let score = []; + let answer = []; + let a1 = [1, 2, 3, 4, 5]; + let a2 = [2, 1, 2, 3, 2, 4, 2, 5]; + let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; + + score.push(answers.filter((a, i) => a === a1[i % a1.length]).length); + score.push(answers.filter((a, i) => a === a2[i % a2.length]).length); + score.push(answers.filter((a, i) => a === a3[i % a3.length]).length); + + for (let i = 0; i < score.length; i++) { + const max = Math.max(...score); + if (score[i] === max) { + answer.push(i + 1); + } + } + + return answer; +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" new file mode 100644 index 0000000..ec5028d --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" @@ -0,0 +1,9 @@ +function solution(s) { + let pCount = s.split(/p/i).length - 1; + let yCount = s.split(/y/i).length - 1; + return pCount === yCount; +} +// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다. +// Ex. "ababb".split("a") 의 결과는 ["", "b", "bb"] +// => 즉, "a"의 갯수는 3에서 1을 뺀 2 + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/prove-ability.js" new file mode 100644 index 0000000..e875049 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/prove-ability.js" @@ -0,0 +1,8 @@ +function solution(s){ + // 배열로 변환 + s = s.split(""); + // filter 를 사용해 갯수 추출 + const pCount = s.filter((v) => v === "p" || v === "P").length; + const yCount = s.filter((v) => v === "y" || v === "Y").length; + return pCount === yCount; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" new file mode 100644 index 0000000..6a42af1 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" @@ -0,0 +1,7 @@ +function solution(s) { + p = s.toLowerCase().split("p").length; + y = s.toLowerCase().split("y").length; + + return p == y ? true : false; +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..3b402ef --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,10 @@ +function solution(strings, n) { + return strings.sort((a, b) => { + // 인덱스 n번째 글자를 기준으로 오름차순 정렬 + if (a[n] > b[n]) return 1; + else if (a[n] < b[n]) return -1; + // 인덱스 n번째 글자가 같으면 사전순 정렬 + else return a > b ? 1 : -1; + }); +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..0a13267 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,11 @@ +function solution(strings, n) { + // 정렬 + strings.sort((a, b) => { + // n번째 클자가 같다면 사전순 + if(a[n].charCodeAt() === b[n].charCodeAt()) { + return a > b ? 1 : -1; + } else return a[n].charCodeAt() - b[n].charCodeAt(); + }); + + return strings; +} diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..a2202d1 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,5 @@ +function solution(s) { + return s.split("").sort((a, b) => (a < b ? 1 : -1)).join(""); +} + + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..204d65e --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" @@ -0,0 +1,7 @@ +function solution(s) { + return s.split('').sort().reverse().join('') +} +// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다. +// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다. +// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다. + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..e07d09a --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,4 @@ +function solution(s) { + return s.split("").sort().reverse().join("") +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" new file mode 100644 index 0000000..fc5d1bf --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" @@ -0,0 +1,12 @@ +function solution(s) { + // 길이가 4 혹은 6이 아니면 false 반환 + if (s.length !== 4 && s.length !== 6) return false; + // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환 + for (let i = 0; i < s.length; i++) { + if (isNaN(Number(s[i]))) return false; + } + // 위의 모든 조건에 포함되지 않으면 + // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환 + return true; +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" new file mode 100644 index 0000000..2747f91 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" @@ -0,0 +1,14 @@ +function solution(s) { + var answer = true; + // 문자열 s의 길이가 4 혹은 6이고 + if (s.length === 4 || s.length === 6) { + for (let i = 0, len = s.length; i < len; i++) { + // 숫자로만 구성돼있는지 확인 + if (!Number.isInteger(parseInt(s[i], 10))) return false; + } + // 문자열 s의 길이가 4 혹은 6 가 아니라면 false + } else return false; + + return answer; +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" new file mode 100644 index 0000000..0686a5d --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" @@ -0,0 +1,6 @@ +function solution(s) { + if (s.length !== 4 && s.length !== 6) return false; + return !s.split("").some((i) => isNaN(parseInt(i, 10))); + //early return 제외사항 먼저 처리 + //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환 +} diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" new file mode 100644 index 0000000..ddd00f8 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" @@ -0,0 +1,11 @@ +function solution(s) { + let parseInts = parseInt(s); + if (s.length == 6 || s.length == 4) { + if (s == parseInts) { + return true; + } + } + + return false; +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..8414c22 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" @@ -0,0 +1,4 @@ +function solution(s) { + return Number(s); +} + diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..1d9d706 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" @@ -0,0 +1,3 @@ +function solution(s) { + return parseInt(s); +} diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" new file mode 100644 index 0000000..bd80f04 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" @@ -0,0 +1,5 @@ +function solution(s) { + return parseInt(s, 10); +} + + diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..1eba0d8 --- /dev/null +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,8 @@ +function solution(price, money, count) { + let totalPrice = 0; + for(let i=1; i<=count; i++){ + totalPrice += i * price; + } + return money > totalPrice ? 0 : totalPrice-money; +} + diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..7f4753a --- /dev/null +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" @@ -0,0 +1,11 @@ +function solution(price, money, count) { + let sum_price = 0; // 놀이기구의 이용료의 합 + for (let i = 1; i <= count; i++) { + sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다. + } + if (sum_price <= money) { + return 0; + } + return sum_price - money; +} + diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..cf04d4a --- /dev/null +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,9 @@ +function solution(price, money, count) { + let sum = 0; + for(let i = 1; i <= count; i++) { + sum += (i * price) + } + + return sum < money ? 0 : sum - money; +} + diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" new file mode 100644 index 0000000..f5a7d1a --- /dev/null +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" @@ -0,0 +1,16 @@ +function solution(price, money, count) { + var answer = 0; + let sum = price; + + for (i = 2; i <= count; i++) { + sum += price * i; + } + + if (sum <= money) { + answer = 0; + } else { + answer = sum - money; + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..0ec33e0 --- /dev/null +++ "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" @@ -0,0 +1,4 @@ +function solution(seoul) { + return `김서방은 ${seoul.indexOf("Kim")}에 있다`; +} + diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..d6f0924 --- /dev/null +++ "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/jaewon1676.js" @@ -0,0 +1,7 @@ +function solution(seoul) { + var answer = ''; + for (let i=0; i<1000; i++){ + if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다'; + } + return 1; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" new file mode 100644 index 0000000..cd56308 --- /dev/null +++ "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" @@ -0,0 +1,4 @@ +function solution(seoul) { + return `김서방은 ${seoul.findIndex(v => v === "Kim")}에 있다`; +} + diff --git "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..b775f1a --- /dev/null +++ "b/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,11 @@ +function solution(survey, choices) { + const points = [-3, -2, -1, 0, 1, 2, 3]; + const types = ['RT', 'CF', 'JM', 'AN']; + const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {}); + survey.forEach((key, i) => { + const point = points[choices[i] - 1]; + Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point); + }); + return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join(''); +} + diff --git "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" "b/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" new file mode 100644 index 0000000..dcc4c52 --- /dev/null +++ "b/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" @@ -0,0 +1,14 @@ +function solution(survey, choices) { + const points = [-3, -2, -1, 0, 1, 2, 3]; + const types = ['RT', 'CF', 'JM', 'AN']; + const pointBoard = survey.reduce((a, key, i) => { + if (types.includes(key)) { + a[key] = (a[key] || 0) + points[choices[i] - 1]; + return a; + } + const rKey = key[1] + key[0]; + a[rKey] = (a[rKey] || 0) - points[choices[i] - 1]; + return a; + }, {}); + return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join(''); +} diff --git "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" "b/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" new file mode 100644 index 0000000..7acacb9 --- /dev/null +++ "b/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" @@ -0,0 +1,42 @@ +function solution(survey, choices) { + const points = [3, 2, 1, 0, 1, 2, 3]; + const pointBoard = { + R: 0, + T: 0, + C: 0, + F: 0, + J: 0, + M: 0, + A: 0, + N: 0, + }; + let result = ""; + + // 카테고리 별 점수 추가 + for (let i = 0; i < survey.length; i++) { + const categories = survey[i]; + + if (choices[i] < 4) { + pointBoard[categories[0]] += points[choices[i] - 1]; + } else if (choices[i] > 4) { + pointBoard[categories[1]] += points[choices[i] - 1]; + } + } + + const pointBoardEntries = Object.entries(pointBoard); + + // 지표에 맞게 결과 값 도출 + for (let i = 0; i < pointBoardEntries.length; i += 2) { + const [curCategory, curValue] = pointBoardEntries[i]; + const [nextCategory, nextValue] = pointBoardEntries[i + 1]; + + if (curValue < nextValue) { + result += nextCategory; + } else { + result += curCategory; + } + } + + return result; +} + diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..962d210 --- /dev/null +++ "b/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" @@ -0,0 +1,31 @@ +// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수 +const getCombinations = function (arr, selectNumber) { + const results = []; + if (selectNumber === 1) return arr.map((el) => [el]); + arr.forEach((fixed, index, origin) => { + const rest = origin.slice(index + 1); + const combinations = getCombinations(rest, selectNumber - 1); + const attached = combinations.map((el) => [fixed, ...el]); + results.push(...attached); + }); + return results; +}; + +// num이 소수인지 여부를 반환하는 함수 +function isPrime(num) { + if (num === 1) return false; + for (let i = 2; i <= Math.sqrt(num); i++) { + if (num % i === 0) return false; + } + return true; +} + +function solution(nums) { + const combinationResult = getCombinations(nums, 3); + let answer = 0; + combinationResult.forEach((e) => { + const sum = e[0] + e[1] + e[2]; + if (isPrime(sum)) answer++; + }); + return answer; +} diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..8ebd1ce --- /dev/null +++ "b/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -0,0 +1,27 @@ +// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript + +function solution(nums) { + let len = nums.length, answer = 0; + + for (let i = 0; i < len - 2; i++) { + for (let j = i + 1; j < len - 1; j++) { + for (let k = j + 1; k < len; k++) { + if (isPrime(nums[i] + nums[j] + nums[k])) { + answer++; + } + } + } + } + return answer; +} + +const isPrime = (n) => { + for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회 + if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다. + return false; + } + } + return true; +} +// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다. + diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..f9f23be --- /dev/null +++ "b/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" @@ -0,0 +1,18 @@ +// 소수인지 판별하는 함수 +function isPrime(x) { + for (let i = 2; i <= Math.sqrt(x); i++) { + if (x % i === 0) return false; + } + return true; +} +function solution(n) { + // 소수의 개수를 저장할 변수 + let answer = 0; + // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해 + for (let i = 2; i <= n; i++) { + // 소수이면 소수의 개수에 1 추가 + if (isPrime(i)) answer++; + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..04af6f0 --- /dev/null +++ "b/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" @@ -0,0 +1,18 @@ +function solution(n) { + let arr = []; + + // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다. + for(let i=2; i<=n; i++) { + arr[i] = i; + } + for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다. + if (arr[i] === 0) continue; + + for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다. + arr[j] = 0; + } + } + + // filter를 이용해 0이아닌 수들의 개수를 return합니다. + return arr.filter(v => v!==0).length; +} diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" new file mode 100644 index 0000000..b5c4bdf --- /dev/null +++ "b/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" @@ -0,0 +1,20 @@ +// 소수 판별 로직 +function isPrime(n) { + // n 제곱근 후 올림 + for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) { + if (n % i === 0) return false; + } + return true; +} + +function solution(n) { + let count = 0; + // 1부터 n까지 반복적으로 접근 - i + for(let i = 1; i <= n; i++) { + // i 가 소수인지 확인 후 count++ + if(isPrime(i)) count++; + } + + return count; +} + diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" new file mode 100644 index 0000000..ff72755 --- /dev/null +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" @@ -0,0 +1,5 @@ +function solution(n) { + // "수박"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환 + return '수박'.repeat(n).substr(0, n); +} + diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" new file mode 100644 index 0000000..b3510a0 --- /dev/null +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" @@ -0,0 +1,9 @@ +function solution(n) { + let str = ''; + for (let i = 0; i < n; i++) { + // 삼항 연산자와 +로 문자열을 붙여주어 추가. + i % 2 == 0 ? (str = str + '수') : (str = str + '박'); + } + return str; +} + diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" new file mode 100644 index 0000000..618c26b --- /dev/null +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" @@ -0,0 +1,7 @@ +function solution(n) { + let answer = ''; + answer = '수박'.repeat(n / 2); + if (n % 2 !== 0) answer += '수'; + return answer; +} + diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" new file mode 100644 index 0000000..67a9d85 --- /dev/null +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" @@ -0,0 +1,3 @@ +function solution(n) { + return '수박'.repeat(n / 2) + '수'.repeat(n % 2); +} diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" new file mode 100644 index 0000000..a72e37c --- /dev/null +++ "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" @@ -0,0 +1,15 @@ +function solution(s) { + s = s + .replace(/zero/g, 0) + .replace(/one/g, 1) + .replace(/two/g, 2) + .replace(/three/g, 3) + .replace(/four/g, 4) + .replace(/five/g, 5) + .replace(/six/g, 6) + .replace(/seven/g, 7) + .replace(/eight/g, 8) + .replace(/nine/g, 9); + return parseInt(s); +} + diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" new file mode 100644 index 0000000..ecf2fb8 --- /dev/null +++ "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" @@ -0,0 +1,23 @@ +function solution(s) { + var answer = 0; + let answerString = s; + const stringToNum = [ + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + ]; + for (let i = 0; i < 10; i++) { + const regex = new RegExp(stringToNum[i], "g"); + answerString = answerString.replace(regex, i); + } + answer = Number(answerString); + return answer; +} + diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" new file mode 100644 index 0000000..799b49d --- /dev/null +++ "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" @@ -0,0 +1,18 @@ +function solution(s) { + let answer = 0; + + s = s.replace(/zero/g, 0); + s = s.replace(/one/g, 1); + s = s.replace(/two/g, 2); + s = s.replace(/three/g, 3); + s = s.replace(/four/g, 4); + s = s.replace(/five/g, 5); + s = s.replace(/six/g, 6); + s = s.replace(/seven/g, 7); + s = s.replace(/eight/g, 8); + s = s.replace(/nine/g, 9); + + answer = Number(s); + return answer; +} + diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" new file mode 100644 index 0000000..a77f4ed --- /dev/null +++ "b/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" @@ -0,0 +1,20 @@ +function solution(s) { + let en = [ + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + ]; + + for (let i = 0; i < s.length * 2; i++) { + let p = i % en.length; + s = s.replace(en[p], p); + } + return Number(s); +} diff --git "a/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" "b/build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" similarity index 83% rename from "level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" rename to "build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" index 4c6e7a3..5f07388 100644 --- "a/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" +++ "b/build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ssi02014 /** * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화 diff --git "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" "b/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" new file mode 100644 index 0000000..b6db8a7 --- /dev/null +++ "b/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" @@ -0,0 +1,25 @@ +function solution(s, n) { + let result = ""; + for (let i = 0; i < s.length; i++) { + if (s[i] === " ") result += " "; + else { + let charCode = s.charCodeAt(i); + // 원래 대문자였는데 + if (charCode <= 90) { + charCode += n; + // 변경 후 아스키코드값이 90보다 크다면 + if (charCode > 90) charCode -= 26; + } + // 원래 소문자였는데 + else { + charCode += n; + // 변경 후 아스키코드값이 122보다 크다면 + if (charCode > 122) charCode -= 26; + } + result += String.fromCharCode(charCode); + } + } + return result; +} + + diff --git "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" "b/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" new file mode 100644 index 0000000..f075a39 --- /dev/null +++ "b/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" @@ -0,0 +1,24 @@ +function solution(s, n) { + return s + .split("") + .map((el) => { + if (el == " ") return el; + let tmp = el.charCodeAt(); + return el.toLowerCase().charCodeAt() + n > 122 + ? String.fromCharCode(tmp + n - 26) + : String.fromCharCode(tmp + n); + }) + .join(""); +} + +/* 문자열 -> 아스키코드 : s.charCodeAt() +아스키코드 -> 문자열 : String.fromCharCode() +풀이과정 +1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다. +2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. + 대문자 아스키코드는 65가 A, 90이 Z이다. + 소문자 아스키코드는 97이 a, 122가 z이다. +3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고 + 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다. +*/ + diff --git "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" "b/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" new file mode 100644 index 0000000..6557502 --- /dev/null +++ "b/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" @@ -0,0 +1,18 @@ +function solution(s, n) { + var answer = ''; + for(let i = 0, len = s.length; i < len; i++) { + if(s[i] === " ") { + answer += " "; + continue; + } + let index = s[i].charCodeAt(); + // 65 - 90 + // 97 - 122 + if(index <= 90 && index + n > 90) index -= 26; + else if (index + n > 122) index -= 26; + + answer += String.fromCharCode(index + n) + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..5df932b --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" @@ -0,0 +1,58 @@ +function solution(id_list, report, k) { + // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리 + let set = new Set(report); + report = Array.from(set); + + // 1. report를 2차원배열로 변형 + // 2. 각 유저가 신고당한 횟수 cnt에 저장 + // 3. 각 유저를 신고한 유저 who에 저장 + let cnt = Array.from({ length: id_list.length }, i => 0); + let who = Array.from({ length: id_list.length }, i => []); + for (let i = 0; i < report.length; i++) { + report[i] = report[i].split(' '); + cnt[id_list.indexOf(report[i][1])]++; + who[id_list.indexOf(report[i][1])].push(report[i][0]); + } + + // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장 + let mail = Array.from({ length: id_list.length }, i => 0); + for (let i = 0; i < cnt.length; i++) { + if (cnt[i] < k) continue; + for (let j = 0; j < who[i].length; j++) { + mail[id_list.indexOf(who[i][j])]++; + } + } + return mail; +} +//정답 6(🎩 refactor 220425) - codeisneverodd +function solution(id_list, report, k) { + //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장, + //각 id를 신고한 사람 array를 reportedBy에 저장, + //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장 + //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장. + const reportSet = new Set(report); + const reportedCount = {}; //{"id": Number(count)} + const reportedBy = {}; //{"id":[]} + const mailCount = {}; //{"id":Number(count)} + + id_list.forEach(element => { + reportedCount[element] = 0; + mailCount[element] = 0; + reportedBy[element] = []; + }); + + reportSet.forEach(element => { + const [id, reported] = element.split(' '); + reportedCount[reported] += 1; + reportedBy[reported].push(id); + }); + + for (const reportedId in reportedCount) { + if (reportedCount[reportedId] >= k) { + reportedBy[reportedId].forEach(reporter => { + mailCount[reporter] += 1; + }); + } + } + return id_list.map(id => mailCount[id]); +} diff --git "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..7d257b4 --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" @@ -0,0 +1,30 @@ +function solution(id_list, report, k) { + let answer = new Array(id_list.length).fill(0); + let report_list = {}; // 신고당한 ID + + // key, value 형식의 report_list 객체를 만든다. + id_list.map(user => { + report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체 + }); + // report_list { muzi: [], frodo: [], apeach: [], neo: [] } + + // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다. + report.map(user => { + const [user_id, report_id] = user.split(' '); + // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다. + if (!report_list[report_id].includes(user_id)) { + report_list[report_id].push(user_id); + // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다. + } + }); + for (const key in report_list) { + // report_list의 index 순회 + if (report_list[key].length >= k) { + report_list[key].map(user => { + answer[id_list.indexOf(user)] += 1; + }); + } + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" new file mode 100644 index 0000000..40442de --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" @@ -0,0 +1,28 @@ +function solution(id_list, report, k) { + // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기 + var answer = Array.from({ length: id_list.length }).fill(0); + // 신고 내용 객체 초기화 - 신고된 내용 정리 + const reportObj = {}; + // 신고건 반복문으로 하나씩 접근 + for (let i = 0, len = report.length; i < len; i++) { + const [userId, reportUserId] = report[i].split(' '); + // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가 + if (reportObj[reportUserId]) { + if (!reportObj[reportUserId].includes(userId)) { + reportObj[reportUserId] = [...reportObj[reportUserId], userId]; + } + // 신고 내용 객체에 신고당한 사람이 없다면 추가 + } else reportObj[reportUserId] = [userId]; + } + // 만들어진 신고 내용 객체로 반복적으로 접근 + for (const item of Object.values(reportObj) + .filter(v => v.length >= k) + .flatMap(v => v)) { + // 인덱스로 접근해 메일 카운트 증가 + const index = id_list.findIndex(v => v === item); + answer[index]++; + } + + return answer; +} + diff --git "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" "b/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" new file mode 100644 index 0000000..7ef27ab --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" @@ -0,0 +1,45 @@ +function solution(new_id) { + // 1단계: 모든 대문자를 소문자로 + new_id = new_id.toLowerCase(); + + // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거 + new_id = new_id.replace(/[^\w\-\.]/g, ''); + + // 3단계: 연속되는 마침표는 마침표 하나로 + new_id = new_id.replace(/\.{2,}/g, '.'); + + // 4단계: 처음이나 끝에 마침표가 있으면 제거 + new_id = new_id.replace(/^\.|\.$/, ''); + + // 5단계: new_id가 빈 문자열이면 "a" 대입 + if (new_id.length === 0) new_id = 'a'; + + // 6단계: new_id의 길이가 16자 이상이면, + // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 + // 제거 후 끝에 마침표가 있으면 제거 + if (new_id.length >= 16) new_id = new_id.slice(0, 15); + new_id = new_id.replace(/\.$/, ''); + + // 7단계: new_id의 길이가 2자 이하이면, + // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임 + let len = new_id.length; + if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len); + + return new_id; +} +//정답 5(🎩 refactor 220425) - codeisneverodd +function solution(new_id) { + let answer = new_id + .toLowerCase() //step 1 + .replace(/[^0-9a-z._-]/g, '') // step 2 + .replace(/\.+/g, '.') //step 3 + .replace(/^\.|\.$/g, '') //step 4 + .replace(/^$/, 'a') //step 5 + .slice(0, 15) + .replace(/\.$/, ''); //step 6 + // step7 + if (answer.length === 1) answer = answer[0].repeat(3); + if (answer.length === 2) answer = answer + answer[1]; + + return answer; +} diff --git "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" "b/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" new file mode 100644 index 0000000..604cc96 --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" @@ -0,0 +1,27 @@ +function solution(new_id) { + let answer = ''; + answer = new_id.toLowerCase(); // step1 + const step2 = /[^0-9a-z._-]/g; + const step3 = /[.]+/g; + const step4_1 = /^\./; + const step4_2 = /\.$/; + answer = answer.replace(step2, ''); + answer = answer.replace(step3, '.'); + answer = answer.replace(step4_1, ''); + answer = answer.replace(step4_2, ''); + answer = answer === '' ? 'a' : answer; // step5 + answer = answer.length >= 16 ? answer.slice(0, 15) : answer; //step6 + answer = answer.replace(step4_2, ''); + switch ( + answer.length // step7 + ) { + case 1: + answer = answer + answer[0] + answer[0]; + break; + case 2: + answer = answer + answer[1]; + break; + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" "b/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" new file mode 100644 index 0000000..1de6eaa --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" @@ -0,0 +1,31 @@ +function solution(new_id) { + // 1 소문자로 치환 + let answer = new_id + .toLowerCase() + + // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거. + .replace(/[^a-z0-9-_.]/gi, '') + + // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환 + .replace(/[.]{2,}/gi, '.') + + // 4 마침표(.)가 처음이나 끝에 위치하면 제거 + .replace(/^[.]|[.]$/gi, ''); + + // 5 빈 문자열이면 a 대입 + if (answer === '') answer = 'a'; + + // 6 length > 15이면 그 뒤의 문자들은 제거 + if (answer.length > 15) { + answer = answer.substring(0, 15); + // 마침표(.)가 끝에 위치하면 마침표(.)제거 + answer = answer.replace(/[.]$/gi, ''); + } + + // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임 + while (answer.length < 3) { + answer += answer[answer.length - 1]; + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" new file mode 100644 index 0000000..eb49e89 --- /dev/null +++ "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" @@ -0,0 +1,21 @@ +function solution(N, stages) { + var answer = []; + let failRate = new Array(N + 2).fill(0); + let playerChallenging = new Array(N + 2).fill(0); + let playerReached = new Array(N + 2).fill(0); + + for (const stage of stages) { + for (let i = 1; i <= stage; i++) playerReached[i] += 1; + playerChallenging[stage] += 1; + } + for (let i = 1; i <= N + 1; i++) + failRate[i] = + playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i]; + const rateNIndex = failRate + .slice(1, N + 1) + .map((rate, stage) => [rate, stage + 1]); + const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]); + answer = sortedRate.map((stage) => stage[1]); + return answer; +} + diff --git "a/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" similarity index 53% rename from "level-1/\354\213\244\355\214\250\354\234\250&42889&.js" rename to "build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" index dbf3b99..aeb991b 100644 --- "a/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" +++ "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" @@ -1,42 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(N, stages) { - let stageNFailRate = []; - for (let stage = 1; stage <= N; stage++) { - const playerReached = stages.filter((player) => player >= stage).length; - const playerChallenging = stages.filter( - (player) => player === stage - ).length; - stageNFailRate.push([stage, playerChallenging / playerReached]); - } - stageNFailRate.sort((a, b) => b[1] - a[1]); - return stageNFailRate.map((stage) => stage[0]); -} - -//정답 2 - codeisneverodd -function solution(N, stages) { - var answer = []; - let failRate = new Array(N + 2).fill(0); - let playerChallenging = new Array(N + 2).fill(0); - let playerReached = new Array(N + 2).fill(0); - - for (const stage of stages) { - for (let i = 1; i <= stage; i++) playerReached[i] += 1; - playerChallenging[stage] += 1; - } - for (let i = 1; i <= N + 1; i++) - failRate[i] = - playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i]; - const rateNIndex = failRate - .slice(1, N + 1) - .map((rate, stage) => [rate, stage + 1]); - const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]); - answer = sortedRate.map((stage) => stage[1]); - return answer; -} - -//정답 3 - jaewon1676 function solution(N, stages) { let map = Array.from(Array(N), () => Array(2).fill(0)); let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수 diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" new file mode 100644 index 0000000..bf63614 --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(left, right) { + var answer = 0; + for (let num = left; num <= right; num++) { + divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num); + } + return answer; +} + +const divisorCounter = (num) => { + let count = 0; + const sqrt = Math.sqrt(num); + for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1; + return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2; +}; + diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" new file mode 100644 index 0000000..98c8eea --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" @@ -0,0 +1,14 @@ +function solution(left, right) { + var answer = 0; + + for (left; left <= right; left++) { + // left의 제곱근이 정수면 약수의 개수는 홀수 + if (Number.isInteger(Math.sqrt(left))) { + answer -= left; + } else { + answer += left; + } + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" new file mode 100644 index 0000000..3eac026 --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" @@ -0,0 +1,17 @@ +function getDivisorCount(i) { + let count = 0; + for(let j = 1; j <= i; j++) { + if(i % j === 0) count++; + } + return count; +} + +function solution(left, right) { + let answer = 0; + for(let i = left; i <= right; i++) { + let count = getDivisorCount(i); + if(count % 2 === 0) answer += i; + else answer -= i; + } + return answer; +} diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" new file mode 100644 index 0000000..28c045b --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" @@ -0,0 +1,12 @@ +function solution(n) { + let result = 0; + let sqrtN = Math.sqrt(n); + // 효율성을 위해 1부터 n의 제곱근-1까지만 순회 + for (let i = 1; i < sqrtN; i++) { + if (n % i === 0) result += i + n / i; + } + // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌 + if (Number.isInteger(sqrtN)) result += sqrtN; + return result; +} + diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" new file mode 100644 index 0000000..6689f46 --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" @@ -0,0 +1,16 @@ +function solution(n) { + var answer = 0; + for (let i = 1; i <= n; i++) { + if (n % i == 0) { + // n으로 i를 나눴을 때, 나머지가 0이면 약수이다. + answer += i; + } + } + return answer; +} + +// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다. +// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다. +// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다. + + diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" new file mode 100644 index 0000000..9725561 --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" @@ -0,0 +1,8 @@ +function solution(n) { + let answer = 0; + for(let i = 1; i <= n; i++) { + if(n % i === 0) answer += i; + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" new file mode 100644 index 0000000..86e4de1 --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" @@ -0,0 +1,18 @@ +function solution(n) { + var answer = 0; + let i; + for (i = 1; i <= Math.sqrt(n); i++) { + if (n % i == 0) { + if (i * i == n) { + //i의 제곱이 n인경우 처리 + answer += i; + } else { + answer += i; + answer += n / i; + } + } + } + + return answer; +} + diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..f935d8f --- /dev/null +++ "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,7 @@ +function solution(numbers) { + let answer = 0; + for (let i = 0; i <= 9; i++) { + if (!numbers.includes(i)) answer += i; + } + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..929befe --- /dev/null +++ "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(numbers) { + var answer = 0; + for (let i = 0; i < 10; i++) { + answer += numbers.includes(i) ? 0 : i; + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..5feca9c --- /dev/null +++ "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,10 @@ +function solution(numbers) { + var answer = 0; + + for (let i = 0; i < 10; i++) { + if (!numbers.includes(i)) answer += i; + } + + return answer; +} + diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" new file mode 100644 index 0000000..58527db --- /dev/null +++ "b/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" @@ -0,0 +1,23 @@ +function solution(numbers) { + var answer = -1; + + let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + let arr_sum = 0; + let numbers_sum = 0; + + for (i = 0; i < arr.length / 2; i++) { + if (arr[i] == arr[arr.length - 1 - i]) { + arr_sum += arr[i]; + } else { + arr_sum += arr[i] + arr[arr.length - 1 - i]; + } + } + + for (i = 0; i < numbers.length; i++) { + numbers_sum += numbers[i]; + } + + answer = arr_sum - numbers_sum; + return answer; +} + diff --git "a/level-1/\354\230\210\354\202\260&12982&.js" "b/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" similarity index 50% rename from "level-1/\354\230\210\354\202\260&12982&.js" rename to "build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" index c774802..6cb1cd7 100644 --- "a/level-1/\354\230\210\354\202\260&12982&.js" +++ "b/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" @@ -1,36 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(d, budget) { - let answer = 0; - d.sort((a, b) => a - b); - for (const department of d) { - if (budget < department) break; - answer += 1; - budget -= department; - } - return answer; -} - - -//정답 2 - prove-ability -function solution(d, budget) { - let sum = 0; - let count = 0; - // 오름차순 정렬 - d.sort((a, b) => a - b); - for(let i = 0, len = d.length; i < len; i++) { - // 작은 수 부터 하나씩 더해준다 - sum += d[i]; - // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환 - if(sum > budget) return count; - count++; - } - - return count; -} - -//정답 3 - jaewon1676 function solution(d, budget) { let count = 0; // 최대 물품 지원 할 수 있는 부서 수 d.sort((a, b) => a - b) // 오름차순 정렬 diff --git "a/build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" "b/build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" new file mode 100644 index 0000000..47ffabe --- /dev/null +++ "b/build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" @@ -0,0 +1,16 @@ +function solution(d, budget) { + let sum = 0; + let count = 0; + // 오름차순 정렬 + d.sort((a, b) => a - b); + for(let i = 0, len = d.length; i < len; i++) { + // 작은 수 부터 하나씩 더해준다 + sum += d[i]; + // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환 + if(sum > budget) return count; + count++; + } + + return count; +} + diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" new file mode 100644 index 0000000..2f062d5 --- /dev/null +++ "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" @@ -0,0 +1,17 @@ +function solution(participant, completion) { + var answer = ""; + // 두 배열을 정렬한다! + participant.sort(); + completion.sort(); + // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!! + // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로 + // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만 + // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음! + for (let i = 0; i < participant.length; i++) { + if (participant[i] != completion[i]) { + answer = participant[i]; + break; + } + } + return answer; +} diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" new file mode 100644 index 0000000..422eb3a --- /dev/null +++ "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" @@ -0,0 +1,31 @@ +function solution(participant, completion) { + let answer = ""; + // 2개 이상을 가진 특정값의 갯수 기록용 변수 + let max = 0; + // 반복문 내부에서 set.has 를 사용하기 위해 Set 선언 (처음에는 Array.findIndex 를 사용) + const set = new Set([...completion]); + // 반복문 최적화 - 반복되던 연산 제거 (값 비교, length) + const length = participant.length; + for (let i = length; i--; ) { + // 완주자 명단에 없다면 완주하지 못한 참가자 이므로 바로 종료 + if (!set.has(participant[i])) { + answer = participant[i]; + break; + } + // 배열안에 특정값 갯수 확인 + let count = participant.reduce( + (a, v) => (v === participant[i] ? a + 1 : a), + 0 + ); + // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면 + // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다 + if (count > 1 && max < count) { + answer = participant[i]; + // 조건에 맞는 동명이인 수 저장 + max = count; + } + } + return answer; +} + +//완벽한 정답이 아닙니다. diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" new file mode 100644 index 0000000..3c487fc --- /dev/null +++ "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" @@ -0,0 +1,20 @@ +function solution(participant, completion) { + var answer = ""; + for (let i = 0; i < participant.length; i++) { + for (let j = 0; j < completion.length; j++) { + if (participant[i] === completion[j]) { + console.log(participant, completion); + participant.splice(i, 1); + completion.splice(j, 1); + i--; + j--; + console.log(participant, completion); + break; + } + } + } + + return participant[0]; +} + +//완벽한 정답이 아닙니다. diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..204367b --- /dev/null +++ "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,13 @@ +function solution(absolutes, signs) { + // 연산 결과를 저장할 변수 + let result = 0; + // signs의 각 요소에 대해 + signs.forEach((e, i) => { + // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌 + if (e) result += absolutes[i]; + // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌 + else result -= absolutes[i]; + }); + // result 반환 + return result; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" new file mode 100644 index 0000000..33ab0c4 --- /dev/null +++ "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" @@ -0,0 +1,8 @@ +function solution(absolutes, signs) { + var answer = 0; + for (let i = 0; i < absolutes.length; i++) { + answer += signs[i] ? absolutes[i] : -1 * absolutes[i]; + } + return answer; +} + diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..7e691ef --- /dev/null +++ "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" @@ -0,0 +1,13 @@ +function solution(absolutes, signs) { + var answer = 0; + for (var i = 0; i < absolutes.length; i++) { + if (signs[i] === false) { + answer = answer - absolutes[i]; + } else { + answer = answer + absolutes[i]; + } + } + + return answer; +} + diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..63d469b --- /dev/null +++ "b/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,9 @@ +function solution(absolutes, signs) { + let answer = 0; + absolutes.forEach((absolute, i) => { + if(!signs[i]) absolute *= -1; + answer += absolute; + }) + return answer; +} + diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..ae29c29 --- /dev/null +++ "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" @@ -0,0 +1,18 @@ +// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..! +function solution(s) { + let result = ""; + let flag = true; + for (let i = 0; i < s.length; i++) { + if (s[i] === " ") { + flag = false; + result += s[i]; + } else if (flag) { + result += s[i].toUpperCase(); + } else { + result += s[i].toLowerCase(); + } + flag = !flag; + } + return result; +} + diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..6f6e677 --- /dev/null +++ "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -0,0 +1,35 @@ +function solution(s) { + return s + .split(" ") + .map((el) => + el + .split("") + .map((el, index) => + index % 2 == 0 ? el.toUpperCase() : el.toLowerCase() + ) + .join("") + ) + .join(" "); +} + +/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ] + +.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 +[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]] + +.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()) +//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다! +//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다. +[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]] + +.join('') 작은 배열들을 합쳐줍니다. +['TrY', 'HeLlO', 'WoRlD'] + +.join(' ') 큰 배열들을 합쳐줍니다. +"TrY HeLlO WoRlD" + +대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 +문자열을 연습하는데 좋은 문제입니다. +*/ + + diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" new file mode 100644 index 0000000..1046e11 --- /dev/null +++ "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" @@ -0,0 +1,12 @@ +function solution(s) { + let answer = ''; + s.split(" ").forEach((word) => { + for(let i = 0, len = word.length; i < len; i++) { + if(i % 2 === 0) answer+=word[i].toUpperCase(); + else answer+=word[i].toLowerCase(); + } + answer += " "; + }) + answer = answer.slice(0, answer.length - 1) + return answer; +} diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..d1cd10d --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,9 @@ +function solution(n) { + let result = 0; + while (n > 0) { + result += n % 10; + n = Math.floor(n / 10); + } + return result; +} + diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..4a7047f --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,9 @@ +function solution(n) { + var answer = 0; + n.toString() + .split("") + .forEach((v) => { + answer += parseInt(v); + }); + return answer; +} diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..4bae3f5 --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" @@ -0,0 +1,8 @@ +function solution(n) { + // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환 + return String(n) + .split("") + .reverse() + .map((item) => parseInt(item)); +} + diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..4818403 --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -0,0 +1,8 @@ +function solution(n) { + return (n = n + .toString() + .split("") + .reverse() + .map((o) => (o = parseInt(o)))); +} + diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" new file mode 100644 index 0000000..289be19 --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" @@ -0,0 +1,12 @@ +function solution(n) { + // 1. 문자열 변환 + // 2. 배열로 변환 + // 3. 배열 반전 + // 4. 정수로 변환 + return n + .toString() + .split("") + .reverse() + .map((v) => parseInt(v)); +} + diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" new file mode 100644 index 0000000..49efc1e --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" @@ -0,0 +1,9 @@ +function solution(n) { + let answer = []; + let string = n.toString(); + for (let i = string.length - 1; i >= 0; i--) { + let slice = string.substr(i, 1) * 1; + answer.push(slice); + } + return answer; +} diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..1724d32 --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,9 @@ +function solution(n) { + // 정수 -> 문자열 -> 배열 + let arrN = String(n).split(""); + // 배열 내림차순 정렬 + arrN.sort((a, b) => b - a); + // 배열 -> 문자열 -> 정수 + return parseInt(arrN.join("")); +} + diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..29b1e38 --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,4 @@ +function solution(n) { + return parseInt(n.toString().split("").sort((a, b) => b - a).join(""), 10); +} + diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" new file mode 100644 index 0000000..d0aef2e --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" @@ -0,0 +1,7 @@ +function solution(n) { + // n의 제곱근값을 x에 저장 + let x = Math.sqrt(n); + // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환 + return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1; +} + diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" new file mode 100644 index 0000000..72c7112 --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" @@ -0,0 +1,7 @@ +function solution(n) { + let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인 + if (s ** 2 === n) return ((s+1) ** 2) + + return -1; +} + diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" new file mode 100644 index 0000000..f4ea4af --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" @@ -0,0 +1,9 @@ +function solution(n) { + // n의 제곱근을 x 초기화 + const x = Math.sqrt(n); + // 양의 정수라면 x + 1 제곱 반환 + if(Number.isInteger(x)) return Math.pow(x + 1, 2) + // 아니라면 -1 반환 + return -1; +} + diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" new file mode 100644 index 0000000..71da258 --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" @@ -0,0 +1,5 @@ +function solution(n) { + const sqrt = Math.sqrt(n); + //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수 + return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1; +} diff --git "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..84b150f --- /dev/null +++ "b/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,7 @@ +function solution(arr) { + // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제 + arr.splice(arr.indexOf(Math.min(...arr)), 1); + // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환 + return arr.length ? arr : [-1]; +} + diff --git "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..4654d31 --- /dev/null +++ "b/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" @@ -0,0 +1,12 @@ +function solution(arr) { + arr.splice(arr.indexOf(Math.min(...arr)), 1); + if (arr.length < 1) return [-1]; + return arr; +} + +/* 풀이과정 arr [4,3,2,1] 일경우 +Math.min(...arr)은 1 +arr.indexOf(1), 1이 있는 index가 3이므로 3 반환. +arr.splice(3, 1) arr의 3번째 index만 제거 해준다. +arr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */ + diff --git "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..77ad734 --- /dev/null +++ "b/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,12 @@ +function solution(arr) { + // 최솟값 찾기 + const min = Math.min(...arr); + // arr 중 min 과 같은 요소의 인덱스 제거 + arr.splice( + arr.findIndex((num) => num === min), + 1 + ); + // 만약 arr 가 비어있다면 [-1] 반환 + if (arr.length === 0) return [-1]; + return arr; +} diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..84529b8 --- /dev/null +++ "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" @@ -0,0 +1,18 @@ +process.stdin.setEncoding("utf8"); +process.stdin.on("data", (data) => { + const n = data.split(" "); + const a = Number(n[0]), + b = Number(n[1]); + // 정답을 저장할 문자열 answer + answer = ""; + // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복 + for (let i = 0; i < b; i++) { + // 가로 길이만큼 문자열에 별 더해주기 + for (let j = 0; j < a; j++) answer += "*"; + // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기 + answer += "\n"; + } + // 정답 출력 + console.log(answer); +}); + diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" new file mode 100644 index 0000000..98c4c96 --- /dev/null +++ "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" @@ -0,0 +1,19 @@ +process.stdin.setEncoding('utf8'); +process.stdin.on('data', data => { + const nums = data.split(" "); + const n = Number(nums[0]), m = Number(nums[1]); + + let result = ""; + // 2차원으로 접근 + // 세로 길이만큼 반복 + for(let i = 0; i < m; i++) { + // 가로 길이만큼 별 더하기 + for(let j = 0; j < n; j++) { + result += "*"; + } + // 가로가 끝나면 줄내림 + result += "\n"; + } + console.log(result) +}); + diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" new file mode 100644 index 0000000..43b3bf0 --- /dev/null +++ "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" @@ -0,0 +1,12 @@ +process.stdin.setEncoding("utf8"); +process.stdin.on("data", (data) => { + const n = data.split(" "); + const a = Number(n[0]), + b = Number(n[1]); + console.log(("*".repeat(a) + `\n`).repeat(b)); +}); +/* +<풀이과정> +repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count); +'*'.repeat(a) : *를 a만큼 반복한다. +*/ diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" new file mode 100644 index 0000000..2662249 --- /dev/null +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" @@ -0,0 +1,4 @@ +function solution(num) { + return num % 2 == 0 ? "Even" : "Odd"; +} + diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" new file mode 100644 index 0000000..0deca34 --- /dev/null +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" @@ -0,0 +1,7 @@ +function solution(num) { + let answer; + num % 2 == 0 ? (answer = "Even") : (answer = "Odd"); + // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환. + return answer; +} + diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" new file mode 100644 index 0000000..5102108 --- /dev/null +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" @@ -0,0 +1,4 @@ +function solution(num) { + return num % 2 === 0 ? "Even" : "Odd"; +} + diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" new file mode 100644 index 0000000..fd507e9 --- /dev/null +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" @@ -0,0 +1,3 @@ +function solution(num) { + return num % 2 ? "Odd" : "Even"; +} diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" new file mode 100644 index 0000000..d9d25e8 --- /dev/null +++ "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" @@ -0,0 +1,35 @@ +function solution(n, lost, reserve) { + // 학생들의 체육복 개수를 저장할 배열 students + // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정 + // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음 + const students = Array.from({ length: n + 1 }, () => 1); + + // 체육복 분실/여분 정보 students 배열에 반영 + lost.forEach((lostStudent) => students[lostStudent]--); + reserve.forEach((reserveStudent) => students[reserveStudent]++); + + // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt + let cnt = 0; + students.forEach((student, i) => { + // 현재 인덱스의 학생이 체육복이 없다면 + if (student === 0) { + // 바로 앞 학생이 체육복 여분이 있다면 + if (students[i - 1] === 2) { + // 바로 앞 학생에게 체육복 빌리기 + students[i - 1]--; + student++; + } + // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면 + else if (students[i + 1] === 2) { + // 바로 뒤 학생에게 체육복 빌리기 + students[i + 1]--; + student++; + } + // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음 + else cnt++; + } + }); + + // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수 + return n - cnt; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" new file mode 100644 index 0000000..0cedb35 --- /dev/null +++ "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" @@ -0,0 +1,24 @@ +function solution(n, lost, reserve) { + let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다 + let cnt = 0; + for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복 + answer[reserve[i]-1] += 1 + } + for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1 + answer[lost[i]-1] -= 1 + } + for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다. + if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){ + answer[i] = 1 + answer[i+1] = 1 + } + } + for(let i = 0; i < answer.length; i++){ + (answer[i] >= 1 ? cnt += 1 : null) + } + return cnt + } + //그리디 + // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다. + // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. + diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" new file mode 100644 index 0000000..6c76006 --- /dev/null +++ "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" @@ -0,0 +1,37 @@ +function solution(n, lost, reserve) { + // students 초기화 - 학생들은 체육복 개수 1로 초기화 + let students = Array.from({ length: n }).fill(1); + + // 읽어버린 학생 개수 반영 + lost.forEach((target) => { + students[target - 1]--; + }); + + // 여별 체육복 개수 반영 + reserve.forEach((target) => { + students[target - 1]++; + }); + + // 학생들 순차적으로 접근 + for (let i = 0, len = students.length; i < len; i++) { + // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue + if (students[i] === 0 || students[i] === 1) continue; + // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 + if (i !== 0 && students[i - 1] === 0) { + // 이전 학생 증가 + students[i - 1]++; + // 자신은 대여해줬으니 감소 + students[i]--; + } + // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 + if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) { + // 다음 학생 증가 + students[i + 1]++; + // 자신은 대여해줬으니 감소 + students[i]--; + } + } + // 체육복 1개 이상을 가진 학생들의 수 반환 + return students.filter((v) => v >= 1).length; +} + diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" new file mode 100644 index 0000000..fb56c0a --- /dev/null +++ "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" @@ -0,0 +1,9 @@ +function solution(n, m) { + // 최대공약수 구하기 + let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m)); + // 최소공배수 구하기 + let lcm = (n, m) => (n * m) / gcd(n, m); + // 결과 출력 + return [gcd(n, m), lcm(n, m)]; +} + diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" new file mode 100644 index 0000000..0f9fe97 --- /dev/null +++ "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" @@ -0,0 +1,9 @@ +function solution(a, b) { + let gcd = 0; + for (let i = 1; i <= Math.min(a, b); i++) { + if ((a % i) + (b % i) === 0) { + gcd = i; + } + } + return [gcd, (a / gcd) * b]; +} diff --git "a/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" similarity index 66% rename from "level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" rename to "build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" index 6f0a7d4..49bb60f 100644 --- "a/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" +++ "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" @@ -1,13 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(sizes) { - const maxWidth = Math.max(...sizes.map(card => Math.min(...card))); - const maxHeight = Math.max(...sizes.map(card => Math.max(...card))); - return maxWidth * maxHeight; -} - -// 정답 2 - prove-ability function solution(sizes) { // 가로, 세로 중 큰 값을 가로 길이로 변경(스압) sizes.forEach(([width, height], index) => { diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" new file mode 100644 index 0000000..b33de8d --- /dev/null +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" @@ -0,0 +1,21 @@ +function solution(num) { + // 작업을 반복한 횟수를 저장할 변수 + let cnt = 0; + // num이 1이 되면 반복 종료 + while (num > 1) { + // 작업을 500번 반복해도 1이 되지 않으면 -1 반환 + if (cnt == 500) return -1; + // 작업 반복 횟수 증가 + cnt++; + // 입력된 수가 짝수이면 2로 나누기 + if (num % 2 == 0) num /= 2; + // 입력된 수가 홀수이면 3을 곱하고 1을 더하기 + else { + num *= 3; + num++; + } + } + // 작업을 반복한 횟수 반환 + return cnt; +} + diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" new file mode 100644 index 0000000..3ec2e4d --- /dev/null +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" @@ -0,0 +1,12 @@ +function solution(num) { + var answer = 0; + // num이 1이 아니고, answer이 500이 아니면 진행. + // 두 가지 조건중 하나라도 맞지 않으면 while문 종료. + while (num != 1 && answer != 500) { + //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다. + num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1); + answer++; + } + return num == 1 ? answer : -1; +} + diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" new file mode 100644 index 0000000..c1b2e39 --- /dev/null +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" @@ -0,0 +1,17 @@ +function solution(num) { + let count = 0; + + // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. + while (num !== 1) { + // 입력된 수가 짝수라면 2로 나눕니다. + if (num % 2 === 0) num /= 2; + // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. + else num = num * 3 + 1; + count++; + // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요 + if (count > 500) return -1; + } + + return count; +} + diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" new file mode 100644 index 0000000..dda647c --- /dev/null +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" @@ -0,0 +1,8 @@ +function solution(num) { + let count = 0; + while (num !== 1) { + if (count++ === 500) return -1; + num = num % 2 ? num * 3 + 1 : num / 2; + } + return count; +} diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/chaerin-dev.js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/chaerin-dev.js" new file mode 100644 index 0000000..a571e0b --- /dev/null +++ "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/chaerin-dev.js" @@ -0,0 +1,26 @@ +function solution(board, moves) { + let n = board.length; + + // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경 + board = board.flat(); + let rotatedBoard = Array.from({ length: n }, (i) => []); + for (let i = 0; i < board.length; i++) { + if (board[i]) rotatedBoard[i % n].push(board[i]); + } + + // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기 + let stack = []; + let cnt = 0; + for (let move of moves) { + let doll = rotatedBoard[move - 1].shift(); + if (doll === undefined) continue; + if (stack[stack.length - 1] === doll) { + stack.pop(); + cnt += 2; + } else { + stack.push(doll); + } + } + + return cnt; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" new file mode 100644 index 0000000..b126a28 --- /dev/null +++ "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" @@ -0,0 +1,30 @@ +function solution(board, moves) { + var answer = 0; // 인형을 터뜨린 횟수 + let basket = []; // 바구니 + let crane = 0; // 크레인의 행의 위치 + for (let i = 0; i < moves.length; i++) { + crane = moves[i] - 1; // crane = 0 + for (let j = 0; j < board.length; j++) { + if (board[j][crane] == 0) + else if (board[j][crane] != 0) { + basket.push(board[j][crane]) + board[j][crane] = 0 + if (basket[basket.length - 1] == basket[basket.length - 2]) { + basket.pop(); + basket.pop(); + answer += 2; + } + break; + } + } + } + + return answer; +} + +/* 풀이 과정 +1. 입력받은 moves의 length만큼 for문을 돌린다. +2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다. +3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다. +4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */ + diff --git "a/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" similarity index 76% rename from "level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" rename to "build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" index 00dc63c..1662686 100644 --- "a/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" +++ "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" @@ -1,42 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(numbers, hand) { - let [l, r] = [10, 12]; - const moveL = n => { - l = n; - return 'L'; - }; - - const moveR = n => { - r = n; - return 'R'; - }; - return numbers - .map(n => { - if (n === 0) n = 11; - const to = n => { - const numLocation = numToLocation(n); - const lDistance = distanceBtwLocation(numToLocation(l), numLocation); - const rDistance = distanceBtwLocation(numToLocation(r), numLocation); - if (lDistance < rDistance) return moveL(n); - if (rDistance > lDistance) return moveR(n); - return hand === 'left' ? moveL(n) : moveR(n); - }; - return num % 3 === 1 ? leftTo(num) : num % 3 === 0 ? rightTo(num) : to(num); - }) - .join(''); -} - -function numToLocation(num) { - return [Math.floor((num - 1) / 3), (num - 1) % 3]; -} - -function distanceBtwLocation(a, b) { - return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]); -} - -//정답 2 - chaerin-dev function solution(numbers, hand) { // 키패드를 4행 3열의 이차원 배열이라고 생각 diff --git "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..dd94742 --- /dev/null +++ "b/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" @@ -0,0 +1,7 @@ +function solution(arr) { + // arr의 모든 요소를 sum에 더힘 + let sum = arr.reduce((sum, e) => sum + e); + // sum을 arr의 요소의 갯수로 나눈 후 반환 + return sum / arr.length; +} + diff --git "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..cc4d98c --- /dev/null +++ "b/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" @@ -0,0 +1,8 @@ +function solution(arr) { + var answer = 0; + for (var i = 0; i < arr.length; i++) { + answer += arr[i]; + } + return answer / arr.length; +} + diff --git "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" new file mode 100644 index 0000000..142a8c8 --- /dev/null +++ "b/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" @@ -0,0 +1,7 @@ +function solution(arr) { + var answer = 0; + arr.forEach((num) => { + answer += num; + }); + return answer / arr.length; +} diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" new file mode 100644 index 0000000..6e40028 --- /dev/null +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" @@ -0,0 +1,11 @@ +function solution(nums) { + // 가질 수 있는 폰켓몬의 수 + const getCnt = nums.length / 2; + // 폰켓몬 종류의 수 + const setSize = new Set(nums).size; + // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면 + // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음 + // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면 + // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수 + return setSize > getCnt ? getCnt : setSize; +} diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" new file mode 100644 index 0000000..00b81e7 --- /dev/null +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" @@ -0,0 +1,12 @@ +function solution(nums) { + let max = nums.length / 2; // N / 2 + let set = [...new Set(nums)]; // 중복을 없앤다. + return set.length > max ? max : set.length; +} + +/* 풀이 과정 +1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다. +2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다. +3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 + 두가지 경우의 수로 좁혀진다. */ + diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" new file mode 100644 index 0000000..f6b4ac7 --- /dev/null +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" @@ -0,0 +1,15 @@ +function solution(nums) { + var answer = 0; + // set 을 사용해 중복 제거 + const set = new Set(); + nums.forEach((num) => { + set.add(num); + }); + // set 의 사이즈가 N/2 보다 크다면 N/2 반환 + // 그렇지 않다면 set size 반환 + if (set.size > nums.length / 2) answer = nums.length / 2; + else answer = set.size; + + return answer; +} + diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" new file mode 100644 index 0000000..d7c5f48 --- /dev/null +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" @@ -0,0 +1,8 @@ +function solution(nums) { + const unique = nums.filter((element, index) => { + return nums.indexOf(element) === index; + }); + + return unique.length > nums.length / 2 ? nums.length / 2 : unique.length; +} + diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" new file mode 100644 index 0000000..d48026c --- /dev/null +++ "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" @@ -0,0 +1,13 @@ +function solution(x) { + // x의 각 자리에 접근하기 위해 x를 문자열로 변환 + let x_str = x.toString(); + // 각 자릿수의 합을 저장할 변수 + let sum_of_digits = 0; + // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌 + for (let i = 0; i < x_str.length; i++) { + sum_of_digits += Number(x_str[i]); + } + // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환 + return x % sum_of_digits == 0; +} + diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" new file mode 100644 index 0000000..6900699 --- /dev/null +++ "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" @@ -0,0 +1,11 @@ +function solution(x) { + let sum = 0; + let arr = String(x).split(""); // 숫자를 하나씩 분리한다. + + for (var i = 0; i < arr.length; i++) { + sum += Number(arr[i]); // 각 숫자를 더해준다. + } + + return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수 +} + diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" new file mode 100644 index 0000000..8f216a5 --- /dev/null +++ "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" @@ -0,0 +1,11 @@ +function solution(x) { + var answer = true; + // 모든 자릿수의 합을 구한다 + const sum = x + .toString() + .split("") + .reduce((acc, cur) => acc + parseInt(cur, 10), 0); + // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환 + if (x % sum !== 0) return false; + return answer; +} diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..fbcb8eb --- /dev/null +++ "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" @@ -0,0 +1,7 @@ +function solution(phone_number) { + // "*"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과 + // phone_number의 -4인덱스부터 끝까지 추출한 문자열을 + // 이어붙인 후 반환 + return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); +} + diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" new file mode 100644 index 0000000..693095d --- /dev/null +++ "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" @@ -0,0 +1,6 @@ +function solution(phone_number) { + var answer = ""; + answer += "*".repeat(phone_number.length - 4); + answer += phone_number.slice(phone_number.length - 4, phone_number.length); + return answer; +} diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" new file mode 100644 index 0000000..f6d6411 --- /dev/null +++ "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" @@ -0,0 +1,12 @@ +function solution(arr1, arr2) { + var answer = []; + for (let i = 0; i < arr1.length; i++) { + let ans_row = []; + for (let j = 0; j < arr1[0].length; j++) { + ans_row.push(arr1[i][j] + arr2[i][j]); + } + answer.push(ans_row); + } + return answer; +} + diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" new file mode 100644 index 0000000..13c30cc --- /dev/null +++ "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" @@ -0,0 +1,13 @@ +function solution(arr1, arr2) { + var answer = new Array(arr1.length); + for (let i = 0; i < arr1.length; i++) { + answer[i] = new Array(arr1[0].length); + } + for (let row = 0; row < answer.length; row++) { + for (let col = 0; col < answer[0].length; col++) { + answer[row][col] = arr1[row][col] + arr2[row][col]; + } + } + return answer; +} + diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" new file mode 100644 index 0000000..1a7dd97 --- /dev/null +++ "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" @@ -0,0 +1,11 @@ +function solution(A, B) { + let answer = []; + + for (let i = 0; i < A.length; i++) { + answer[i] = []; + for (let j = 0; j < A[0].length; j++) { + answer[i][j] = A[i][j] + B[i][j]; + } + } + return answer; +} diff --git "a/build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" new file mode 100644 index 0000000..ea9bc73 --- /dev/null +++ "b/build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" @@ -0,0 +1,3 @@ +function solution(n) { + //정답을 다른 방법으로도 작성했다면 추가해 주세요! +} diff --git "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" "b/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" new file mode 100644 index 0000000..c11016b --- /dev/null +++ "b/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" @@ -0,0 +1,18 @@ +// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용 +// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드 +let result = ""; +function solution(n) { + let remainder = n % 3; + let quotient = Math.floor(n / 3) + if(!remainder){ + quotient = Math.floor(n / 3) - 1; + remainder = 3 + } + result += remainder; + if( quotient <= 3){ + if(quotient)result += quotient + result = result.replace(/["3"]/g,"4") + return result.split("").reverse().join("") + } + return solution(quotient); +} diff --git "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" new file mode 100644 index 0000000..b62f194 --- /dev/null +++ "b/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(n) { + var answer = ''; + const oneTwoFour = ['4', '1', '2'] + while (n > 0) { + const remainder = n % 3 + answer = oneTwoFour[remainder] + answer; + if (remainder === 0) { + n = Math.floor((n - 1) / 3) + } else { + n = Math.floor(n / 3) + } + } + return answer; +} + diff --git "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" "b/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" new file mode 100644 index 0000000..42ea2dd --- /dev/null +++ "b/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" @@ -0,0 +1,12 @@ +function solution(n) { + const number = [ 4, 1, 2]; + let answer = ""; + + while(n){ // + answer = number[n%3] + answer; + n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3); + } + + return answer +} + diff --git "a/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" "b/build/solutions/level-2/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" similarity index 79% rename from "level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" rename to "build/solutions/level-2/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" index aeacf60..bf5be3f 100644 --- "a/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" +++ "b/build/solutions/level-2/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 function solution(n) { let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력, if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다. diff --git "a/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" "b/build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" similarity index 75% rename from "level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" rename to "build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" index 425f875..114921e 100644 --- "a/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" +++ "b/build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - le2sky function solution(numbers) { const answer = []; numbers.forEach((num) => { diff --git "a/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" "b/build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" similarity index 71% rename from "level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" rename to "build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" index 9d2fe52..e6c86fb 100644 --- "a/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" +++ "b/build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(n) { if (n % 2 !== 0) return 0; diff --git a/build/solutions/level-2/H-Index/codeisneverodd.js b/build/solutions/level-2/H-Index/codeisneverodd.js new file mode 100644 index 0000000..d3b86c9 --- /dev/null +++ b/build/solutions/level-2/H-Index/codeisneverodd.js @@ -0,0 +1,12 @@ +function solution(citations) { + var answer = 0; + let h = 0 + let length = 0 + while (length >= h) { + h++ + length = citations.filter(citation => citation >= h).length + } + answer = h - 1 + return answer; +} + diff --git a/build/solutions/level-2/H-Index/jaewon1676.js b/build/solutions/level-2/H-Index/jaewon1676.js new file mode 100644 index 0000000..ccbd40a --- /dev/null +++ b/build/solutions/level-2/H-Index/jaewon1676.js @@ -0,0 +1,11 @@ +function solution(citations) { + var answer = 0; + citations.sort((a,b)=>(b-a)) + + for(var i=0; ix[0] ? x[0].toUpperCase() + x.substring(1) : "").join(" "); +} + +// 이 문제에서 제일 핵심은 "공백문자가 연속해서 나올 수 있습니다." 입니다. 이 부분을 꼭 고려하셔야합니다. +// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다. +// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. +//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다. diff --git "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..13d5402 --- /dev/null +++ "b/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,7 @@ +function solution(s) { + var answer = '' + answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ') + //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다. + return answer; +} + diff --git "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..33bd7dc --- /dev/null +++ "b/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -0,0 +1,14 @@ +function solution(s) { + s = s.split(' ').map(el => el.split('').map((el, index) => + index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ') + return s; +} +// 문자열을 연습하기에 좋은 문제입니다. + +// s.split(' ') // 띄어쓰기를 기준으로 나눕니다. +// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 +// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase()) +// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. +// .join('') 작은 배열들을 합쳐줍니다. +// .join(' ') 큰 배열들을 합쳐줍니다. + diff --git "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" new file mode 100644 index 0000000..3dd803f --- /dev/null +++ "b/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" @@ -0,0 +1,12 @@ +function solution(s) { + let answer = []; + s = s.split(" "); + + for (let i = 0; i < s.length; i++) { + answer.push( + s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase() + ); + } + return answer.join(" "); +} + diff --git a/level-3/N-Queen&12952&.js b/build/solutions/level-2/N-Queen/codeisneverodd.js similarity index 93% rename from level-3/N-Queen&12952&.js rename to build/solutions/level-2/N-Queen/codeisneverodd.js index 8d36ad5..425ebc0 100644 --- a/level-3/N-Queen&12952&.js +++ b/build/solutions/level-2/N-Queen/codeisneverodd.js @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { /* 1. 0번째 행에 0번째 queen을 놓는다. diff --git "a/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" "b/build/solutions/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" similarity index 73% rename from "level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" rename to "build/solutions/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" index 239fc80..c0fbcc4 100644 --- "a/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" +++ "b/build/solutions/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(arr) { var answer = 0; answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1) diff --git "a/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" new file mode 100644 index 0000000..53d7642 --- /dev/null +++ "b/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" @@ -0,0 +1,25 @@ +function solution(str1, str2) { + var answer = 0; + let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2) + const union = new Set([...compare1, ...compare2]) + let multiIntersectionLen = 0, multiUnionLen = 0 + for (const slice of union) { + const compare1Count = compare1.filter(x => x === slice).length, + compare2Count = compare2.filter(x => x === slice).length + multiIntersectionLen += Math.min(compare1Count, compare2Count) + multiUnionLen += Math.max(compare1Count, compare2Count) + } + answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536) + return answer; +} + +function verifiedSlices(str) { + const onlyAlphabet = /[a-zA-Z]{2}/ + let result = [] + for (let i = 0; i < str.length - 1; i++) { + const slice = str.slice(i, i + 2) + if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase()) + } + return result +} + diff --git "a/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" "b/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" similarity index 59% rename from "level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" rename to "build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" index 3636716..ff0565f 100644 --- "a/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" +++ "b/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" @@ -1,32 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(str1, str2) { - var answer = 0; - let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2) - const union = new Set([...compare1, ...compare2]) - let multiIntersectionLen = 0, multiUnionLen = 0 - for (const slice of union) { - const compare1Count = compare1.filter(x => x === slice).length, - compare2Count = compare2.filter(x => x === slice).length - multiIntersectionLen += Math.min(compare1Count, compare2Count) - multiUnionLen += Math.max(compare1Count, compare2Count) - } - answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536) - return answer; -} - -function verifiedSlices(str) { - const onlyAlphabet = /[a-zA-Z]{2}/ - let result = [] - for (let i = 0; i < str.length - 1; i++) { - const slice = str.slice(i, i + 2) - if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase()) - } - return result -} - -//정답 2 - jaewon1676 function solution(str1, str2) { str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌. diff --git "a/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" new file mode 100644 index 0000000..bcea9c1 --- /dev/null +++ "b/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" @@ -0,0 +1,19 @@ +function solution(cacheSize, cities) { + var answer = 0; + let cache = [] + if (cacheSize === 0) return 5 * cities.length + for (const city of cities) { + const cityLC = city.toLowerCase() + if (cache.includes(cityLC)) { + cache.splice(cache.indexOf(cityLC), 1) + cache.unshift(cityLC) + answer += 1 + } else { + if (cache.length >= cacheSize) cache.pop() + cache.unshift(cityLC) + answer += 5 + } + } + return answer; +} + diff --git "a/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" "b/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" similarity index 68% rename from "level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" rename to "build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" index ece168f..b46352e 100644 --- "a/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" +++ "b/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" @@ -1,26 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(cacheSize, cities) { - var answer = 0; - let cache = [] - if (cacheSize === 0) return 5 * cities.length - for (const city of cities) { - const cityLC = city.toLowerCase() - if (cache.includes(cityLC)) { - cache.splice(cache.indexOf(cityLC), 1) - cache.unshift(cityLC) - answer += 1 - } else { - if (cache.length >= cacheSize) cache.pop() - cache.unshift(cityLC) - answer += 5 - } - } - return answer; -} - -//정답 2 - jaewon1676 function solution(cacheSize, cities) { var answer = 0; let cache = []; diff --git "a/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" "b/build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" similarity index 88% rename from "level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" rename to "build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" index 41b4753..c668d1e 100644 --- "a/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" +++ "b/build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(m, n, board) { board = board.map(r => r.split('')); const getSquare = ([r, c]) => [ diff --git "a/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" "b/build/solutions/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204/codeisneverodd.js" similarity index 78% rename from "level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" rename to "build/solutions/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204/codeisneverodd.js" index 9bea2b8..aa44727 100644 --- "a/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" +++ "b/build/solutions/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n, t, m, p) { let queue = [], result = [], currentNumDecimal = -1, turn = 0 while (result.length < t) { diff --git "a/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" "b/build/solutions/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" similarity index 95% rename from "level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" rename to "build/solutions/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" index 20404da..8b821d5 100644 --- "a/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" +++ "b/build/solutions/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" @@ -1,6 +1,3 @@ -// https://github.com/codeisneverodd/programmers-coding-test -// 완벽한 정답이 아닙니다. -// 정답 1 - minjongbaek function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수 return m .replace(/C#/g, 'c') diff --git "a/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" "b/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" similarity index 53% rename from "level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" rename to "build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" index 75ad8eb..965485a 100644 --- "a/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" +++ "b/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(msg) { const outputs = []; const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))]; @@ -32,24 +29,3 @@ function solution(msg) { return outputs; } -// 정답 2 - ssi02014 -function solution(msg) { - const result = []; - const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i)) - - // 시간 복잡도 O(N^2) - const lastWordAndCompression = msg.split("").reduce((acc, cur) => { - const nextWord = acc + cur; - const nextWordIdx = dict.indexOf(nextWord); - const prevWordIdx = dict.indexOf(acc); - - if (nextWordIdx !== -1) return acc + cur; - dict.push(nextWord); - - if (prevWordIdx !== -1) result.push(prevWordIdx + 1); - return cur; - }, ""); - - result.push(dict.indexOf(lastWordAndCompression) + 1); - return result; -} diff --git "a/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" "b/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" new file mode 100644 index 0000000..b88f0fd --- /dev/null +++ "b/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" @@ -0,0 +1,20 @@ +function solution(msg) { + const result = []; + const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i)) + + // 시간 복잡도 O(N^2) + const lastWordAndCompression = msg.split("").reduce((acc, cur) => { + const nextWord = acc + cur; + const nextWordIdx = dict.indexOf(nextWord); + const prevWordIdx = dict.indexOf(acc); + + if (nextWordIdx !== -1) return acc + cur; + dict.push(nextWord); + + if (prevWordIdx !== -1) result.push(prevWordIdx + 1); + return cur; + }, ""); + + result.push(dict.indexOf(lastWordAndCompression) + 1); + return result; +} diff --git "a/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" "b/build/solutions/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254/codeisneverodd.js" similarity index 80% rename from "level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" rename to "build/solutions/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254/codeisneverodd.js" index a645429..9d77106 100644 --- "a/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" +++ "b/build/solutions/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(files) { var answer = []; const numberRegex = /[0-9]+/ diff --git "a/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" "b/build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260/minjongbaek.js" similarity index 88% rename from "level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" rename to "build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260/minjongbaek.js" index 5425443..6eeb88f 100644 --- "a/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" +++ "b/build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260/minjongbaek.js" @@ -1,6 +1,3 @@ -// https://github.com/codeisneverodd/programmers-coding-test -// 완벽한 정답이 아닙니다. -// 정답 1 - minjongbaek function isPrime(number) { // 소수를 판별하는 함수 if (number < 2) return false; for (let i = 2; i * i <= number; i += 1) { diff --git "a/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" "b/build/solutions/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/jaewon1676.js" similarity index 74% rename from "level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" rename to "build/solutions/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/jaewon1676.js" index 1fff1ad..03a0421 100644 --- "a/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" +++ "b/build/solutions/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/jaewon1676.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 function solution (n, left, right) { const answer = []; diff --git "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..d8738da --- /dev/null +++ "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(numbers) { + var answer = ''; + numbers.sort(sortFunc) + answer = numbers.join('') + if (answer[0] === '0') return '0' + return answer; +} + +const sortFunc = (a, b) => { + const compareA = parseInt(a.toString() + b.toString()) + const compareB = parseInt(b.toString() + a.toString()) + return compareB - compareA +} + + diff --git "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" new file mode 100644 index 0000000..56f7e39 --- /dev/null +++ "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" @@ -0,0 +1,7 @@ +function solution(numbers) { + let stringNum = + numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b)); + + return stringNum[0] === '0' ? '0' : stringNum.join(''); +} + diff --git "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" new file mode 100644 index 0000000..59b67d0 --- /dev/null +++ "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" @@ -0,0 +1,3 @@ +function solution(numbers) { + return numbers.every(v => v === 0) ? "0" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(""); +} diff --git "a/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260/codeisneverodd.js" similarity index 83% rename from "level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" rename to "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260/codeisneverodd.js" index e63b228..052c1c8 100644 --- "a/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" +++ "b/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(board) { for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능 for (let col = 0; col < board[0].length; col++) { diff --git "a/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" "b/build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" similarity index 85% rename from "level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" rename to "build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" index 3569835..47eedd6 100644 --- "a/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" +++ "b/build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(places) { var answer = []; answer = places.map(place => { diff --git "a/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" "b/build/solutions/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" similarity index 94% rename from "level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" rename to "build/solutions/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" index 38689bc..b7a27ce 100644 --- "a/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" +++ "b/build/solutions/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" @@ -1,5 +1,3 @@ -// https://github.com/codeisneverodd/programmers-coding-test -//정답 1 - prove-ability function solution(maps) { // BFS 활용 const row = maps.length - 1, col = maps[0].length - 1; diff --git "a/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" "b/build/solutions/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230/codeisneverodd.js" similarity index 51% rename from "level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" rename to "build/solutions/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230/codeisneverodd.js" index 7d8de37..2dade70 100644 --- "a/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" +++ "b/build/solutions/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230/codeisneverodd.js" @@ -1,31 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(p) { - if (p.length === 0) return p - let bracketCount = 0 - let isURight = true - for (let i = 0; i < p.length; i++) { - bracketCount = p[i] === '(' ? bracketCount + 1 : bracketCount - 1 - if (bracketCount < 0) isURight = false - if (bracketCount === 0) { - const [u, v] = [p.slice(0, i + 1), p.slice(i + 1)] - if (isURight) { - return u + solution(v) - } else { - let emptyString = '(' + solution(v) + ')' - const slicedReversedString = u - .slice(1, u.length - 1) - .split('') - .map(bracket => bracket === '(' ? ')' : '(') - .join('') - return emptyString + slicedReversedString - } - } - } -} - -//정답 2 - codeisneverodd function solution(p) { if (p.length === 0) { return p diff --git "a/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" "b/build/solutions/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" similarity index 92% rename from "level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" rename to "build/solutions/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" index fc826c4..119b65c 100644 --- "a/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" +++ "b/build/solutions/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(s) { let answer = 0; let sArr = s.split('') diff --git "a/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" "b/build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 90% rename from "level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" rename to "build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" index f01e731..8eb2c63 100644 --- "a/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" +++ "b/build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(line) { const getCrossPoint = ([A, B, E], [C, D, F]) => { if (A * D - B * C === 0) return [Infinity, Infinity]; diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" new file mode 100644 index 0000000..5fa447d --- /dev/null +++ "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" @@ -0,0 +1,21 @@ +function solution(people, limit) { + people.sort((a, b) => a - b); // 오름차순 정렬 + + let cnt = 0; // 구명보트 개수 + + let front = 0; // 가장 몸무게가 작은 사람의 index + let last = people.length; // 가장 몸무게가 큰 사람의 index + + while (last > front) { + cnt++; + + const now = people.pop(); + last--; + + if (now + people[front] <= limit) { + front++; // shift() 연산의 비효율로 인해 front 사용 + } + } + + return cnt; +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" new file mode 100644 index 0000000..3dd0098 --- /dev/null +++ "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" @@ -0,0 +1,17 @@ +function solution(people, limit) { + let cnt = 0; + + people.sort((a, b) => {return a - b}) // 몸무게 오름차순 + + while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 + if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기 + people.pop() + people.shift() + } else { + people.pop() // 무거운사람을 뺴주자 + } + cnt++; + } + return cnt; +} // 4주차 2번 문제와 유사함 + diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" new file mode 100644 index 0000000..f4d280b --- /dev/null +++ "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" @@ -0,0 +1,23 @@ +function solution(people, limit) { + let count = 0; + // 오름차순 정렬 + people.sort((a, b) => a - b); + + // people 배열 요소가 있다면? + while(people.length) { + + // 요소 중 가장 큰 수인 마지막 요소를 가져온다 + let sum = people.pop(); + + // 요소 중 가장 작은 수를 더한다 + sum += people[0] + + // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거 + if(sum <= limit) people.shift(); + + count++; + } + + return count; +} + diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" new file mode 100644 index 0000000..539e7d8 --- /dev/null +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" @@ -0,0 +1,35 @@ +// 예제1) 입력값 : [93, 30, 55], [1, 30, 5] +function solution(progresses, speeds) { + // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열 + let countBox = []; + let completeBox = []; + for(k=1; k<100; k++){ + let complete = [] + for(i=0; i= 100){ + complete.push([i,k]); + progresses.splice(i,1,"end") + } + } + if(complete[0] != null)completeBox.push(...complete) + } + completeBox.sort((a,b) => a[0] - b[0]) + + //여기까지 한다면 console.log(completeBox) [ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. + // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 + + // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 + let count = 0; + completeBox.reduce((acc, cur, i) => { + if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 + if(i) countBox.push(count) + acc[0] = cur[1]; + count = 0; + count++ + }else{count++} + if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. + return acc + } ,[0]) + return countBox; +} diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" new file mode 100644 index 0000000..948bd85 --- /dev/null +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" @@ -0,0 +1,26 @@ +function solution(progresses, speeds) { + // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장 + const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i])); + + // 최초 배포날은 daysLeftArr의 첫 번째 요소 + let deployDay = daysLeftArr[0]; + // 각 배포에 몇 개의 기능이 배포될지 셀 변수 + let cnt = 0; + // 각 배포에 몇 개의 기능이 배포될지 저장할 배열 + const answer = []; + + // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포 + daysLeftArr.forEach((daysLeft) => { + if (deployDay < daysLeft) { + deployDay = daysLeft; + answer.push(cnt); + cnt = 0; + } + cnt++; + }); + answer.push(cnt); + + // 정답 반환 + return answer; +} + diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" new file mode 100644 index 0000000..a39fd34 --- /dev/null +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" @@ -0,0 +1,17 @@ +function solution(progresses, speeds) { + var answer = []; + const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index])) + console.log(remainDays) + let maxDay = remainDays[0] + answer.push(0) + for (let i = 0; i < remainDays.length; i++) { + if (remainDays[i] <= maxDay) { + answer[answer.length - 1] += 1 + } else { + answer.push(1) + maxDay = remainDays[i] + } + } + return answer; +} + diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" new file mode 100644 index 0000000..65fb1b7 --- /dev/null +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" @@ -0,0 +1,20 @@ +function solution(progresses, speeds) { + var answer = []; + while (progresses.length > 0) { + let done = 0 + progresses = progresses.map((prog, index) => prog + speeds[index]) + const length = progresses.length + for (let i = 0; i < length; i++) { + if (progresses[0] >= 100) { + progresses.shift() + speeds.shift() + done += 1 + } else { + break + } + } + if (done > 0) answer.push(done) + } + return answer; +} + diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" new file mode 100644 index 0000000..f556362 --- /dev/null +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" @@ -0,0 +1,25 @@ +function solution(progresses, speeds) { + // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열 + var answer = []; + // 각각의 기능이 몇 일 소요되는지 담은 큐 + let queue = []; + + for (let i = 0; i < speeds.length; i++) { + // 각각의 기능이 몇 일 걸리는지 계산 + let task = Math.ceil((100 - progresses[i]) / speeds[i]); + // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다. + queue.push(task); + + // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push() + // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화 + if(task > queue[0]) { + answer.push(queue.length-1); + // 큐 초기화 + queue = [task]; + } + } + + answer.push(queue.length); + return answer; + } + diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" new file mode 100644 index 0000000..029b4f2 --- /dev/null +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" @@ -0,0 +1,22 @@ +function solution(progresses, speeds) { + let answer = []; + + while(speeds.length > 0) { + for(let i=0;i= 100) { + progresses.shift(); + speeds.shift(); + count++; + } + if(count > 0) { // 결과 배열에 넣어주기 + answer.push(count); + } + } + return answer; +} + diff --git "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" new file mode 100644 index 0000000..2e5ac67 --- /dev/null +++ "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" @@ -0,0 +1,12 @@ +function solution(bridge_length, weight, truck_weights) { + const bridge = new Array(bridge_length).fill(0) + let tick = 0 + do { + tick++ + bridge.pop() + bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ? + bridge.unshift(truck_weights.shift()) : bridge.unshift(0) + } while (bridge.reduce((a, b) => a + b) !== 0) + return tick; +} + diff --git "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/jaewon1676.js" "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/jaewon1676.js" new file mode 100644 index 0000000..4be0d38 --- /dev/null +++ "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/jaewon1676.js" @@ -0,0 +1,23 @@ +function solution(bridge_length, weight, truck_weights) { + var answer = 0; // 총 걸리는 시간 + let bridge = []; // 다리를 건너는 트럭 + let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게 + + while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다. + answer++; // 1초 추가 + if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다. + bridge_weight -= bridge.shift(); + } + if (bridge_weight + truck_weights[0] > weight) { + bridge.push(0); + continue; + } + let truck_weight = truck_weights.shift(); + bridge.push(truck_weight); + bridge_weight += truck_weight; + } + + answer += bridge_length; + + return answer; + } \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" new file mode 100644 index 0000000..321b38c --- /dev/null +++ "b/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" @@ -0,0 +1,20 @@ +function solution(n) { + var answer = 0; + let find = false + const nCountOne = countOne(n.toString(2)) + let counter = 1 + while (!find) { + if (nCountOne === countOne((n + counter).toString(2))) { + answer = n + counter + find = true + } + counter++ + } + return answer; +} + +const countOne = (str) => { + return str.split('').reduce((sum, currentChar) => + currentChar === '1' ? sum += 1 : sum, 0) +} + diff --git "a/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" "b/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" new file mode 100644 index 0000000..88ea8a6 --- /dev/null +++ "b/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" @@ -0,0 +1,15 @@ +function solution(n) { + let i = n; + n = n.toString(2).match(/1/g).length; + while(true) { + i++; + const value = i.toString(2).match(/1/g).length; + if(n === value) return i; + } +} + +//정답 4 = ryan-dia +function solution(n) { + const count = (num) => num.toString(2).match(/1/g).length; + for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i +} diff --git "a/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" "b/build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 83% rename from "level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" rename to "build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 82a2ffe..001d337 100644 --- "a/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" +++ "b/build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(queue1, queue2) { const getSum = arr => arr.reduce((a, c) => a + c, 0); diff --git "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..678fa6a --- /dev/null +++ "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(land) { + for (let rowIndex = 1; rowIndex < land.length; rowIndex++) { + for (let colIndex = 0; colIndex < land[0].length; colIndex++) { + land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1)) + } + } + return Math.max(...land[land.length - 1]) +} diff --git "a/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" similarity index 59% rename from "level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" rename to "build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" index 8bf1c07..850b53d 100644 --- "a/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" +++ "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 function solution(land) { var answer = 0; @@ -18,12 +15,3 @@ function solution(land) { 2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다. 3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/ -//정답 2 - codeisneverodd -function solution(land) { - for (let rowIndex = 1; rowIndex < land.length; rowIndex++) { - for (let colIndex = 0; colIndex < land[0].length; colIndex++) { - land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1)) - } - } - return Math.max(...land[land.length - 1]) -} diff --git "a/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" "b/build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" similarity index 67% rename from "level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" rename to "build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" index c9ba82a..94fb473 100644 --- "a/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" +++ "b/build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(n) { if (n < 2) return 1; const count = [0, 1, 2, ...Array(n - 2).fill(0)]; diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" new file mode 100644 index 0000000..8a0f924 --- /dev/null +++ "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" @@ -0,0 +1,17 @@ +function solution(w, h) { + var answer = 1; + const gcd = greatestCommonDivisor2(w, h) + const erasedBoxInUnit = h / gcd + w / gcd - 1 + answer = w * h - erasedBoxInUnit * gcd + return answer; +} + +let greatestCommonDivisor2 = (a, b) => { + while (b > 0) { + let r = a % b; + a = b; + b = r; + } + return a; +} + diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" new file mode 100644 index 0000000..73e82ae --- /dev/null +++ "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" @@ -0,0 +1,15 @@ +// 유클리드 호제법을 이용한 최대 공약수 구하기 +function gcd(w, h) { + let mod = w % h; // w와 h의 나머지를 구합니다. + + if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다. + return h; + } + // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다. + return gcd(h, mod); +} +function solution(w, h) { + const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다. + return w * h - (w + h - gcdVal); +} + diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" new file mode 100644 index 0000000..107d9b0 --- /dev/null +++ "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" @@ -0,0 +1,11 @@ +function solution(w,h){ + const slope = h / w; + let cnt = 0; + //대각선 아래에 위치한 도형의 개수를 구합니다. + //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다. + for(let i = 1; i <= w; i++){ + cnt += Math.ceil(slope * i); + } + //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다. + return ((w*h - cnt) * 2); +} diff --git "a/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" "b/build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" similarity index 91% rename from "level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" rename to "build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" index 9c0aa7d..a895900 100644 --- "a/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" +++ "b/build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(orders, course) { var answer = []; for (const selectNum of course) { diff --git "a/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" "b/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" similarity index 88% rename from "level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" rename to "build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" index e1df7ce..ce79ddd 100644 --- "a/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" +++ "b/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(word) { const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 }; const price = calculatePrice([1], 5); diff --git "a/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" similarity index 66% rename from "level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" rename to "build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" index 05381fc..70bb823 100644 --- "a/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" +++ "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" @@ -1,31 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = 0; - let lengthArr = [] - for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length) - answer = Math.min(...lengthArr) - return answer; -} - -function compressedString(str, unitNum) { - let count = 1 - let result = [''] - for (let repeat = 0; repeat <= str.length / unitNum; repeat++) { - const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum) - if (result[result.length - 1] === slicedGroup) { - count++ - } else { - if (count > 1) result[result.length - 1] = count + result[result.length - 1] - result.push(slicedGroup) - count = 1 - } - } - return result.join('') -} - -//정답 2 - chaerin-dev function solution(s) { // len: 압축 전 문자열 길이 const len = s.length; diff --git "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" new file mode 100644 index 0000000..5930b96 --- /dev/null +++ "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" @@ -0,0 +1,24 @@ +function solution(s) { + var answer = 0; + let lengthArr = [] + for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length) + answer = Math.min(...lengthArr) + return answer; +} + +function compressedString(str, unitNum) { + let count = 1 + let result = [''] + for (let repeat = 0; repeat <= str.length / unitNum; repeat++) { + const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum) + if (result[result.length - 1] === slicedGroup) { + count++ + } else { + if (count > 1) result[result.length - 1] = count + result[result.length - 1] + result.push(slicedGroup) + count = 1 + } + } + return result.join('') +} + diff --git "a/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" "b/build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" similarity index 87% rename from "level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" rename to "build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" index 116fd33..8536ddf 100644 --- "a/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" +++ "b/build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(dirs) { const move = ([x, y], dir) => { let next = [x, y]; diff --git "a/build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" new file mode 100644 index 0000000..13fc78a --- /dev/null +++ "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" @@ -0,0 +1,53 @@ +//다익스트라 + 선형탐색 +function solution ( N, road, K ) +{ + const roadsTable = {}; //전체 도로 정보 + + // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 + for ( let i = 1; i <= N; i++ ) + { + roadsTable[ i ] = []; + } + road.forEach( road => + { + let [ sp, ep, dist ] = road; + roadsTable[ sp ].push( [ ep, dist ] ); + roadsTable[ ep ].push( [ sp, dist ] ); + } ); + + function djikstra ( sp ) + { + const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 + const queue = []; + + queue.push( [sp, 0] ); + + while ( queue.length > 0 ) + { + const [ ep, val ] = queue.shift(); + if ( dist[ ep ] > val ) + { + dist[ ep ] = val; + const nexts = roadsTable[ ep ]; + if ( nexts ) + { + nexts.forEach( n => + { + let [ nextEp, nextVal ] = n; + //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 + if ( dist[ nextEp ] > val + nextVal ) + { + queue.push( [ nextEp, val + nextVal ] ); + } + } ); + } + } + } + // 거리가 K이하인 지점의 개수 반환 + const result = dist.filter( d => d <= K ).length; + return result; + } + + const answer = djikstra( 1 ); + return answer; +} \ No newline at end of file diff --git "a/level-2/\353\260\260\353\213\254&12978&.js" "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" similarity index 73% rename from "level-2/\353\260\260\353\213\254&12978&.js" rename to "build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" index fb70325..82a85af 100644 --- "a/level-2/\353\260\260\353\213\254&12978&.js" +++ "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" @@ -1,7 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. - -//정답 1 - pereng11 // 다익스트라 + 최소힙 O( N * logN ) // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 class MinHeap{ @@ -134,57 +130,3 @@ function solution ( N, road, K ) return answer; } -//정답 2 - pereng11 O(N * N); -//다익스트라 + 선형탐색 -function solution ( N, road, K ) -{ - const roadsTable = {}; //전체 도로 정보 - - // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 - for ( let i = 1; i <= N; i++ ) - { - roadsTable[ i ] = []; - } - road.forEach( road => - { - let [ sp, ep, dist ] = road; - roadsTable[ sp ].push( [ ep, dist ] ); - roadsTable[ ep ].push( [ sp, dist ] ); - } ); - - function djikstra ( sp ) - { - const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 - const queue = []; - - queue.push( [sp, 0] ); - - while ( queue.length > 0 ) - { - const [ ep, val ] = queue.shift(); - if ( dist[ ep ] > val ) - { - dist[ ep ] = val; - const nexts = roadsTable[ ep ]; - if ( nexts ) - { - nexts.forEach( n => - { - let [ nextEp, nextVal ] = n; - //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 - if ( dist[ nextEp ] > val + nextVal ) - { - queue.push( [ nextEp, val + nextVal ] ); - } - } ); - } - } - } - // 거리가 K이하인 지점의 개수 반환 - const result = dist.filter( d => d <= K ).length; - return result; - } - - const answer = djikstra( 1 ); - return answer; -} \ No newline at end of file diff --git "a/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" "b/build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" similarity index 95% rename from "level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" rename to "build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" index 8281b8c..e4209fd 100644 --- "a/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" +++ "b/build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" @@ -1,6 +1,3 @@ -// https://github.com/codeisneverodd/programmers-coding-test -// 완벽한 정답이 아닙니다. -// 정답 1 - minjongbaek // 빛의 이동을 위한 DX, DY 변수를 선언합니다. const DX = [-1, 1, 0, 0]; diff --git "a/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" "b/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" new file mode 100644 index 0000000..b7f85ef --- /dev/null +++ "b/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" @@ -0,0 +1,17 @@ +function solution(n) { + const snail = Array.from(Array(n), (_, index) => Array(index + 1)); + let currentNum = 0; + let [currentRow, currentCol] = [-1, 0]; + let shouldMove = n; + while (shouldMove > 0) { + for (let i = 0; i < shouldMove; i++) + snail[++currentRow][currentCol] = ++currentNum; + for (let i = 0; i < shouldMove - 1; i++) + snail[currentRow][++currentCol] = ++currentNum; + for (let i = 0; i < shouldMove - 2; i++) + snail[--currentRow][--currentCol] = ++currentNum; + shouldMove -= 3; + } + return snail.flatMap((num) => num); +} + diff --git "a/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" "b/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" similarity index 53% rename from "level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" rename to "build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" index c381952..f90eb62 100644 --- "a/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" +++ "b/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" @@ -1,24 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - const snail = Array.from(Array(n), (_, index) => Array(index + 1)); - let currentNum = 0; - let [currentRow, currentCol] = [-1, 0]; - let shouldMove = n; - while (shouldMove > 0) { - for (let i = 0; i < shouldMove; i++) - snail[++currentRow][currentCol] = ++currentNum; - for (let i = 0; i < shouldMove - 1; i++) - snail[currentRow][++currentCol] = ++currentNum; - for (let i = 0; i < shouldMove - 2; i++) - snail[--currentRow][--currentCol] = ++currentNum; - shouldMove -= 3; - } - return snail.flatMap((num) => num); -} - -//정답 2 - jaewon1676 function solution(n) { const answer = new Array(n).fill().map((e, i) => new Array(i + 1)); // 이차원배열을 만들어준다 diff --git "a/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" "b/build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" similarity index 89% rename from "level-2/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" rename to "build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" index 92bec52..57b7c43 100644 --- "a/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" +++ "b/build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(numbers) { var answer = 0; const numArr = numbers.split('') diff --git "a/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" "b/build/solutions/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224/codeisneverodd.js" similarity index 89% rename from "level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" rename to "build/solutions/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224/codeisneverodd.js" index 5849a47..b9b46f9 100644 --- "a/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" +++ "b/build/solutions/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(expression) { var answer = 0; const mathExp = ['*', '+', '-'] diff --git "a/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" "b/build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" similarity index 91% rename from "level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" rename to "build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" index 97d5caa..7639358 100644 --- "a/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" +++ "b/build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(infos, queries) { const infoData = {}; diff --git "a/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" "b/build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" similarity index 90% rename from "level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" rename to "build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" index 7bb5d51..625e3e4 100644 --- "a/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" +++ "b/build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - iHoHyeon function solution(begin, end) { return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx)); // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다. diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" new file mode 100644 index 0000000..46db7ff --- /dev/null +++ "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(n) { //수학적 풀이는 별도로 하지 않았습니다. + var answer = 0; + for (let i = 1; i <= n; i++) { + let sum = 0 + for (let j = i; j <= n; j++) { + sum += j + if (sum >= n) { + if (sum === n) answer++ + break + } + } + } + return answer; +} + diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" new file mode 100644 index 0000000..85b014a --- /dev/null +++ "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" @@ -0,0 +1,16 @@ +function solution(n) { + let answer = 0; + for(let i = 1; i <= n; i++) { + let sum = 0; + for(let j = i; j <= n; j++) { + sum += j; + if(sum > n) break; + if(n === sum) { + answer++; + break; + } + } + } + return answer; +} + diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" new file mode 100644 index 0000000..9c884c9 --- /dev/null +++ "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" @@ -0,0 +1,16 @@ +function solution(n) { + /* + 정답 = n의 홀수 약수의 개수 + 15의 홀수 약수 : 1,3,5,15 + 1+2+3+4+5=15 (중간값 3) + 4+5+6=15 (중간값 5) + 7+8=15 (연속된 값) + 15=15 (15) + */ + let result = 0; + + for (let i = 1; i <= n; i++) { + if (n % i == 0 && i % 2 == 1) result++; + } + return result; +} diff --git "a/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" "b/build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" similarity index 76% rename from "level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" rename to "build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" index 7143bb8..6d1e0d5 100644 --- "a/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" +++ "b/build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(skill, skill_trees) { var answer = 0; for (const tree of skill_trees) { diff --git "a/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" "b/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" similarity index 96% rename from "level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" rename to "build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" index 3ac8103..fd9e4a8 100644 --- "a/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" +++ "b/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd // 문제 풀이 전략 // 1. 라이언이 쏠 수 있는 모든 경우를 비교한다. // 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다. diff --git "a/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" "b/build/solutions/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" similarity index 72% rename from "level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" rename to "build/solutions/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" index d3a5449..eceaa27 100644 --- "a/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" +++ "b/build/solutions/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n, words) { var answer = []; let turn = 1 diff --git "a/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" "b/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" new file mode 100644 index 0000000..d233665 --- /dev/null +++ "b/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" @@ -0,0 +1,13 @@ + +function solution(n, a, b) { + let currentRound = 1; + const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호 + while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다. + if (myNextNumber(a) === myNextNumber(b)) break + a = myNextNumber(a) + b = myNextNumber(b) + currentRound++ + } + return currentRound +} + diff --git "a/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" "b/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" similarity index 56% rename from "level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" rename to "build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" index c2072b6..609dfc6 100644 --- "a/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" +++ "b/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" @@ -1,20 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd - -function solution(n, a, b) { - let currentRound = 1; - const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호 - while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다. - if (myNextNumber(a) === myNextNumber(b)) break - a = myNextNumber(a) - b = myNextNumber(b) - currentRound++ - } - return currentRound -} - -//정답 2 - le2sky function solution(n, a, b) { let arr = Array.from({ length: n }, () => 0) arr[b - 1] = "B" diff --git "a/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" similarity index 57% rename from "level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" rename to "build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" index 259d864..8073e9c 100644 --- "a/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" +++ "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" @@ -1,44 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(record) { - var answer = []; - const users = {} - record.map(history => { - const [action, id, name] = history.split(' ') - if (action !== 'Leave') users[id] = name - }) - record.map(history => { - const [action, id, name] = history.split(' ') - if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`) - if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`) - }) - return answer; -} - -//정답 2 - jaewon1676 -function solution(record) { - let answer = []; - const map = new Map(); - - for (let i = 0; i < record.length; ++i) { - const [state, uid, name] = record[i].split(' '); - - if (state == 'Leave') { - answer.push([uid, '님이 나갔습니다.']); - - continue; - } - - if (state == 'Enter') { - answer.push([uid, '님이 들어왔습니다.']); - } - map.set(uid, name); - } - return answer.map(ele => map.get(ele[0]) + ele[1]); -} - -//정답 3 - chaerin-dev function solution(record) { // 최종 메시지를 저장할 배열 let result = []; diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" new file mode 100644 index 0000000..d591b45 --- /dev/null +++ "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(record) { + var answer = []; + const users = {} + record.map(history => { + const [action, id, name] = history.split(' ') + if (action !== 'Leave') users[id] = name + }) + record.map(history => { + const [action, id, name] = history.split(' ') + if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`) + if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`) + }) + return answer; +} + diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" new file mode 100644 index 0000000..9466287 --- /dev/null +++ "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" @@ -0,0 +1,21 @@ +function solution(record) { + let answer = []; + const map = new Map(); + + for (let i = 0; i < record.length; ++i) { + const [state, uid, name] = record[i].split(' '); + + if (state == 'Leave') { + answer.push([uid, '님이 나갔습니다.']); + + continue; + } + + if (state == 'Enter') { + answer.push([uid, '님이 들어왔습니다.']); + } + map.set(uid, name); + } + return answer.map(ele => map.get(ele[0]) + ele[1]); +} + diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" "b/build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" new file mode 100644 index 0000000..93962be --- /dev/null +++ "b/build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" @@ -0,0 +1,18 @@ +function solution(clothes) { + // 각 카테고리별 의상의 수를 clothsObj 객체에 저장 + const clothsObj = {}; + clothes.forEach((cloth) => + clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1) + ); + + // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐 + // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나) + // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨 + let answer = 1; + for (let key of Object.keys(clothsObj)) { + answer *= clothsObj[key] + 1; + } + + // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기 + return answer - 1; +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" "b/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" new file mode 100644 index 0000000..f3f7c99 --- /dev/null +++ "b/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" @@ -0,0 +1,13 @@ +function solution(clothes) { + var answer = 0; + const spyWear = {}; + for (const clothNPart of clothes) { + if (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = []; + spyWear[clothNPart[1]].push(clothNPart[0]); + } + const clothesCount = []; + for (const part in spyWear) clothesCount.push(spyWear[part].length + 1); + answer = + clothesCount.reduce((previous, current) => previous * current, 1) - 1; + return answer; +} diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" "b/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" new file mode 100644 index 0000000..a99e84c --- /dev/null +++ "b/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" @@ -0,0 +1,20 @@ +function solution(clothes) { + let answer = 1; + // 옷 종류 + const types = {}; + // 반복문 최적화 - length, 비교연산 제거 + const length = clothes.length; + for (let i = length; i--; ) { + // 해당 옷의 종류가 없다면 종류 1 + if (!types[clothes[i][1]]) types[clothes[i][1]] = 1; + // 해당 옷의 종류가 있다면 종류 증가 + else types[clothes[i][1]] += 1; + } + // (종류 별 값 + 1 ) 을 다 곱셈 + Object.values(types).forEach((v) => { + answer *= v + 1; + }); + + return answer - 1; +} + diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" "b/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" new file mode 100644 index 0000000..5d1e28f --- /dev/null +++ "b/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" @@ -0,0 +1,22 @@ +function solution(clothes) { + var answer = 1; + var obj={}; + for(var i=0;i 1){ + let reamain = s.replace(/0/g,"").length + box[0] += 1 + box[1] += (s.length - reamain) + s = reamain.toString(2) + } + return box; +} diff --git "a/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" "b/build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" similarity index 55% rename from "level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" rename to "build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" index 1b98e04..d11f9c5 100644 --- "a/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" +++ "b/build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(s) { const removeZero = s => { const removed = s @@ -19,14 +16,3 @@ function solution(s) { return convertToBinary(s, 0, 0); } -// 정답 2 - RyanDeclan -function solution(s) { - let box = [0,0] - while(s.length > 1){ - let reamain = s.replace(/0/g,"").length - box[0] += 1 - box[1] += (s.length - reamain) - s = reamain.toString(2) - } - return box; -} diff --git "a/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" "b/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" similarity index 86% rename from "level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" rename to "build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" index f57dd57..38af1fc 100644 --- "a/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" +++ "b/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(n, wires) { const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b); diff --git "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" new file mode 100644 index 0000000..2e6de0a --- /dev/null +++ "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" @@ -0,0 +1,13 @@ +function solution(n) { + var ans = 0; + while (n > 0) { + if (n % 2 !== 0) { + n = (n - 1) / 2 + ans++ + } else { + n = n / 2 + } + } + return ans; +} + diff --git "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" new file mode 100644 index 0000000..f02a49d --- /dev/null +++ "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" @@ -0,0 +1,8 @@ +function solution(n) { + let result = 0; + while (n > 0) { + result += n % 2; + n = Math.floor(n / 2); + } + return result; +} diff --git "a/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" "b/build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" similarity index 89% rename from "level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" rename to "build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" index 334f36b..817534e 100644 --- "a/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" +++ "b/build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(name) { var answer = 0; const length = name.length; diff --git "a/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" "b/build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" similarity index 93% rename from "level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" rename to "build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" index d93a2cf..243e4d2 100644 --- "a/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" +++ "b/build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - ljw0096 function solution(fees, records) { const answer = [] diff --git "a/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" "b/build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" similarity index 86% rename from "level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" rename to "build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" index bc7b2e5..c62fc27 100644 --- "a/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" +++ "b/build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(n, k) { const getFactorial = n => { const result = [1, 1, 2, ...Array(n - 2)]; diff --git "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..8175fc4 --- /dev/null +++ "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(s) { + var answer = -1; + let notPairStack = [] + notPairStack.push(s[0]) + for (let i = 1; i < s.length; i++) { + if (notPairStack[notPairStack.length - 1] === s[i]) { + notPairStack.pop() + } else { + notPairStack.push(s[i]) + } + } + answer = notPairStack.length === 0 ? 1 : 0 + return answer; +} + diff --git "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..e76f3e9 --- /dev/null +++ "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" @@ -0,0 +1,19 @@ + +function solution(s){ + let cnt = 0; // 빼준 부분을 카운트 해줍니다 + let answer; + let stack = [] + for (let i of s){ + if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다 + stack.pop(); + cnt++;; + } else { + stack.push(i) + } + } + + (s.length / 2 == cnt ? answer = 1 : answer = 0 ) + // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다 + return answer; + } + // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다 \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" new file mode 100644 index 0000000..a53c229 --- /dev/null +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" @@ -0,0 +1,7 @@ +function solution(s) { + var answer = ''; + const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b) + answer = arr[0] + ' ' + arr[arr.length - 1] + return answer; +} + diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" new file mode 100644 index 0000000..3d2aecc --- /dev/null +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" @@ -0,0 +1,8 @@ +function solution(s) { + s = s.split(' ') + s.sort((a, b) => {return a - b}) // 오름차순 정렬 + let small = s[0] // s의 최솟값 + let large = s[s.length - 1] // s의 최댓값 + return (small + ' ' + large) +} + diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" new file mode 100644 index 0000000..28fdfdd --- /dev/null +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" @@ -0,0 +1,5 @@ +function solution(s) { + s = s.split(" ").map((v) => parseInt(v, 10)) + return `${Math.min(...s)} ${Math.max(...s)}`; +} + diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" new file mode 100644 index 0000000..5974653 --- /dev/null +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" @@ -0,0 +1,6 @@ +function solution(s) { + let arr = s.split(" ").sort((a, b) => a - b); + arr.splice(1, arr.length - 2, " "); + let result = arr.join(""); + return result; +} diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..8da93ed --- /dev/null +++ "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(A, B) { + var answer = 0; + A = A.sort((a, b) => a - b) + B = B.sort((a, b) => b - a) + for (let i = 0; i < A.length; i++) answer += A[i] * B[i] + return answer; +} + diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" new file mode 100644 index 0000000..9d1977c --- /dev/null +++ "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" @@ -0,0 +1,12 @@ +function solution(A,B){ + let sum = 0; + A.sort((a, b) => a - b); + B.sort((a, b) => b - a); + + for(let i = 0, len = A.length; i < len; i++) { + sum += A[i] * B[i]; + } + + return sum; +} + diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" new file mode 100644 index 0000000..130b25b --- /dev/null +++ "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" @@ -0,0 +1,5 @@ +function solution(A, B) { + A.sort((a, b) => a - b); + B.sort((a, b) => b - a); + return A.reduce((t, n, i) => t + n * B[i], 0); +} diff --git "a/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" "b/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" new file mode 100644 index 0000000..ef95b0f --- /dev/null +++ "b/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" @@ -0,0 +1,13 @@ +function solution(brown, yellow) { + var answer = []; + const size = brown + yellow + answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0] + return answer; +} + +function widthHeightPair(size) { + let result = [] + for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i]) + return result +} + diff --git "a/level-2/\354\271\264\355\216\253&42842&.js" "b/build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" similarity index 65% rename from "level-2/\354\271\264\355\216\253&42842&.js" rename to "build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" index 147962f..beeda9d 100644 --- "a/level-2/\354\271\264\355\216\253&42842&.js" +++ "b/build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" @@ -1,20 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(brown, yellow) { - var answer = []; - const size = brown + yellow - answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0] - return answer; -} - -function widthHeightPair(size) { - let result = [] - for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i]) - return result -} - -//정답 2 - jaewon1676 function solution(brown, yellow) { var answer = []; let sum = brown + yellow; diff --git "a/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260&68936&.js" "b/build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" similarity index 81% rename from "level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260&68936&.js" rename to "build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" index 9799c20..c5768e0 100644 --- "a/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260&68936&.js" +++ "b/build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd function solution(arr) { const quad = matrix => { const length = matrix.length; diff --git "a/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..6f3d566 --- /dev/null +++ "b/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(number, k) { + var answer = ''; + let answerStack = [0] + let deleteCount = -1 + for (let i = 0; i < number.length; i++) { + while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) { + answerStack.pop() + deleteCount++ + } + if (answerStack.length < number.length - k) answerStack.push(number[i]) + } + answer = answerStack.join('') + return answer; +} + diff --git "a/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" new file mode 100644 index 0000000..169c4e7 --- /dev/null +++ "b/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -0,0 +1,17 @@ +function solution(number, k) { + const stack = []; + let answer = ''; + + for(let i=0; i 0 && stack[stack.length-1] < el){ + stack.pop(); + k--; + } + stack.push(el); + } + stack.splice(stack.length-k, k); + answer = stack.join(""); + return answer; +} + \ No newline at end of file diff --git "a/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" "b/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" new file mode 100644 index 0000000..9cdfb19 --- /dev/null +++ "b/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" @@ -0,0 +1,13 @@ +function solution(numbers, target) { + var answer = 0; + const binaryLength = numbers.length; + const binary = 2 ** binaryLength; + for (let i = 0; i < binary; i++) { + const numSlice = numbers.slice(); + const binaryString = i.toString(2).padStart(binaryLength, '0'); + for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null; + const calculated = numSlice.reduce((prev, current) => prev + current); + if (calculated === target) answer += 1; + } + return answer; +} diff --git "a/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" "b/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" new file mode 100644 index 0000000..603596f --- /dev/null +++ "b/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" @@ -0,0 +1,20 @@ +function solution(numbers, target) { + let answer = 0; + + dfs(0, 0); + return answer; + + function dfs(index, sum) { + // 재귀 종료 + if (index === numbers.length) { + if (sum === target) { + answer++; + } + return; + } + + dfs(index + 1, sum + numbers[index]); + dfs(index + 1, sum - numbers[index]); + } +} + diff --git "a/level-2/\355\212\234\355\224\214&64065&.js" "b/build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" similarity index 56% rename from "level-2/\355\212\234\355\224\214&64065&.js" rename to "build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" index bcdce86..dcbb1db 100644 --- "a/level-2/\355\212\234\355\224\214&64065&.js" +++ "b/build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" @@ -1,18 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = []; - let sets = s - .slice(2, -2) - .split('},{') - .map(set => set.split(',').map(x => parseInt(x))) - .sort((a, b) => a.length - b.length) - for (const set of sets) answer.push(...set.filter(x => !answer.includes(x))) - return answer; -} - -//정답 2 - chaerin-dev function solution(s) { // 문자열 -> 정수 이차원 배열 const sArr = s diff --git "a/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" "b/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" new file mode 100644 index 0000000..1c28948 --- /dev/null +++ "b/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" @@ -0,0 +1,11 @@ +function solution(s) { + var answer = []; + let sets = s + .slice(2, -2) + .split('},{') + .map(set => set.split(',').map(x => parseInt(x))) + .sort((a, b) => a.length - b.length) + for (const set of sets) answer.push(...set.filter(x => !answer.includes(x))) + return answer; +} + diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" new file mode 100644 index 0000000..6c95047 --- /dev/null +++ "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" @@ -0,0 +1,47 @@ +//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다. +function solution(priorities, location) { + let answer = 0; + const printer = new Queue; + priorities.forEach((priority, index) => { + printer.enqueue([priority, index]) + }) + while (printer.size() > 0) { + const check = printer.dequeue() + const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length + if (countHigherPriority > 0) { + printer.enqueue(check) + } else { + answer += 1 + if (check[1] === location) break + } + + } + return answer; +} + +class Queue { + constructor() { + this.queue = [] + this.front = 0 + this.rear = 0 + } + + enqueue(value) { + this.queue[this.rear++] = value + } + + dequeue() { + const value = this.queue[this.front] + delete this.queue[this.front] + this.front += 1 + return value + } + + peek() { + return this.queue(this.front) + } + + size() { + return this.rear - this.front + } +} diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" new file mode 100644 index 0000000..65b9a71 --- /dev/null +++ "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" @@ -0,0 +1,19 @@ +function solution(priorities, location) { + var answer = priorities.map((priority, index) => { + return { + index, + priority + }; + }); + + let queue = []; + + while(answer.length > 0){ + const first = answer.shift(); + const isPriority = answer.some((p) => p.priority > first.priority); + isPriority ? answer.push(first) : queue.push(first); + } + const idx = queue.findIndex(p => p.index === location) + 1; + return idx; + } + diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" new file mode 100644 index 0000000..e91ddc0 --- /dev/null +++ "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" @@ -0,0 +1,22 @@ +function solution(priorities, location) { + var answer = 0; + while (true) { + + if (priorities[0] < Math.max(...priorities)) { + if (location - 1 < 0) location = priorities.length + priorities.push(priorities.shift()) + location--; + } else { + answer++; + if (location - 1 < 0) { + return answer; + } + priorities.shift() + location--; + } + console.log(priorities, location, answer) + + } + return answer +} + diff --git "a/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" "b/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" similarity index 86% rename from "level-2/\355\224\274\353\241\234\353\217\204&87946&.js" rename to "build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" index 94a234d..5ee306e 100644 --- "a/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" +++ "b/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - pereng11 //완전 탐색, greedy O(N^2) function solution(currentFatigue, dungeons) { return getMaxCount(currentFatigue, 0, dungeons); diff --git "a/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" similarity index 55% rename from "level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" rename to "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" index ec16495..bb45511 100644 --- "a/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" +++ "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { var answer = 0; answer = fibonacci1234567(n) @@ -15,16 +12,3 @@ function fibonacci1234567(n) { //재귀적으로 하면 시간초과 return fiboArr[n] } -//정답 2 - jaewon1676 -function solution(n) { - let f_1 = 0; - let f_2 = 1; - - for (let i=2; i<=n; i++) { - let temp = (f_1 + f_2) % 1234567; - f_1 = f_2; - f_2 = temp; - } - - return f_2; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/jaewon1676.js" "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/jaewon1676.js" new file mode 100644 index 0000000..523a6f5 --- /dev/null +++ "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/jaewon1676.js" @@ -0,0 +1,12 @@ +function solution(n) { + let f_1 = 0; + let f_2 = 1; + + for (let i=2; i<=n; i++) { + let temp = (f_1 + f_2) % 1234567; + f_1 = f_2; + f_2 = temp; + } + + return f_2; +} \ No newline at end of file diff --git "a/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" "b/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" similarity index 89% rename from "level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" rename to "build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" index 5b57c2d..2571a9d 100644 --- "a/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" +++ "b/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { return move(1, 3, 2, n); } diff --git "a/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" "b/build/solutions/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" similarity index 91% rename from "level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" rename to "build/solutions/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" index 0a90412..41cd67a 100644 --- "a/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" +++ "b/build/solutions/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(rows, columns, queries) { var answer = []; let matrix = new Array(rows) diff --git "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" new file mode 100644 index 0000000..e6d9f1d --- /dev/null +++ "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" @@ -0,0 +1,13 @@ +function solution(arr1, arr2) { + const [row, col] = [arr1.length, arr2[0].length] + let answer = new Array(row); + for (let i = 0; i < row; i++) answer[i] = new Array(col) + //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값 + for (let i = 0; i < row; i++) { + for (let j = 0; j < col; j++) { + answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0) + } + } + return answer; +} + diff --git "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/prove-ability.js" "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/prove-ability.js" new file mode 100644 index 0000000..ab7ace0 --- /dev/null +++ "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/prove-ability.js" @@ -0,0 +1,16 @@ +function solution(arr1, arr2) { + var answer = []; + // 행만큼 반복 + for(let i = 0, len = arr1.length; i < len; i++) { + const arr = [] + // 열만큼 반복 + for(let j = 0, len = arr1[i].length; j < len; j++) { + // 각의 배열에서 행을 더해서 arr push + arr.push(arr1[i][j] + arr2[i][j]) + } + // 열 만큼 추가된 arr 를 answer 가 추가 + answer.push(arr) + } + + return answer; +} \ No newline at end of file diff --git "a/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" "b/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" similarity index 94% rename from "level-2/\355\233\204\353\263\264\355\202\244&42890&.js" rename to "build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" index b0d86e8..d5724f0 100644 --- "a/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" +++ "b/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(relation) { //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다. //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다. diff --git "a/build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" new file mode 100644 index 0000000..ea9bc73 --- /dev/null +++ "b/build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" @@ -0,0 +1,3 @@ +function solution(n) { + //정답을 다른 방법으로도 작성했다면 추가해 주세요! +} diff --git "a/level-3/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" "b/build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" similarity index 79% rename from "level-3/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" rename to "build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" index aeacf60..bf5be3f 100644 --- "a/level-3/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" +++ "b/build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 function solution(n) { let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력, if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다. diff --git a/level-2/N-Queen&12952&.js b/build/solutions/level-3/N-Queen/codeisneverodd.js similarity index 93% rename from level-2/N-Queen&12952&.js rename to build/solutions/level-3/N-Queen/codeisneverodd.js index 8d36ad5..425ebc0 100644 --- a/level-2/N-Queen&12952&.js +++ b/build/solutions/level-3/N-Queen/codeisneverodd.js @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n) { /* 1. 0번째 행에 0번째 queen을 놓는다. diff --git "a/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" "b/build/solutions/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234/codeisneverodd.js" similarity index 83% rename from "level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" rename to "build/solutions/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234/codeisneverodd.js" index f454cf7..154bb1a 100644 --- "a/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" +++ "b/build/solutions/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n, edge) { const graph = Array.from(Array(n + 1), () => []) for (const [src, dest] of edge) { diff --git "a/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" "b/build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" similarity index 89% rename from "level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" rename to "build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" index a4fa59d..816dae4 100644 --- "a/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" +++ "b/build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n, computers) { let answer = 0 const visited = new Array(n).fill(false) diff --git "a/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" "b/build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" similarity index 92% rename from "level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" rename to "build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" index eb6f1b4..69803dd 100644 --- "a/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" +++ "b/build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 function solution(routes) { let cctv = 1; // cctv의 개수는 최소 1개 routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬 diff --git "a/build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" "b/build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" new file mode 100644 index 0000000..712c75b --- /dev/null +++ "b/build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" @@ -0,0 +1,20 @@ +//Map과 고차함수를 적극적으로 이용한 풀이 +function solution(genres, plays) { + const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]} + genres + .map((genre, id) => [genre, plays[id]]) + .forEach(([genre, play], id) => { + const data = genreMap.get(genre) || {totalPlay: 0, songs: []} + genreMap.set(genre, { + totalPlay: data.totalPlay + play, + songs: [...data.songs, {play: play, id: id}] + .sort((a, b) => b.play - a.play) + .slice(0, 2) + }) + }) + + return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...] + .sort((a, b) => b[1].totalPlay - a[1].totalPlay) + .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs] + .map(song => song.id) +} \ No newline at end of file diff --git "a/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" "b/build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" similarity index 89% rename from "level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" rename to "build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" index 2317d7b..64bfb39 100644 --- "a/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" +++ "b/build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(tickets) { const routes = [] //최종 가능 루트들을 담을 배열 const makeRoutes = (currentDepart, remainTickets, currentRoute) => { diff --git "a/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" "b/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" similarity index 89% rename from "level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" rename to "build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" index 560abe0..9af5677 100644 --- "a/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" +++ "b/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 function solution(operations) { var answer = []; for (let i = 0; i < operations.length; i++) { diff --git "a/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" "b/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" similarity index 83% rename from "level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" rename to "build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" index 0a93d02..845e230 100644 --- "a/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" +++ "b/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd function solution(n, times) { //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right let [left, right] = [1, Math.max(...times) * n]; diff --git "a/build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" new file mode 100644 index 0000000..ea9bc73 --- /dev/null +++ "b/build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" @@ -0,0 +1,3 @@ +function solution(n) { + //정답을 다른 방법으로도 작성했다면 추가해 주세요! +} diff --git "a/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" "b/build/solutions/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211/ryong9rrr.js" similarity index 92% rename from "level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" rename to "build/solutions/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211/ryong9rrr.js" index 77e4b6e..a2b8792 100644 --- "a/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" +++ "b/build/solutions/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211/ryong9rrr.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ryong9rrr class Node { constructor(value = '') { this.value = value diff --git "a/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" "b/build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" similarity index 93% rename from "level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" rename to "build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" index ce5fae8..b89e088 100644 --- "a/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" +++ "b/build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd //코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90 function solution(strs, t) { const tLength = t.length; //자주 쓰는 값 미리 계산 diff --git "a/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" "b/build/solutions/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214/ryong9rrr.js" similarity index 82% rename from "level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" rename to "build/solutions/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214/ryong9rrr.js" index 54b4060..18081cc 100644 --- "a/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" +++ "b/build/solutions/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214/ryong9rrr.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ryong9rrr function solution(food_times, k) { const total = food_times.reduce((a, b) => a + b) if (total <= k) { diff --git "a/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" "b/build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" similarity index 52% rename from "level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" rename to "build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" index 168bc5f..16aba7c 100644 --- "a/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" +++ "b/build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" @@ -1,6 +1,3 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - cg10036 function solution(n) { const fact = n => n ? BigInt(n) * fact(n - 1) : 1n; return fact(n * 2) / (fact(n) * fact(n + 1)); diff --git "a/build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" new file mode 100644 index 0000000..be760a1 --- /dev/null +++ "b/build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" @@ -0,0 +1,3 @@ +function solution(n) { + //정답을 다른 방법으로도 작성했다면 추가해 주세요! +} \ No newline at end of file diff --git a/build/utils/db.js b/build/utils/db.js new file mode 100644 index 0000000..ffc269a --- /dev/null +++ b/build/utils/db.js @@ -0,0 +1,41 @@ +import { nanoid } from 'nanoid'; +import { makeDir, readFile, writeFile } from './file.js'; +export const getDB = () => JSON.parse(readFile('results/db.json')); +export const writeDB = (content) => writeFile({ + dirName: 'results', + fileName: `db.json`, + content: JSON.stringify(content), +}); +/** Sol 하나를 DB 및 파일에 추가 */ +export const addSol = ({ author, code, probId }) => { + const { probs, sols } = getDB(); + const { level, title } = probs.find((prob) => prob.id === probId); + const addToFiles = () => { + const newDir = `solutions/level-${level}/${title}`; + makeDir(newDir); + writeFile({ + dirName: newDir, + fileName: `${author}.js`, + content: code, + }); + }; + const addToDB = () => { + const newSol = { + id: nanoid(), + author, + code, + probId, + }; + writeDB({ + probs, + sols: [...sols.filter((sol) => !(sol.author === newSol.author && sol.probId === newSol.probId)), newSol], + }); + }; + addToFiles(); + addToDB(); +}; +/** DB 전체를 파일로 변환 */ +export const dbToFile = () => { + const { sols } = getDB(); + sols.forEach((sol) => addSol(sol)); +}; diff --git a/build/utils/file.js b/build/utils/file.js new file mode 100644 index 0000000..77ba9d7 --- /dev/null +++ b/build/utils/file.js @@ -0,0 +1,26 @@ +import * as fs from 'fs'; +import path, { dirname } from 'path'; +import { fileURLToPath } from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); +/** build 폴더 기준 절대경로를 사용하세요 */ +export const makeDir = (_path) => { + if (fs.existsSync(path.join(__dirname, '../', _path))) + return; + fs.mkdirSync(path.join(__dirname, '../', _path), { recursive: true }); +}; +/** build 폴더 기준 절대경로를 사용하세요 */ +export const writeFile = ({ dirName, fileName, content }) => { + const _path = `${dirName}/${fileName}`; + // if (fs.existsSync(path.join(__dirname, _path))) return; + fs.writeFileSync(path.join(__dirname, '../', _path), content); +}; +/** build 폴더 기준 절대경로를 사용하세요 */ +export const readFile = (_path) => { + return fs.readFileSync(path.join(__dirname, '../', _path), { + encoding: 'utf-8', + }); +}; +/** build 폴더 기준 절대경로를 사용하세요 */ +export const readDir = (dirName) => { + return fs.readdirSync(path.join(__dirname, '../', dirName)); +}; diff --git "a/level-0/369\352\262\214\354\236\204&120891&.js" "b/level-0/369\352\262\214\354\236\204&120891&.js" deleted file mode 100644 index 4e4415e..0000000 --- "a/level-0/369\352\262\214\354\236\204&120891&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(order) { - return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length; -} diff --git "a/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" "b/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" deleted file mode 100644 index 873de1e..0000000 --- "a/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array) { - return [...array.join('')].filter(a => a === '7').length; -} diff --git "a/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" "b/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" deleted file mode 100644 index 9d44755..0000000 --- "a/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, numlist) { - return numlist.filter(num => num % n === 0); -} diff --git "a/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" "b/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" deleted file mode 100644 index 94afcdf..0000000 --- "a/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(rsp) { - const win = { 0: 5, 2: 0, 5: 2 }; - return [...rsp].map(num => win[num]).join(''); -} diff --git "a/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" "b/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" deleted file mode 100644 index a861b97..0000000 --- "a/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array) { - const max = Math.max(...array); - return [max, array.indexOf(max)]; -} diff --git "a/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" "b/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" deleted file mode 100644 index dc0a2c4..0000000 --- "a/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 % num2; -} diff --git "a/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" "b/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" deleted file mode 100644 index 26db990..0000000 --- "a/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(age) { - return 2022 - age + 1; -} diff --git "a/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" "b/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" deleted file mode 100644 index 99e32c9..0000000 --- "a/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 * num2; -} diff --git "a/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" "b/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" deleted file mode 100644 index 3f9065f..0000000 --- "a/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return Math.floor((num1 / num2) * 1000); -} diff --git "a/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" "b/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" deleted file mode 100644 index 48d89cb..0000000 --- "a/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 - num2; -} diff --git "a/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" "b/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" deleted file mode 100644 index 514526e..0000000 --- "a/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 + num2 -} \ No newline at end of file diff --git "a/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" "b/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" deleted file mode 100644 index 0a70867..0000000 --- "a/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array, height) { - return array.filter(a => a > height).length; -} diff --git "a/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" "b/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" deleted file mode 100644 index 9781d17..0000000 --- "a/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return my_string.replace(/[aeiou]/g, ''); -} diff --git "a/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" "b/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" deleted file mode 100644 index d199103..0000000 --- "a/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return Math.floor(num1 / num2); -} diff --git "a/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" "b/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" deleted file mode 100644 index 16b267b..0000000 --- "a/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string, n) { - return [...my_string].map(char => char.repeat(n)).join(''); -} diff --git "a/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" "b/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" deleted file mode 100644 index d0c4618..0000000 --- "a/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return eval(my_string); -} diff --git "a/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" "b/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" deleted file mode 100644 index e728b21..0000000 --- "a/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return [...my_string].reverse().join(''); -} diff --git "a/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" "b/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" deleted file mode 100644 index 61a3f82..0000000 --- "a/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return my_string - .match(/[0-9]/g) - .map(str => +str) - .sort((a, b) => a - b); -} diff --git "a/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" "b/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" deleted file mode 100644 index 09dea0e..0000000 --- "a/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(str1, str2) { - return str1.includes(str2) ? 1 : 2; -} diff --git "a/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" "b/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" deleted file mode 100644 index 7637b49..0000000 --- "a/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - return numbers.map(n => n * 2); -} diff --git "a/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" "b/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" deleted file mode 100644 index d6d4759..0000000 --- "a/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num_list) { - return num_list.reverse(); -} diff --git "a/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" "b/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" deleted file mode 100644 index 32ac56e..0000000 --- "a/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(strlist) { - return strlist.map(s => s.length); -} diff --git "a/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" "b/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" deleted file mode 100644 index c04d4df..0000000 --- "a/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers, num1, num2) { - return numbers.slice(num1, num2 + 1); -} diff --git "a/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" "b/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" deleted file mode 100644 index fa9550c..0000000 --- "a/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s1, s2) { - return s1.filter(s => s2.includes(s)).length; -} diff --git "a/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" "b/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" deleted file mode 100644 index c97a515..0000000 --- "a/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - return numbers.reduce((a, c) => a + c, 0) / numbers.length; -} diff --git "a/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" "b/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" deleted file mode 100644 index a4e0b37..0000000 --- "a/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" +++ /dev/null @@ -1,14 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(sides) { - const min = Math.min(...sides); - const max1 = Math.max(...sides); - const max2 = min + max1 - 1; - return max2 - (max1 - min); -} - -//정답 2 - codeisneverodd -function solution(sides) { - return Math.min(...sides) * 2 - 1; -} diff --git "a/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" "b/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" deleted file mode 100644 index 0dffb96..0000000 --- "a/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, t) { - return n * 2 ** t; -} diff --git "a/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" "b/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" deleted file mode 100644 index 08f71f5..0000000 --- "a/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0); -} diff --git "a/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" "b/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" deleted file mode 100644 index 3e9246a..0000000 --- "a/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 === num2 ? 1 : -1; -} diff --git "a/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" "b/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" deleted file mode 100644 index 1d3b080..0000000 --- "a/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(money) { - return [Math.floor(money / 5500), money % 5500]; -} diff --git "a/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" "b/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" deleted file mode 100644 index 960f78a..0000000 --- "a/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(cipher, code) { - return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), ''); -} diff --git "a/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" "b/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" deleted file mode 100644 index 81b2485..0000000 --- "a/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, k) { - return n * 12000 + (k - Math.floor(n / 10)) * 2000; -} diff --git "a/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" "b/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" deleted file mode 100644 index 996b91b..0000000 --- "a/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(age) { - return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join(''); -} \ No newline at end of file diff --git "a/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" "b/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" deleted file mode 100644 index ea257ef..0000000 --- "a/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(bin1, bin2) { - return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2); -} diff --git "a/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" "b/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" deleted file mode 100644 index 0b60127..0000000 --- "a/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0); -} diff --git "a/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" "b/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" deleted file mode 100644 index b84f0fd..0000000 --- "a/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(dot) { - const [x, y] = dot; - if (y > 0) return x > 0 ? 1 : 2; - return x < 0 ? 3 : 4; -} diff --git "a/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" "b/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" deleted file mode 100644 index 5c55144..0000000 --- "a/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - return Number.isInteger(Math.sqrt(n)) ? 1 : 2; -} diff --git "a/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" "b/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" deleted file mode 100644 index 9ec19bc..0000000 --- "a/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(M, N) { - return M * N - 1; -} diff --git "a/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" "b/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" deleted file mode 100644 index ba6a201..0000000 --- "a/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(box, n) { - return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n); -} diff --git "a/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" "b/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" deleted file mode 100644 index f2e5f0e..0000000 --- "a/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return [...new Set(my_string)].join(''); -} diff --git "a/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" "b/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" deleted file mode 100644 index 4428b1a..0000000 --- "a/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array, n) { - return array.filter(a => a === n).length; -} diff --git "a/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" "b/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" deleted file mode 100644 index ed158ed..0000000 --- "a/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array) { - return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]; -} diff --git "a/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" "b/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" deleted file mode 100644 index bcd34e7..0000000 --- "a/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - const [first, second, ...rest] = numbers.sort((a, b) => b - a); - return first * second; -} diff --git "a/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" "b/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" deleted file mode 100644 index 32889ce..0000000 --- "a/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" +++ /dev/null @@ -1,43 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(keyinput, board) { - const moves = { - up: [0, 1], - down: [0, -1], - left: [-1, 0], - right: [1, 0], - }; - const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; - - return keyinput - .map(key => moves[key]) - .reduce( - ([x, y], [mX, mY]) => (Math.abs(x + mX) > rangeX || Math.abs(y + mY) > rangeY ? [x, y] : [x + mX, y + mY]), - [0, 0] - ); -} - -//정답 2 - codeisneverodd -//명령형 -function solution(keyinput, board) { - const moves = { - up: [0, 1], - down: [0, -1], - left: [-1, 0], - right: [1, 0], - }; - const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; - - let pos = [0, 0]; - - keyinput - .map(key => moves[key]) - .forEach(move => { - if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return; - pos[0] += move[0]; - pos[1] += move[1]; - }); - - return pos; -} diff --git "a/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" "b/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" deleted file mode 100644 index bb9f820..0000000 --- "a/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string, letter) { - return my_string.replaceAll(letter, ''); -} diff --git "a/level-0/\355\216\270\354\247\200&120898&.js" "b/level-0/\355\216\270\354\247\200&120898&.js" deleted file mode 100644 index a146a61..0000000 --- "a/level-0/\355\216\270\354\247\200&120898&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(message) { - return message.length * 2; -} diff --git "a/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" "b/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" deleted file mode 100644 index 06cac15..0000000 --- "a/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - return Math.floor((n - 1) / 7) + 1; -} diff --git "a/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" "b/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" deleted file mode 100644 index f37f5b7..0000000 --- "a/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(slice, n) { - return Math.floor((n - 1) / slice) + 1; -} diff --git "a/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" "b/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" deleted file mode 100644 index 86a6c59..0000000 --- "a/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - 본인의 깃허브 아이디 -function solution(n) { - //프로그래머스에 제출하여 통과된 함수를 복사 붙여넣기 해주세요! -} - -//정답 2 - 본인의 깃허브 아이디 -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/level-1/2016\353\205\204&12901&.js" "b/level-1/2016\353\205\204&12901&.js" deleted file mode 100644 index 64caabd..0000000 --- "a/level-1/2016\353\205\204&12901&.js" +++ /dev/null @@ -1,65 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(a, b) { - let count = 0; - const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - for (let i = 1; i < a; i++) count += month[i]; - count += b; - return day[(count + 4) % 7]; // 금요일 부터 1일 이므로 -} - -//정답 2 - yongchanson -function solution(a, b) { - const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - const week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]; - - let sum = b; - for ( - let i = 0; - i < a - 1; - i++ //ex)5월인 경우 1~4월까지 더해준다. - ) - sum += month[i]; - - return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다. -} - -//정답 3 - chaerin-dev -function solution(a, b) { - let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - let dateStr = "2016-" + a + "- " + b; - let date = new Date(dateStr); - return week[date.getDay()]; -} - -//정답 4 - chaerin-dev -function solution(a, b) { - let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수 - let passedDays = 0; - // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌 - for (let i = 1; i < a; i++) passedDays += arr[i]; - // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌 - passedDays += b - 1; - return week[(5 + passedDays) % 7]; -} - -//정답 5 - prove-ability -function solution(a, b) { - var answer = ""; - // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? - const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - // 2016년 1월 1일은 금요일로 4를 더해준다 - let totalDays = 4; - // a 이전 모든 달의 일 수를 더한다 - for (let i = 0, len = a - 1; i < len; i++) { - totalDays += daysOfMonth[i]; - } - // totalDays 와 해당 일을 더해주고 7로 나눈 나머지 - const dayIndex = (totalDays + b) % 7; - return days[dayIndex]; -} diff --git "a/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" "b/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" deleted file mode 100644 index cd1e85a..0000000 --- "a/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" +++ /dev/null @@ -1,37 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return parseInt(n.toString(3).split("").reverse().join(""), 3); -} - -//정답 2 - codeisneverodd -function solution(n) { - var answer = 0; - const ternaryReversed = decimalToTernaryReversed(n); - answer = parseInt(ternaryReversed, 3); - return answer; -} - -const decimalToTernaryReversed = (num) => { - let ternary = ""; - while (num >= 3) { - ternary += (num % 3).toString(); - num = Math.floor(num / 3); - } - ternary += num.toString(); - return ternary; -}; - -//정답 3 - jaewon1676 -function solution(n) { - var answer = n.toString(3).split("").reverse().join(""); - - return parseInt(answer, 3); -} - - -//정답 4 - prove-ability -function solution(n) { - return parseInt(n.toString(3).split("").reverse().join(""), 3) -} diff --git "a/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" "b/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" deleted file mode 100644 index b843b25..0000000 --- "a/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" +++ /dev/null @@ -1,60 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(array, commands) { - return commands.map((cmd) => { - const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b); - return arrCmd[cmd[2] - 1]; - }); -} - -//정답 2 - jaewon1676 -function solution(array, commands) { - var result = []; - var temp = []; - for (var i = 0; i < commands.length; i++) { - temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => { - return a - b; - }); - console.log(temp); - result.push(temp[commands[i][2] - 1]); - } - return result; -} - -// 정답 3 - prove-ability -function solution(array, commands) { - var answer = []; - commands.forEach(([i, j, k]) => { - const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1]; - answer.push(su); - }); - return answer; -} - -//정답 4 - createhb21 - -function solution(array, commands) { - let answer = []; - for (let i = 0; i < commands.length; i++) { - let eachCommand = commands[i]; - let slice = array.slice(eachCommand[0] - 1, eachCommand[1]); - answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]); - } - return answer; -} - -// 정답 5 - chaerin-dev -function solution(array, commands) { - let t = commands.length; - let answer = []; - while (t--) { - let command = commands.shift(); - answer.push( - array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[ - command[2] - 1 - ] - ); - } - return answer; -} diff --git "a/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" "b/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" deleted file mode 100644 index 572270d..0000000 --- "a/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" +++ /dev/null @@ -1,62 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n, arr1, arr2) { - const answer = []; - for (let i = 0; i < n; i++) { - let row = (arr1[i] | arr2[i]).toString(2); //Bitwise - row = "0".repeat(n - row.length) + row; - row = row.replace(/[10]/g, (a) => (+a ? "#" : " ")); - answer.push(row); - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(n, arr1, arr2) { - var answer = []; - let mapA = []; - let mapB = []; - for (let i = 0; i < n; i++) { - let rowArrA = arr1[i].toString(2).split(""); - let rowArrB = arr2[i].toString(2).split(""); - for (let j = 0, len = rowArrA.length; j < n - len; j++) - rowArrA.unshift("0"); - for (let j = 0, len = rowArrB.length; j < n - len; j++) - rowArrB.unshift("0"); - mapA.push(rowArrA); - mapB.push(rowArrB); - } - let answer2D = mapA.slice(); - for (let i = 0; i < n; i++) { - for (let j = 0; j < n; j++) { - answer2D[i][j] = mapA[i][j] === "0" && mapB[i][j] === "0" ? " " : "#"; - } - } - answer = answer2D.map((row) => row.join("")); - return answer; -} - -//정답 3 - jaewon1676 -function solution(n, arr1, arr2) { - let answer = []; - for (let i = 0; i < n; i++) { - let temp = (arr1[i] | arr2[i]).toString(2); - let line = []; // 한 행의 모든 2진수 보관 - - for (let j = temp.length - n; j < temp.length; j++) { - if (temp[j] == 1) { - line.push("#"); - } else { - line.push(" "); - } - } - answer.push(line.join("")); - } - return answer; -} - -/* 풀이 과정 -1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다. -2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다. -3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/ diff --git "a/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" "b/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" deleted file mode 100644 index 6cd7f95..0000000 --- "a/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" +++ /dev/null @@ -1,41 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(x, n) { - return Array.from(Array(n), (_, index) => x * (index + 1)); -} - -//정답 2 - chaerin-dev -function solution(x, n) { - var answer = []; - let add_gap = x; - // n번 반복 - for (let i = 0; i < n; i++) { - answer.push(x); // 처음 배열에 넣을 x - x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가 - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(n) { - let str = ""; - for (let i = 0; i < n; i++) { - // 삼항 연산자와 +로 문자열을 붙여주어 추가. - i % 2 == 0 ? (str = str + "수") : (str = str + "박"); - } - return str; -} - -// 정답 4 - prove-ability -function solution(x, n) { - var answer = []; - let i = 1; - // n개 지니는 리스트를 리턴해야 합니다 - while (answer.length !== n) { - // x부터 시작해 x씩 증가하는 숫자 - answer.push(x * i); - i++; - } - return answer; -} diff --git "a/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" "b/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" deleted file mode 100644 index 9422925..0000000 --- "a/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s.length % 2 !== 0 - ? s[Math.floor(s.length / 2)] - : s.slice(s.length / 2 - 1, s.length / 2 + 1); -} - -//정답 2 - yongchanson -function solution(s) { - var answer = ""; - let L2 = s.length / 2; - - answer = - s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]); - - return answer; -} - -//정답 3 - prove-ability -function solution(s) { - var answer = ''; - // 중간 지점 찾기 - const point = Math.floor(s.length / 2); - // 짝수인 경우 - (중간지점 - 1) + 중간지점 - if(s.length % 2 ===0) answer = s[point - 1] + s[point]; - // 홀수인 경우 - 중간지점 - else answer = s[point]; - return answer; -} - -// 정답 4 - chaerin-dev -function solution(s) { - return s.length % 2 - ? s[parseInt(s.length / 2)] - : s[s.length / 2 - 1] + s[s.length / 2]; -} - -// 정답 5 - jaewon1676 -function solution(s) { - var answer = ''; - - if (s.length % 2 == 0 ) { // 짝수일 경우, - answer = s[s.length / 2 - 1] + s[s.length / 2]; - } else { - answer = s[parseInt(s.length / 2)]; // 홀수일 경우 - } - return answer; -} diff --git "a/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" "b/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" deleted file mode 100644 index bdf875e..0000000 --- "a/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" +++ /dev/null @@ -1,43 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr) { - return arr.filter((element, index) => element !== arr[index + 1]); -} - -//정답 2 - codeisneverodd -function solution(arr) { - var answer = [arr[0]]; - for (let i = 1; i < arr.length; i++) { - //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다. - answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null; - } - return answer; -} - -//정답 3 - chaerin-dev -function solution(arr) { - // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고, - // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용 - // 첫 번째 요소의 경우 undefined와 비교 - return arr.filter((item, index) => item !== arr[index - 1]); -} - -// 정답 4 - prove-ability -function solution(arr) { - let answer = []; - // 이중 배열을 사용해서 포인터?를 두 개를 사용한다 - for (let i = 0, len = arr.length - 1; i < len; i++) { - // i 의 다음수를 비교하기 위해 j = (i + 1) - for (let j = i + 1, len = arr.length; j < len; j++) { - // i 와 j 번째 값이 같이 않다면 - if (arr[i] !== arr[j]) { - answer.push(arr[i]); - i = j - 1; - break; - } - } - } - answer.push(arr[arr.length - 1]); - return answer; -} diff --git "a/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" "b/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" deleted file mode 100644 index f79492e..0000000 --- "a/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" +++ /dev/null @@ -1,35 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr, divisor) { - const answer = arr.filter((element) => element % divisor === 0); - answer.length === 0 ? answer.push(-1) : answer.sort((a, b) => a - b); - return answer; -} - -//정답 2 - codeisneverodd -function solution(arr, divisor) { - var answer = []; - arr.forEach((element) => { - element % divisor === 0 ? answer.push(element) : null; - }); - answer.length === 0 ? answer.push(-1) : null; - answer.sort((a, b) => a - b); - return answer; -} - -//정답 3. chaerin-dev -function solution(arr, divisor) { - let answer = []; - arr.forEach((e) => { - if (e % divisor === 0) answer.push(e); - }); - return answer.length ? answer.sort((a, b) => a - b) : [-1]; -} - -//정답 4 - prove-ailbity -function solution(arr, divisor) { - var answer = []; - arr.forEach((v) => v % divisor === 0 && answer.push(v)) - return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b); -} diff --git "a/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" "b/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" deleted file mode 100644 index 56d4913..0000000 --- "a/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" +++ /dev/null @@ -1,36 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - - let answer = 0; - for (let divisor = n - 1; divisor >= 2; divisor--) { - if (n % divisor === 1) answer = divisor; - } - return answer; -} - -//정답 2 - prove-ability -function solution(n) { - var answer = 0; - let i = 0; - while(true) { - if(n % i === 1) { - answer = i; - break; - } - i++; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(n) { - var answer = 0; - for (let i=1; i x + y * b[i], 0); -} - -//정답 2 - yongchanson -function solution(a, b) { - var answer = 0; - - for (i = 0; i < a.length; i++) { - answer += a[i] * b[i]; - } - return answer; -} - -//정답 3 - prove-ability -function solution(a, b) { - var answer = 0; - - for (let i = 0, len = a.length; i < len; i++) { - answer += a[i] * b[i]; - } - - return answer; -} - -//정답 4 - jaewon1676 -function solution(a, b) { - let answer = 0; - for (let i=0; i acc + e * b[i], 0); -} diff --git "a/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" "b/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" deleted file mode 100644 index 2c079cd..0000000 --- "a/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" +++ /dev/null @@ -1,26 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(numbers) { - const answer = []; - for (let i = 0; i < numbers.length; i++) { - for (let j = i + 1; j < numbers.length; j++) { - answer.push(numbers[i] + numbers[j]); - } - } - return [...new Set(answer)].sort((a, b) => a - b); -} - -//정답 2 - prove-ability -function solution(numbers) { - const answer = []; - - for(let i = 0, len = numbers.length; i < len; i++) { - for(let j = i + 1, len = numbers.length; j < len; j++) { - if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j]) - } - } - - return answer.sort((a, b) => a - b); -} - diff --git "a/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" "b/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" deleted file mode 100644 index 618db2f..0000000 --- "a/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" +++ /dev/null @@ -1,47 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(a, b) { - let answer = 0; - for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { - answer += i; - } - return answer; -} - -//정답 2 - chaerin-dev -function solution(a, b) { - let answer = 0; - for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { - answer += i; - } - return answer; -} - -//정답 3 - prove-ability -function solution(a, b) { - let answer = 0; - for(let i = Math.min(a, b), len = Math.max(a, b); i <= len; i++) { - answer += i; - } - return answer; -} - -//정답 4 - prove-ability -function solution(a, b) { - return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0); -} - -//정답 5 - jaewon1676 -function solution(a, b) { - if (b < a){ // b가 a보다 큰 수가 되도록 해준다. - let c = b - b = a - a = c - } - let sum = 0; // 합을 구할 변수 - for (let i=a; i<=b; i++){ - sum += i - } - return sum; -} diff --git "a/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" "b/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" deleted file mode 100644 index c4166f3..0000000 --- "a/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" +++ /dev/null @@ -1,151 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(lottos, win_nums) { - const zeroCount = lottos.filter((e) => e === 0).length; - const matchCount = win_nums.filter((e) => lottos.includes(e)).length; - const matchToRank = [6, 6, 5, 4, 3, 2, 1]; - const lowRank = matchToRank[matchCount]; - const highRank = zeroCount === 6 ? 1 : matchToRank[matchCount + zeroCount]; - - return [highRank, lowRank]; -} - -//정답 2 - codeisneverodd -function solution(lottos, win_nums) { - // 0이 없는 경우 > 최저 순위 == 최고 순위 - // 0이 있는 경우 > 모두 0인경우 > 1위 - // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위 - // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함. - // 순위는 7 - hit - // 최종적으로 7위인 경우 6위로 변경 - var answer = []; - if (lottos.indexOf(0) === -1) { - answer[0] = answer[1] = 7 - hit(lottos, win_nums); - } else { - const zeroCount = lottos.length - [...new Set(lottos)].length + 1; - answer[1] = 7 - hit(lottos, win_nums); - zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount); - } - for (let i = 0; i < 2; i++) { - answer[i] >= 7 ? (answer[i] = 6) : null; - } - return answer; -} - -function hit(lottos, win_nums) { - let result = 0; - lottos.forEach((element) => { - win_nums.indexOf(element) === -1 ? null : (result += 1); - }); - return result; -} - -// 정답 3 - jaewon1676 -function solution(lottos, win_nums) { - var answer = []; - const correct = lottos.filter((lotto) => win_nums.includes(lotto)).length; - // lottos배열을 순회하며 당첨배열에 있는 수를 return 하고 총 개수를 correct에 저장 - - const zeros = lottos.filter((lotto) => lotto === 0).length; - // lottos배열을 순회하며 0인 총 개수를 zeros에 저장 - - let min = 7 - correct >= 6 ? 6 : 7 - correct; - - let max = min - zeros < 1 ? 1 : min - zeros; - - answer = [max, min]; - - return answer; -} - -// 정답 4 - jaewon1676 -function solution(lottos, win_nums) { - var answer = []; - let max = 7; - let min = 7; - console.log(lottos); - console.log(win_nums); - for (let i = 0; i < 6; i++) { - if (lottos.includes(win_nums[i])) { - max--; - } - } - min = max; - for (let i = 0; i < 6; i++) { - if (lottos[i] == 0) min--; - } - if (max == 7) max = 6; - if (min == 7) min = 6; - answer = [min, max]; - return answer; -} - -//정답 5 - yongchanson -function solution(lottos, win_nums) { - //최고당첨개수 : maxPoint + basicPoint - //최저당첨개수 : basicPoint - - let basicPoint = 0; - let maxPoint = 0; - let answer = []; - - lottos.forEach(function (lottos_item) { - win_nums.forEach(function (win_nums_item) { - if (lottos_item == win_nums_item) { - basicPoint++; - } - }); - }); - - lottos.forEach(function (item) { - if (item == 0) { - maxPoint++; - } - }); - - maxPoint + basicPoint >= 2 - ? answer.push(7 - maxPoint - basicPoint) - : answer.push(6); - basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6); - - return answer; -} - -//정답 6 - prove-ability -function solution(lottos, win_nums) { - // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화 - let winCount = 0; - let zeroCount = 0; - // 내 로또 번호 하니씩 접근 - lottos.forEach((num) => { - // 번호가 0이 아니고 당첨 번호라면 - if (num !== 0 && win_nums.includes(num)) { - winCount++; - // 번호가 0이라면 - } else if (num === 0) { - zeroCount++; - } - }); - // 일치한 수와 등수는 반비례하기 때문에 빼기 7 - // 이때 등수를 벗어나면 낙첨(6) 으로 고정 - let max = 7 - (winCount + zeroCount); - if (max > 5) max = 6; - let min = 7 - winCount; - if (min > 5) min = 6; - - return [max, min]; -} - -//정답 7 - chaerin-dev -function solution(lottos, win_nums) { - let zeroCount = 0; - let winCount = 0; - lottos.forEach((item) => { - if (item === 0) zeroCount++; - else if (win_nums.includes(item)) winCount++; - }); - let maxRank = Math.min(7 - (winCount + zeroCount), 6); - let minRank = Math.min(7 - winCount, 6); - return [maxRank, minRank]; -} diff --git "a/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" "b/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" deleted file mode 100644 index c91c3b1..0000000 --- "a/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" +++ /dev/null @@ -1,135 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(answers) { - const answer = []; - const firstPattern = [1, 2, 3, 4, 5]; - const firstPLength = firstPattern.length; - const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5]; - const secondPLength = secondPattern.length; - const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; - const thirdLength = thirdPattern.length; - let correctCount = [0, 0, 0]; - - for (let i = 0, len = answers.length; i < len; i++) { - if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1; - if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1; - if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1; - } - - const maxScore = Math.max(...correctCount); - for (let i = 0; i < 3; i++) { - if (correctCount[i] === maxScore) answer.push(i + 1); - } - - return answer; -} - -// 완벽한 정답이 아닙니다. -// 정답 2 - prove-ability -function solution(answers) { - let result = []; - - let players = { - 1: { - pattern: [1, 2, 3, 4, 5], - count: 0, - }, - 2: { - pattern: [2, 1, 2, 3, 2, 4, 2, 5], - count: 0, - }, - 3: { - pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5], - count: 0, - }, - }; - let max = 0; - answers.forEach((answer, index) => { - for (let [key, { pattern }] of Object.entries(players)) { - // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가 - if (pattern[index % pattern.length] === answer) { - players[key].count++; - // 제일 높은 count 구하기 - if (max < players[key].count) max = players[key].count; - } - } - }); - // players 중에 count 가 max 와 값이 같다면 result 추가 - for (let [key, { count }] of Object.entries(players)) { - if (count === max) result.push(parseInt(key, 10)); - } - - return result; -} - -//정답 3 - yongchanson -function solution(answers) { - let score = []; - let answer = []; - let a1 = [1, 2, 3, 4, 5]; - let a2 = [2, 1, 2, 3, 2, 4, 2, 5]; - let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; - - score.push(answers.filter((a, i) => a === a1[i % a1.length]).length); - score.push(answers.filter((a, i) => a === a2[i % a2.length]).length); - score.push(answers.filter((a, i) => a === a3[i % a3.length]).length); - - for (let i = 0; i < score.length; i++) { - const max = Math.max(...score); - if (score[i] === max) { - answer.push(i + 1); - } - } - - return answer; -} - -//정답 4 - jaewon1676 -function solution(answers) { - let arr1 = [1,2,3,4,5] - let arr2 = [2,1,2,3,2,4,2,5] - let arr3 = [3,3,1,1,2,2,4,4,5,5] - - let score = [0, 0, 0] - for (let i=0; i { - for (let j = 0; j < pattern.length; j++) { - const patternLength = pattern[j].length; - if (answer === pattern[j][i % patternLength]) scores[j]++; - } - }); - - const answer = []; - const maxScore = Math.max(...scores); - scores.forEach((score, i) => { - if (score === maxScore) answer.push(i + 1); - }); - return answer; -} \ No newline at end of file diff --git "a/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" "b/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" deleted file mode 100644 index 098a7aa..0000000 --- "a/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" +++ /dev/null @@ -1,36 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - const countP = [...s.matchAll(/p/gi)].length; - const countY = [...s.matchAll(/y/gi)].length; - return countP === countY; -} - -//정답 2 - yongchanson -function solution(s) { - p = s.toLowerCase().split("p").length; - y = s.toLowerCase().split("y").length; - - return p == y ? true : false; -} - -//정답 3 - chaerin-dev -function solution(s) { - let pCount = s.split(/p/i).length - 1; - let yCount = s.split(/y/i).length - 1; - return pCount === yCount; -} -// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다. -// Ex. "ababb".split("a") 의 결과는 ["", "b", "bb"] -// => 즉, "a"의 갯수는 3에서 1을 뺀 2 - -// 정답 4 - prove-ability -function solution(s){ - // 배열로 변환 - s = s.split(""); - // filter 를 사용해 갯수 추출 - const pCount = s.filter((v) => v === "p" || v === "P").length; - const yCount = s.filter((v) => v === "y" || v === "Y").length; - return pCount === yCount; -} \ No newline at end of file diff --git "a/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" "b/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" deleted file mode 100644 index 0353a7c..0000000 --- "a/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" +++ /dev/null @@ -1,35 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(strings, n) { - return strings.sort((a, b) => { - if (a[n] < b[n]) return -1; - if (a[n] > b[n]) return 1; - if (a[n] === b[n]) return a < b ? -1 : 1; - return 0; - }); -} - -//정답 2 - chaerin-dev -function solution(strings, n) { - return strings.sort((a, b) => { - // 인덱스 n번째 글자를 기준으로 오름차순 정렬 - if (a[n] > b[n]) return 1; - else if (a[n] < b[n]) return -1; - // 인덱스 n번째 글자가 같으면 사전순 정렬 - else return a > b ? 1 : -1; - }); -} - -// 정답 3 - prove-ability -function solution(strings, n) { - // 정렬 - strings.sort((a, b) => { - // n번째 클자가 같다면 사전순 - if(a[n].charCodeAt() === b[n].charCodeAt()) { - return a > b ? 1 : -1; - } else return a[n].charCodeAt() - b[n].charCodeAt(); - }); - - return strings; -} diff --git "a/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" "b/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" deleted file mode 100644 index 3d0a5fa..0000000 --- "a/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s - .split("") - .sort((a, b) => { - if (a < b) return 1; - if (a > b) return -1; - return 0; - }) - .join(""); -} - -//정답 2 - chaerin-dev -function solution(s) { - // 문자열 -> 배열 -> 정렬 -> 순서뒤집기 -> 문자열 - return s.split("").sort().reverse().join(""); -} - -//정답 3 - chaerin-dev -function solution(s) { - return s.split("").sort((a, b) => (a < b ? 1 : -1)).join(""); -} - - -//정답 4 - prove-ability -function solution(s) { - return s.split("").sort().reverse().join("") -} - -//정답 5 - jaewon1676 -function solution(s) { - return s.split('').sort().reverse().join('') -} -// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다. -// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다. -// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다. - diff --git "a/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" "b/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" deleted file mode 100644 index 0849d59..0000000 --- "a/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" +++ /dev/null @@ -1,54 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s.search(/\D/g) < 0 && (s.length === 4 || s.length === 6); -} - -//정답 2 - yongchanson -function solution(s) { - let parseInts = parseInt(s); - if (s.length == 6 || s.length == 4) { - if (s == parseInts) { - return true; - } - } - - return false; -} - -//정답 3 - prove-ability -function solution(s) { - var answer = true; - // 문자열 s의 길이가 4 혹은 6이고 - if (s.length === 4 || s.length === 6) { - for (let i = 0, len = s.length; i < len; i++) { - // 숫자로만 구성돼있는지 확인 - if (!Number.isInteger(parseInt(s[i], 10))) return false; - } - // 문자열 s의 길이가 4 혹은 6 가 아니라면 false - } else return false; - - return answer; -} - -//정답 4 - chaerin-dev -function solution(s) { - // 길이가 4 혹은 6이 아니면 false 반환 - if (s.length !== 4 && s.length !== 6) return false; - // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환 - for (let i = 0; i < s.length; i++) { - if (isNaN(Number(s[i]))) return false; - } - // 위의 모든 조건에 포함되지 않으면 - // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환 - return true; -} - -//정답 5 - soulhn -function solution(s) { - if (s.length !== 4 && s.length !== 6) return false; - return !s.split("").some((i) => isNaN(parseInt(i, 10))); - //early return 제외사항 먼저 처리 - //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환 -} diff --git "a/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" "b/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" deleted file mode 100644 index f21b1f4..0000000 --- "a/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" +++ /dev/null @@ -1,22 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return parseInt(s); -} - -//정답 2 - chaerin-dev -function solution(s) { - return Number(s); -} - -//정답 3 - prove-ability -function solution(s) { - return parseInt(s, 10); -} - - -//정답 4 - jaewon1676 -function solution(s) { - return parseInt(s); -} diff --git "a/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" "b/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" deleted file mode 100644 index 04bfabb..0000000 --- "a/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" +++ /dev/null @@ -1,57 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(price, money, count) { - let totalCost = 0; - for (let i = 1; i <= count; i++) totalCost += price * i; - return totalCost <= money ? 0 : totalCost - money; -} - -//정답 2 - yongchanson -function solution(price, money, count) { - var answer = 0; - let sum = price; - - for (i = 2; i <= count; i++) { - sum += price * i; - } - - if (sum <= money) { - answer = 0; - } else { - answer = sum - money; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(price, money, count) { - let sum_price = 0; // 놀이기구의 이용료의 합 - for (let i = 1; i <= count; i++) { - sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다. - } - if (sum_price <= money) { - return 0; - } - return sum_price - money; -} - -//정답 4 - prove-ability -function solution(price, money, count) { - let sum = 0; - for(let i = 1; i <= count; i++) { - sum += (i * price) - } - - return sum < money ? 0 : sum - money; -} - -//정답 5 - chaerin-dev -function solution(price, money, count) { - let totalPrice = 0; - for(let i=1; i<=count; i++){ - totalPrice += i * price; - } - return money > totalPrice ? 0 : totalPrice-money; -} - diff --git "a/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" "b/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" deleted file mode 100644 index 945278e..0000000 --- "a/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" +++ /dev/null @@ -1,25 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(seoul) { - return `김서방은 ${seoul.indexOf("Kim")}에 있다`; -} - -//정답 2 - chaerin-dev -function solution(seoul) { - return `김서방은 ${seoul.indexOf("Kim")}에 있다`; -} - -//정답 3 - prove-ability -function solution(seoul) { - return `김서방은 ${seoul.findIndex(v => v === "Kim")}에 있다`; -} - -//정답 4 - jaewon1676 -function solution(seoul) { - var answer = ''; - for (let i=0; i<1000; i++){ - if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다'; - } - return 1; -} \ No newline at end of file diff --git "a/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" "b/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" deleted file mode 100644 index a5787d6..0000000 --- "a/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" +++ /dev/null @@ -1,72 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ssi02014 -function solution(survey, choices) { - const points = [3, 2, 1, 0, 1, 2, 3]; - const pointBoard = { - R: 0, - T: 0, - C: 0, - F: 0, - J: 0, - M: 0, - A: 0, - N: 0, - }; - let result = ""; - - // 카테고리 별 점수 추가 - for (let i = 0; i < survey.length; i++) { - const categories = survey[i]; - - if (choices[i] < 4) { - pointBoard[categories[0]] += points[choices[i] - 1]; - } else if (choices[i] > 4) { - pointBoard[categories[1]] += points[choices[i] - 1]; - } - } - - const pointBoardEntries = Object.entries(pointBoard); - - // 지표에 맞게 결과 값 도출 - for (let i = 0; i < pointBoardEntries.length; i += 2) { - const [curCategory, curValue] = pointBoardEntries[i]; - const [nextCategory, nextValue] = pointBoardEntries[i + 1]; - - if (curValue < nextValue) { - result += nextCategory; - } else { - result += curCategory; - } - } - - return result; -} - -//정답 2 - codeisneverodd -function solution(survey, choices) { - const points = [-3, -2, -1, 0, 1, 2, 3]; - const types = ['RT', 'CF', 'JM', 'AN']; - const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {}); - survey.forEach((key, i) => { - const point = points[choices[i] - 1]; - Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point); - }); - return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join(''); -} - -//정답 3 - codisneverodd -function solution(survey, choices) { - const points = [-3, -2, -1, 0, 1, 2, 3]; - const types = ['RT', 'CF', 'JM', 'AN']; - const pointBoard = survey.reduce((a, key, i) => { - if (types.includes(key)) { - a[key] = (a[key] || 0) + points[choices[i] - 1]; - return a; - } - const rKey = key[1] + key[0]; - a[rKey] = (a[rKey] || 0) - points[choices[i] - 1]; - return a; - }, {}); - return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join(''); -} diff --git "a/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" "b/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" deleted file mode 100644 index 15a504d..0000000 --- "a/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" +++ /dev/null @@ -1,85 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(nums) { - let answer = 0; - const length = nums.length; - for (let i = 0; i < length; i++) { - for (let j = i + 1; j < length; j++) { - for (let k = j + 1; k < length; k++) { - const sum = nums[i] + nums[j] + nums[k]; - if (isPrime(sum)) answer += 1; - } - } - } - - return answer; -} - -function isPrime(num) { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return num >= 2; -} - -//정답 2 - jaewon1676 -// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript - -function solution(nums) { - let len = nums.length, answer = 0; - - for (let i = 0; i < len - 2; i++) { - for (let j = i + 1; j < len - 1; j++) { - for (let k = j + 1; k < len; k++) { - if (isPrime(nums[i] + nums[j] + nums[k])) { - answer++; - } - } - } - } - return answer; -} - -const isPrime = (n) => { - for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회 - if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다. - return false; - } - } - return true; -} -// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다. - -//정답 3 - chaerin-dev -// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수 -const getCombinations = function (arr, selectNumber) { - const results = []; - if (selectNumber === 1) return arr.map((el) => [el]); - arr.forEach((fixed, index, origin) => { - const rest = origin.slice(index + 1); - const combinations = getCombinations(rest, selectNumber - 1); - const attached = combinations.map((el) => [fixed, ...el]); - results.push(...attached); - }); - return results; -}; - -// num이 소수인지 여부를 반환하는 함수 -function isPrime(num) { - if (num === 1) return false; - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return true; -} - -function solution(nums) { - const combinationResult = getCombinations(nums, 3); - let answer = 0; - combinationResult.forEach((e) => { - const sum = e[0] + e[1] + e[2]; - if (isPrime(sum)) answer++; - }); - return answer; -} diff --git "a/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" "b/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" deleted file mode 100644 index 1774ae6..0000000 --- "a/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" +++ /dev/null @@ -1,100 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(numbers) { - let answer = 0; - const numArr = numbers.split(""); - const permutationAll = []; - for (let r = 1; r <= numbers.length; r++) { - const permutationR = Permutation(numArr, r).map((arr) => - parseInt(arr.join("")) - ); - for (let i = 0; i < permutationR.length; i++) - permutationAll.push(permutationR[i]); - } - const permutationSet = [...new Set(permutationAll)]; - for (const number of permutationSet) { - if (isPrime(number)) answer += 1; - } - return answer; -} - -function Permutation(arr, r) { - const result = []; - if (r === 1) return arr.map((num) => [num]); - arr.forEach((fixed, index, org) => { - const rest = [...org.slice(0, index), ...org.slice(index + 1)]; - const permutation = Permutation(rest, r - 1); - const attached = permutation.map((numbers) => [fixed, ...numbers]); - result.push(...attached); - }); - return result; -} - -function isPrime(num) { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return num >= 2; -} - - -//정답 2 - chaerin-dev -// 소수인지 판별하는 함수 -function isPrime(x) { - for (let i = 2; i <= Math.sqrt(x); i++) { - if (x % i === 0) return false; - } - return true; -} -function solution(n) { - // 소수의 개수를 저장할 변수 - let answer = 0; - // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해 - for (let i = 2; i <= n; i++) { - // 소수이면 소수의 개수에 1 추가 - if (isPrime(i)) answer++; - } - return answer; -} - -//정답 3 - prove-ability -// 소수 판별 로직 -function isPrime(n) { - // n 제곱근 후 올림 - for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) { - if (n % i === 0) return false; - } - return true; -} - -function solution(n) { - let count = 0; - // 1부터 n까지 반복적으로 접근 - i - for(let i = 1; i <= n; i++) { - // i 가 소수인지 확인 후 count++ - if(isPrime(i)) count++; - } - - return count; -} - -//정답 4 - jaewon1676 -function solution(n) { - let arr = []; - - // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다. - for(let i=2; i<=n; i++) { - arr[i] = i; - } - for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다. - if (arr[i] === 0) continue; - - for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다. - arr[j] = 0; - } - } - - // filter를 이용해 0이아닌 수들의 개수를 return합니다. - return arr.filter(v => v!==0).length; -} diff --git "a/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" "b/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" deleted file mode 100644 index aa3682c..0000000 --- "a/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - let answer = ''; - for (let i = 0; i < n; i++) { - answer += i % 2 === 0 ? '수' : '박'; - } - return answer; -} - -//정답 2 - chaerin-dev -function solution(n) { - // "수박"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환 - return '수박'.repeat(n).substr(0, n); -} - -//정답 3 - jaewon1676 -function solution(n) { - let str = ''; - for (let i = 0; i < n; i++) { - // 삼항 연산자와 +로 문자열을 붙여주어 추가. - i % 2 == 0 ? (str = str + '수') : (str = str + '박'); - } - return str; -} - -//정답 4 - prove-ability -function solution(n) { - let answer = ''; - answer = '수박'.repeat(n / 2); - if (n % 2 !== 0) answer += '수'; - return answer; -} - -//정답 5 - yongchanson -function solution(n) { - return '수박'.repeat(n / 2) + '수'.repeat(n % 2); -} diff --git "a/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" "b/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" deleted file mode 100644 index f78f6bf..0000000 --- "a/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" +++ /dev/null @@ -1,102 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - const stringToNum = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - for (let i = 0; i < 10; i++) { - s = s.split(stringToNum[i]).join(i); - } - return parseInt(s); -} - -//정답 2 - codeisneverodd -function solution(s) { - var answer = 0; - let answerString = s; - const stringToNum = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - for (let i = 0; i < 10; i++) { - const regex = new RegExp(stringToNum[i], "g"); - answerString = answerString.replace(regex, i); - } - answer = Number(answerString); - return answer; -} - -//정답 3 - jaewon1676 -function solution(s) { - let answer = 0; - - s = s.replace(/zero/g, 0); - s = s.replace(/one/g, 1); - s = s.replace(/two/g, 2); - s = s.replace(/three/g, 3); - s = s.replace(/four/g, 4); - s = s.replace(/five/g, 5); - s = s.replace(/six/g, 6); - s = s.replace(/seven/g, 7); - s = s.replace(/eight/g, 8); - s = s.replace(/nine/g, 9); - - answer = Number(s); - return answer; -} - -//정답 4 - chaerin-dev -function solution(s) { - s = s - .replace(/zero/g, 0) - .replace(/one/g, 1) - .replace(/two/g, 2) - .replace(/three/g, 3) - .replace(/four/g, 4) - .replace(/five/g, 5) - .replace(/six/g, 6) - .replace(/seven/g, 7) - .replace(/eight/g, 8) - .replace(/nine/g, 9); - return parseInt(s); -} - -//정답 5 - yongchanson -function solution(s) { - let en = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - - for (let i = 0; i < s.length * 2; i++) { - let p = i % en.length; - s = s.replace(en[p], p); - } - return Number(s); -} diff --git "a/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" "b/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" deleted file mode 100644 index 8667845..0000000 --- "a/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" +++ /dev/null @@ -1,88 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s, n) { - return s - .split("") - .map((element) => { - if (element === " ") return " "; - const code = element.charCodeAt(0); - if ((code + n > 90 && code <= 90) || code + n > 122) { - return String.fromCharCode(code + n - 26); - } else { - return String.fromCharCode(code + n); - } - }) - .join(""); -} - -//정답 2 - jaewon1676 -function solution(s, n) { - return s - .split("") - .map((el) => { - if (el == " ") return el; - let tmp = el.charCodeAt(); - return el.toLowerCase().charCodeAt() + n > 122 - ? String.fromCharCode(tmp + n - 26) - : String.fromCharCode(tmp + n); - }) - .join(""); -} - -/* 문자열 -> 아스키코드 : s.charCodeAt() -아스키코드 -> 문자열 : String.fromCharCode() -풀이과정 -1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다. -2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. - 대문자 아스키코드는 65가 A, 90이 Z이다. - 소문자 아스키코드는 97이 a, 122가 z이다. -3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고 - 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다. -*/ - -//정답 3 - chaerin-dev -function solution(s, n) { - let result = ""; - for (let i = 0; i < s.length; i++) { - if (s[i] === " ") result += " "; - else { - let charCode = s.charCodeAt(i); - // 원래 대문자였는데 - if (charCode <= 90) { - charCode += n; - // 변경 후 아스키코드값이 90보다 크다면 - if (charCode > 90) charCode -= 26; - } - // 원래 소문자였는데 - else { - charCode += n; - // 변경 후 아스키코드값이 122보다 크다면 - if (charCode > 122) charCode -= 26; - } - result += String.fromCharCode(charCode); - } - } - return result; -} - - -//정답 4 - prove-ability -function solution(s, n) { - var answer = ''; - for(let i = 0, len = s.length; i < len; i++) { - if(s[i] === " ") { - answer += " "; - continue; - } - let index = s[i].charCodeAt(); - // 65 - 90 - // 97 - 122 - if(index <= 90 && index + n > 90) index -= 26; - else if (index + n > 122) index -= 26; - - answer += String.fromCharCode(index + n) - } - return answer; -} - diff --git "a/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" "b/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" deleted file mode 100644 index 466f362..0000000 --- "a/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" +++ /dev/null @@ -1,167 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(id_list, report, k) { - const reportResult = report.reduce((a, c) => { - const [user, reported] = c.split(' '); - a[reported] = a[reported] ? a[reported].add(user) : new Set().add(user); - return a; - }, {}); - - const mailed = Object.values(reportResult) - .filter(set => set.size >= k) - .flatMap(set => [...set]); - return id_list.map(id => mailed.filter(user => user === id).length); -} - -//정답 2 - jaewon1676 -function solution(id_list, report, k) { - let answer = new Array(id_list.length).fill(0); - let report_list = {}; // 신고당한 ID - - // key, value 형식의 report_list 객체를 만든다. - id_list.map(user => { - report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체 - }); - // report_list { muzi: [], frodo: [], apeach: [], neo: [] } - - // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다. - report.map(user => { - const [user_id, report_id] = user.split(' '); - // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다. - if (!report_list[report_id].includes(user_id)) { - report_list[report_id].push(user_id); - // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다. - } - }); - for (const key in report_list) { - // report_list의 index 순회 - if (report_list[key].length >= k) { - report_list[key].map(user => { - answer[id_list.indexOf(user)] += 1; - }); - } - } - return answer; -} - -//정답 3 - prove-ability -function solution(id_list, report, k) { - // 사용자 길이의 빈 배열을 만든다 0 - var answer = new Array(id_list.length).fill(0); - // 신고된 내용 정리할 객체 선언 - const obj = {}; - // 신고된 내용 정리할 객체 사용자 아이디로 초기화 - id_list.forEach(id => { - obj[id] = new Set(); - }); - // 신고 리스트를 조회하며 신고 내용 객체에 정리 - // set.add 를 활용해 같은 사용자의 중복 신고 제거 - report.forEach(str => { - const [reporter, target] = str.split(' '); - obj[target].add(reporter); - }); - // obj value 하나씩 접근 - for (const value of Object.values(obj)) { - // 신고당한 횟수가 정지 기준에 적합하다면 - if (value.size >= k) { - // 해당 유저를 신고한 사람들 - for (let item of value) { - // 인덱스 구해서 증가 - let index = id_list.indexOf(item); - answer[index]++; - } - } - } - - return answer; -} - -//정답 4 - prove-ability -function solution(id_list, report, k) { - // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기 - var answer = Array.from({ length: id_list.length }).fill(0); - // 신고 내용 객체 초기화 - 신고된 내용 정리 - const reportObj = {}; - // 신고건 반복문으로 하나씩 접근 - for (let i = 0, len = report.length; i < len; i++) { - const [userId, reportUserId] = report[i].split(' '); - // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가 - if (reportObj[reportUserId]) { - if (!reportObj[reportUserId].includes(userId)) { - reportObj[reportUserId] = [...reportObj[reportUserId], userId]; - } - // 신고 내용 객체에 신고당한 사람이 없다면 추가 - } else reportObj[reportUserId] = [userId]; - } - // 만들어진 신고 내용 객체로 반복적으로 접근 - for (const item of Object.values(reportObj) - .filter(v => v.length >= k) - .flatMap(v => v)) { - // 인덱스로 접근해 메일 카운트 증가 - const index = id_list.findIndex(v => v === item); - answer[index]++; - } - - return answer; -} - -//정답 5 - chaerin-dev -function solution(id_list, report, k) { - // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리 - let set = new Set(report); - report = Array.from(set); - - // 1. report를 2차원배열로 변형 - // 2. 각 유저가 신고당한 횟수 cnt에 저장 - // 3. 각 유저를 신고한 유저 who에 저장 - let cnt = Array.from({ length: id_list.length }, i => 0); - let who = Array.from({ length: id_list.length }, i => []); - for (let i = 0; i < report.length; i++) { - report[i] = report[i].split(' '); - cnt[id_list.indexOf(report[i][1])]++; - who[id_list.indexOf(report[i][1])].push(report[i][0]); - } - - // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장 - let mail = Array.from({ length: id_list.length }, i => 0); - for (let i = 0; i < cnt.length; i++) { - if (cnt[i] < k) continue; - for (let j = 0; j < who[i].length; j++) { - mail[id_list.indexOf(who[i][j])]++; - } - } - return mail; -} -//정답 6(🎩 refactor 220425) - codeisneverodd -function solution(id_list, report, k) { - //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장, - //각 id를 신고한 사람 array를 reportedBy에 저장, - //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장 - //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장. - const reportSet = new Set(report); - const reportedCount = {}; //{"id": Number(count)} - const reportedBy = {}; //{"id":[]} - const mailCount = {}; //{"id":Number(count)} - - id_list.forEach(element => { - reportedCount[element] = 0; - mailCount[element] = 0; - reportedBy[element] = []; - }); - - reportSet.forEach(element => { - const [id, reported] = element.split(' '); - reportedCount[reported] += 1; - reportedBy[reported].push(id); - }); - - for (const reportedId in reportedCount) { - if (reportedCount[reportedId] >= k) { - reportedBy[reportedId].forEach(reporter => { - mailCount[reporter] += 1; - }); - } - } - return id_list.map(id => mailCount[id]); -} diff --git "a/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" "b/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" deleted file mode 100644 index 4c4e506..0000000 --- "a/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" +++ /dev/null @@ -1,123 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(new_id) { - const newId = new_id - .toLowerCase() - .replace(/[^\w_.-]/g, '') - .replace(/[.]{2,}/g, '.') - .replace(/^[.]+/, '') - .replace(/[.]+$/, '') - .replace(/^$/, 'a') - .substring(0, 15) - .replace(/[.]+$/, ''); - - return newId.padEnd(3, newId[newId.length - 1]); -} - -//정답 2 - codeisneverodd -function solution(new_id) { - let answer = ''; - answer = new_id.toLowerCase(); // step1 - const step2 = /[^0-9a-z._-]/g; - const step3 = /[.]+/g; - const step4_1 = /^\./; - const step4_2 = /\.$/; - answer = answer.replace(step2, ''); - answer = answer.replace(step3, '.'); - answer = answer.replace(step4_1, ''); - answer = answer.replace(step4_2, ''); - answer = answer === '' ? 'a' : answer; // step5 - answer = answer.length >= 16 ? answer.slice(0, 15) : answer; //step6 - answer = answer.replace(step4_2, ''); - switch ( - answer.length // step7 - ) { - case 1: - answer = answer + answer[0] + answer[0]; - break; - case 2: - answer = answer + answer[1]; - break; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(new_id) { - // 1 소문자로 치환 - let answer = new_id - .toLowerCase() - - // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거. - .replace(/[^a-z0-9-_.]/gi, '') - - // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환 - .replace(/[.]{2,}/gi, '.') - - // 4 마침표(.)가 처음이나 끝에 위치하면 제거 - .replace(/^[.]|[.]$/gi, ''); - - // 5 빈 문자열이면 a 대입 - if (answer === '') answer = 'a'; - - // 6 length > 15이면 그 뒤의 문자들은 제거 - if (answer.length > 15) { - answer = answer.substring(0, 15); - // 마침표(.)가 끝에 위치하면 마침표(.)제거 - answer = answer.replace(/[.]$/gi, ''); - } - - // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임 - while (answer.length < 3) { - answer += answer[answer.length - 1]; - } - return answer; -} - -//정답 4 - chaerin-dev -function solution(new_id) { - // 1단계: 모든 대문자를 소문자로 - new_id = new_id.toLowerCase(); - - // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거 - new_id = new_id.replace(/[^\w\-\.]/g, ''); - - // 3단계: 연속되는 마침표는 마침표 하나로 - new_id = new_id.replace(/\.{2,}/g, '.'); - - // 4단계: 처음이나 끝에 마침표가 있으면 제거 - new_id = new_id.replace(/^\.|\.$/, ''); - - // 5단계: new_id가 빈 문자열이면 "a" 대입 - if (new_id.length === 0) new_id = 'a'; - - // 6단계: new_id의 길이가 16자 이상이면, - // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 - // 제거 후 끝에 마침표가 있으면 제거 - if (new_id.length >= 16) new_id = new_id.slice(0, 15); - new_id = new_id.replace(/\.$/, ''); - - // 7단계: new_id의 길이가 2자 이하이면, - // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임 - let len = new_id.length; - if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len); - - return new_id; -} -//정답 5(🎩 refactor 220425) - codeisneverodd -function solution(new_id) { - let answer = new_id - .toLowerCase() //step 1 - .replace(/[^0-9a-z._-]/g, '') // step 2 - .replace(/\.+/g, '.') //step 3 - .replace(/^\.|\.$/g, '') //step 4 - .replace(/^$/, 'a') //step 5 - .slice(0, 15) - .replace(/\.$/, ''); //step 6 - // step7 - if (answer.length === 1) answer = answer[0].repeat(3); - if (answer.length === 2) answer = answer + answer[1]; - - return answer; -} diff --git "a/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" "b/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" deleted file mode 100644 index 097e9e9..0000000 --- "a/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" +++ /dev/null @@ -1,60 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(left, right) { - let answer = 0; - for (let num = left; num <= right; num++) { - answer = Number.isInteger(Math.sqrt(num)) ? answer - num : answer + num; - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(left, right) { - var answer = 0; - for (let num = left; num <= right; num++) { - divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num); - } - return answer; -} - -const divisorCounter = (num) => { - let count = 0; - const sqrt = Math.sqrt(num); - for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1; - return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2; -}; - -//정답 3 - jaewon1676 -function solution(left, right) { - var answer = 0; - - for (left; left <= right; left++) { - // left의 제곱근이 정수면 약수의 개수는 홀수 - if (Number.isInteger(Math.sqrt(left))) { - answer -= left; - } else { - answer += left; - } - } - return answer; -} - -// 정답 4 - prove-bility -function getDivisorCount(i) { - let count = 0; - for(let j = 1; j <= i; j++) { - if(i % j === 0) count++; - } - return count; -} - -function solution(left, right) { - let answer = 0; - for(let i = left; i <= right; i++) { - let count = getDivisorCount(i); - if(count % 2 === 0) answer += i; - else answer -= i; - } - return answer; -} diff --git "a/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" "b/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" deleted file mode 100644 index db732a8..0000000 --- "a/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" +++ /dev/null @@ -1,69 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - let answer = 0; - for (let divisor = 1; divisor <= n; divisor++) { - if (n % divisor === 0) answer += divisor; - } - return answer; -} - -//정답 2 - yongchanson -function solution(n) { - var answer = 0; - let i; - for (i = 1; i <= Math.sqrt(n); i++) { - if (n % i == 0) { - if (i * i == n) { - //i의 제곱이 n인경우 처리 - answer += i; - } else { - answer += i; - answer += n / i; - } - } - } - - return answer; -} - -//정답 3 - chaerin-dev -function solution(n) { - let result = 0; - let sqrtN = Math.sqrt(n); - // 효율성을 위해 1부터 n의 제곱근-1까지만 순회 - for (let i = 1; i < sqrtN; i++) { - if (n % i === 0) result += i + n / i; - } - // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌 - if (Number.isInteger(sqrtN)) result += sqrtN; - return result; -} - -//정답 4 - jaewon1676 -function solution(n) { - var answer = 0; - for (let i = 1; i <= n; i++) { - if (n % i == 0) { - // n으로 i를 나눴을 때, 나머지가 0이면 약수이다. - answer += i; - } - } - return answer; -} - -// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다. -// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다. -// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다. - - -//정답 4 - prove-ability -function solution(n) { - let answer = 0; - for(let i = 1; i <= n; i++) { - if(n % i === 0) answer += i; - } - return answer; -} - diff --git "a/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" "b/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" deleted file mode 100644 index 0e5fcff..0000000 --- "a/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" +++ /dev/null @@ -1,59 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(numbers) { - return 45 - numbers.reduce((a, b) => a + b); -} - -//정답 2 - codeisneverodd -function solution(numbers) { - var answer = 0; - for (let i = 0; i < 10; i++) { - answer += numbers.includes(i) ? 0 : i; - } - return answer; -} - -//정답 3 - yongchanson -function solution(numbers) { - var answer = -1; - - let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; - let arr_sum = 0; - let numbers_sum = 0; - - for (i = 0; i < arr.length / 2; i++) { - if (arr[i] == arr[arr.length - 1 - i]) { - arr_sum += arr[i]; - } else { - arr_sum += arr[i] + arr[arr.length - 1 - i]; - } - } - - for (i = 0; i < numbers.length; i++) { - numbers_sum += numbers[i]; - } - - answer = arr_sum - numbers_sum; - return answer; -} - -//정답 4 - prove-ability -function solution(numbers) { - var answer = 0; - - for (let i = 0; i < 10; i++) { - if (!numbers.includes(i)) answer += i; - } - - return answer; -} - -//정답 5 - chaerin-dev -function solution(numbers) { - let answer = 0; - for (let i = 0; i <= 9; i++) { - if (!numbers.includes(i)) answer += i; - } - return answer; -} \ No newline at end of file diff --git "a/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230&42576&.js" "b/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230&42576&.js" deleted file mode 100644 index f53d9f9..0000000 --- "a/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230&42576&.js" +++ /dev/null @@ -1,83 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(participant, completion) { - participant = participant.sort(); - completion = completion.sort(); - for (let i = 0; i < completion.length; i++) { - if (participant[i] !== completion[i]) return participant[i]; - } - return participant[participant.length - 1]; -} - -//정답 2 - jaewon1676 -function solution(participant, completion) { - var answer = ""; - for (let i = 0; i < participant.length; i++) { - for (let j = 0; j < completion.length; j++) { - if (participant[i] === completion[j]) { - console.log(participant, completion); - participant.splice(i, 1); - completion.splice(j, 1); - i--; - j--; - console.log(participant, completion); - break; - } - } - } - - return participant[0]; -} - -//완벽한 정답이 아닙니다. -//정답 3 - hyosung -function solution(participant, completion) { - let answer = ""; - // 2개 이상을 가진 특정값의 갯수 기록용 변수 - let max = 0; - // 반복문 내부에서 set.has 를 사용하기 위해 Set 선언 (처음에는 Array.findIndex 를 사용) - const set = new Set([...completion]); - // 반복문 최적화 - 반복되던 연산 제거 (값 비교, length) - const length = participant.length; - for (let i = length; i--; ) { - // 완주자 명단에 없다면 완주하지 못한 참가자 이므로 바로 종료 - if (!set.has(participant[i])) { - answer = participant[i]; - break; - } - // 배열안에 특정값 갯수 확인 - let count = participant.reduce( - (a, v) => (v === participant[i] ? a + 1 : a), - 0 - ); - // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면 - // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다 - if (count > 1 && max < count) { - answer = participant[i]; - // 조건에 맞는 동명이인 수 저장 - max = count; - } - } - return answer; -} - -//완벽한 정답이 아닙니다. -//정답 4 - chaerin-dev -function solution(participant, completion) { - var answer = ""; - // 두 배열을 정렬한다! - participant.sort(); - completion.sort(); - // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!! - // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로 - // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만 - // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음! - for (let i = 0; i < participant.length; i++) { - if (participant[i] != completion[i]) { - answer = participant[i]; - break; - } - } - return answer; -} diff --git "a/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" "b/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" deleted file mode 100644 index 59dc770..0000000 --- "a/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" +++ /dev/null @@ -1,69 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(absolutes, signs) { - return absolutes.reduce( - (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1), - 0 - ); -} - -//정답 2 - codeisneverod -function solution(absolutes, signs) { - var answer = 0; - for (let i = 0; i < absolutes.length; i++) { - answer += signs[i] ? absolutes[i] : -1 * absolutes[i]; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(absolutes, signs) { - var answer = 0; - for (var i = 0; i < absolutes.length; i++) { - if (signs[i] === false) { - answer = answer - absolutes[i]; - } else { - answer = answer + absolutes[i]; - } - } - - return answer; -} - -// 정답 4 - prove-ability -function solution(absolutes, signs) { - var answer = 0; - - for (let i = 0, len = absolutes.length; i < len; i++) { - if (!signs[i]) answer += absolutes[i] * -1; - else answer += absolutes[i]; - } - - return answer; -} - -// 정답 5 - prove-ability -function solution(absolutes, signs) { - let answer = 0; - absolutes.forEach((absolute, i) => { - if(!signs[i]) absolute *= -1; - answer += absolute; - }) - return answer; -} - -// 정답 6 - chaerin-dev -function solution(absolutes, signs) { - // 연산 결과를 저장할 변수 - let result = 0; - // signs의 각 요소에 대해 - signs.forEach((e, i) => { - // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌 - if (e) result += absolutes[i]; - // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌 - else result -= absolutes[i]; - }); - // result 반환 - return result; -} \ No newline at end of file diff --git "a/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" "b/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" deleted file mode 100644 index 565d4f4..0000000 --- "a/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" +++ /dev/null @@ -1,87 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s - .split(" ") - .map((word) => - word - .split("") - .map((char, index) => - index % 2 === 0 - ? word[index].toUpperCase() - : word[index].toLowerCase() - ) - .join("") - ) - .join(" "); -} - -//정답 2 - chaerin-dev -// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..! -function solution(s) { - let result = ""; - let flag = true; - for (let i = 0; i < s.length; i++) { - if (s[i] === " ") { - flag = false; - result += s[i]; - } else if (flag) { - result += s[i].toUpperCase(); - } else { - result += s[i].toLowerCase(); - } - flag = !flag; - } - return result; -} - -//정답 3 - jaewon1676 -function solution(s) { - return s - .split(" ") - .map((el) => - el - .split("") - .map((el, index) => - index % 2 == 0 ? el.toUpperCase() : el.toLowerCase() - ) - .join("") - ) - .join(" "); -} - -/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ] - -.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 -[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]] - -.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()) -//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다! -//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다. -[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]] - -.join('') 작은 배열들을 합쳐줍니다. -['TrY', 'HeLlO', 'WoRlD'] - -.join(' ') 큰 배열들을 합쳐줍니다. -"TrY HeLlO WoRlD" - -대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 -문자열을 연습하는데 좋은 문제입니다. -*/ - - -//정답 4 - prove-ability -function solution(s) { - let answer = ''; - s.split(" ").forEach((word) => { - for(let i = 0, len = word.length; i < len; i++) { - if(i % 2 === 0) answer+=word[i].toUpperCase(); - else answer+=word[i].toLowerCase(); - } - answer += " "; - }) - answer = answer.slice(0, answer.length - 1) - return answer; -} diff --git "a/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" "b/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" deleted file mode 100644 index 920c207..0000000 --- "a/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return n - .toString() - .split("") - .map((x) => parseInt(x)) - .reduce((acc, curr) => acc + curr, 0); -} - -//정답 2 - chaerin-dev -function solution(n) { - // 숫자 -> 문자열 -> 배열 -> 각 요소를 정수로 변환한 후 더한 누적 결과값 반환 - return String(n) - .split("") - .reduce((acc, item) => (acc += parseInt(item)), 0); -} - -//정답 3 - chaerin-dev -function solution(n) { - let result = 0; - while (n > 0) { - result += n % 10; - n = Math.floor(n / 10); - } - return result; -} - -// 정답 4 - prove-ability -function solution(n) { - var answer = 0; - n.toString() - .split("") - .forEach((v) => { - answer += parseInt(v); - }); - return answer; -} diff --git "a/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" "b/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" deleted file mode 100644 index a6eb8bb..0000000 --- "a/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" +++ /dev/null @@ -1,66 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return n - .toString() - .split("") - .reverse() - .map((x) => parseInt(x)); -} - -//정답 2 - chaerin-dev -function solution(n) { - // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환 - return String(n) - .split("") - .reverse() - .map((item) => parseInt(item)); -} - -//정답 3 - jaewon1676 -function solution(n) { - var answer = []; - // 정수형 => 문자형 => 하나씩 잘라서 뒤집어서 모아준다. - n = n.toString().split("").reverse().join(""); - for (let i = 0; i < n.length; i++) { - answer.push(parseInt(n[i])); // n은 지금 문자형이기때문에 Push 하기전에 정수형으로 바꿔줌 - // answer.push(n[i]) 로 해주면 현재 n[i]는 문자형이기때문에 결과는 ["5","4","3","2","1"] 가 됩니다. - // answer(parseInt(n[i])) 로 해준다면 n[i]는 문자형 => 정수형으로 변하기 때문에 결과는 [5, 4, 3, 2, 1] 가 됩니다. - // 문자형과 정수형의 차이는 숫자에 큰 따옴표가 있느냐 없느냐의 차이입니다. - } - return answer; -} - -//정답 4 - jaewon1676 -function solution(n) { - return (n = n - .toString() - .split("") - .reverse() - .map((o) => (o = parseInt(o)))); -} - -// 정답 5 - prove-ability -function solution(n) { - // 1. 문자열 변환 - // 2. 배열로 변환 - // 3. 배열 반전 - // 4. 정수로 변환 - return n - .toString() - .split("") - .reverse() - .map((v) => parseInt(v)); -} - -//정답 6 - yongchanson -function solution(n) { - let answer = []; - let string = n.toString(); - for (let i = string.length - 1; i >= 0; i--) { - let slice = string.substr(i, 1) * 1; - answer.push(slice); - } - return answer; -} diff --git "a/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" "b/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" deleted file mode 100644 index 4b8b08d..0000000 --- "a/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" +++ /dev/null @@ -1,28 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return parseInt( - n - .toString() - .split("") - .sort((a, b) => b - a) - .join("") - ); -} - -//정답 2 - chaerin-dev -function solution(n) { - // 정수 -> 문자열 -> 배열 - let arrN = String(n).split(""); - // 배열 내림차순 정렬 - arrN.sort((a, b) => b - a); - // 배열 -> 문자열 -> 정수 - return parseInt(arrN.join("")); -} - -//정답 3 - prove-ability -function solution(n) { - return parseInt(n.toString().split("").sort((a, b) => b - a).join(""), 10); -} - diff --git "a/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" "b/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" deleted file mode 100644 index 95c9d82..0000000 --- "a/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1; -} - -//정답 2 - chaerin-dev -function solution(n) { - // n의 제곱근값을 x에 저장 - let x = Math.sqrt(n); - // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환 - return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1; -} - -//정답 3 - prove-ability -function solution(n) { - // n의 제곱근을 x 초기화 - const x = Math.sqrt(n); - // 양의 정수라면 x + 1 제곱 반환 - if(Number.isInteger(x)) return Math.pow(x + 1, 2) - // 아니라면 -1 반환 - return -1; -} - -//정답 4 - jaewon1676 -function solution(n) { - let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인 - if (s ** 2 === n) return ((s+1) ** 2) - - return -1; -} - -//정답 5 - yongchanson -function solution(n) { - const sqrt = Math.sqrt(n); - //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수 - return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1; -} diff --git "a/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" "b/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" deleted file mode 100644 index b979bc2..0000000 --- "a/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" +++ /dev/null @@ -1,68 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr) { - const index = arr.indexOf(Math.min(...arr)); - arr.splice(index, 1); - return arr.length === 0 ? [-1] : arr; -} - -//정답 2 - jaewon1676 -function solution(arr) { - var answer = []; - - let min = Math.min(...arr); - while (1) { - for (let i = 0; i < arr.length; i++) { - if (min == arr[i]) { - arr.splice(i, 1); - if (arr.length == 0) { - return [-1]; - } else { - return arr; - } - } - } - } - return -1; -} - -/* 풀이과정 -1. 배열의 최솟값을 min 변수에 담아줍니다. -2. 배열을 순회하며 최솟값을 찾아 splice 메서드를 사용해 최솟값의 자리만 제거해줍니다. -3. 최솟값 제거 후 배열 크기가 0이면 -1, 그렇지 않으면 배열 그대로 반환합니다. */ - -//정답 3 - jaewon1676 -function solution(arr) { - arr.splice(arr.indexOf(Math.min(...arr)), 1); - if (arr.length < 1) return [-1]; - return arr; -} - -/* 풀이과정 arr [4,3,2,1] 일경우 -Math.min(...arr)은 1 -arr.indexOf(1), 1이 있는 index가 3이므로 3 반환. -arr.splice(3, 1) arr의 3번째 index만 제거 해준다. -arr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */ - -//정답 4 - chaerin-dev -function solution(arr) { - // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제 - arr.splice(arr.indexOf(Math.min(...arr)), 1); - // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환 - return arr.length ? arr : [-1]; -} - -//정답 3 - prove-ability -function solution(arr) { - // 최솟값 찾기 - const min = Math.min(...arr); - // arr 중 min 과 같은 요소의 인덱스 제거 - arr.splice( - arr.findIndex((num) => num === min), - 1 - ); - // 만약 arr 가 비어있다면 [-1] 반환 - if (arr.length === 0) return [-1]; - return arr; -} diff --git "a/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" "b/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" deleted file mode 100644 index 4562ac1..0000000 --- "a/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" +++ /dev/null @@ -1,54 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - chaerin-dev -process.stdin.setEncoding("utf8"); -process.stdin.on("data", (data) => { - const n = data.split(" "); - const a = Number(n[0]), - b = Number(n[1]); - // 정답을 저장할 문자열 answer - answer = ""; - // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복 - for (let i = 0; i < b; i++) { - // 가로 길이만큼 문자열에 별 더해주기 - for (let j = 0; j < a; j++) answer += "*"; - // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기 - answer += "\n"; - } - // 정답 출력 - console.log(answer); -}); - -//정답 2 - prove-ability -process.stdin.setEncoding('utf8'); -process.stdin.on('data', data => { - const nums = data.split(" "); - const n = Number(nums[0]), m = Number(nums[1]); - - let result = ""; - // 2차원으로 접근 - // 세로 길이만큼 반복 - for(let i = 0; i < m; i++) { - // 가로 길이만큼 별 더하기 - for(let j = 0; j < n; j++) { - result += "*"; - } - // 가로가 끝나면 줄내림 - result += "\n"; - } - console.log(result) -}); - -//정답 3 - yongchanson -process.stdin.setEncoding("utf8"); -process.stdin.on("data", (data) => { - const n = data.split(" "); - const a = Number(n[0]), - b = Number(n[1]); - console.log(("*".repeat(a) + `\n`).repeat(b)); -}); -/* -<풀이과정> -repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count); -'*'.repeat(a) : *를 a만큼 반복한다. -*/ diff --git "a/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" "b/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" deleted file mode 100644 index 377141c..0000000 --- "a/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" +++ /dev/null @@ -1,29 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(num) { - return num % 2 === 0 ? "Even" : "Odd"; -} - -//정답 2 - chaerin-dev -function solution(num) { - return num % 2 == 0 ? "Even" : "Odd"; -} - -//정답 3 - jaewon1676 -function solution(num) { - let answer; - num % 2 == 0 ? (answer = "Even") : (answer = "Odd"); - // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환. - return answer; -} - -//정답 4 - prove-ability -function solution(num) { - return num % 2 === 0 ? "Even" : "Odd"; -} - -//정답 5 - yongchanson -function solution(num) { - return num % 2 ? "Odd" : "Even"; -} diff --git "a/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" "b/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" deleted file mode 100644 index 5baa4f6..0000000 --- "a/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" +++ /dev/null @@ -1,127 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n, lost, reserve) { - let answer = 0; - let studentClothes = new Array(n + 2).fill(1); - for (const student of reserve) studentClothes[student] += 1; - for (const student of lost) studentClothes[student] -= 1; - for (let i = 1; i < n + 1; i++) { - if (studentClothes[i] === 0) { - if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) { - if (studentClothes[i - 1] === 2) { - studentClothes[i - 1] -= 1; - studentClothes[i] += 1; - } else { - studentClothes[i + 1] -= 1; - studentClothes[i] += 1; - } - } - } - } - for (const student of studentClothes) { - answer += student > 0 ? 1 : 0; - } - answer -= 2; - return answer; -} - -//정답 2 - prove-ability -function solution(n, lost, reserve) { - // students 초기화 - 학생들은 체육복 개수 1로 초기화 - let students = Array.from({ length: n }).fill(1); - - // 읽어버린 학생 개수 반영 - lost.forEach((target) => { - students[target - 1]--; - }); - - // 여별 체육복 개수 반영 - reserve.forEach((target) => { - students[target - 1]++; - }); - - // 학생들 순차적으로 접근 - for (let i = 0, len = students.length; i < len; i++) { - // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue - if (students[i] === 0 || students[i] === 1) continue; - // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 - if (i !== 0 && students[i - 1] === 0) { - // 이전 학생 증가 - students[i - 1]++; - // 자신은 대여해줬으니 감소 - students[i]--; - } - // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 - if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) { - // 다음 학생 증가 - students[i + 1]++; - // 자신은 대여해줬으니 감소 - students[i]--; - } - } - // 체육복 1개 이상을 가진 학생들의 수 반환 - return students.filter((v) => v >= 1).length; -} - -//정답 3 - jaewon1676 -function solution(n, lost, reserve) { - let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다 - let cnt = 0; - for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복 - answer[reserve[i]-1] += 1 - } - for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1 - answer[lost[i]-1] -= 1 - } - for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다. - if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){ - answer[i] = 1 - answer[i+1] = 1 - } - } - for(let i = 0; i < answer.length; i++){ - (answer[i] >= 1 ? cnt += 1 : null) - } - return cnt - } - //그리디 - // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다. - // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. - -//정답 4 - chaerin-dev -function solution(n, lost, reserve) { - // 학생들의 체육복 개수를 저장할 배열 students - // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정 - // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음 - const students = Array.from({ length: n + 1 }, () => 1); - - // 체육복 분실/여분 정보 students 배열에 반영 - lost.forEach((lostStudent) => students[lostStudent]--); - reserve.forEach((reserveStudent) => students[reserveStudent]++); - - // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt - let cnt = 0; - students.forEach((student, i) => { - // 현재 인덱스의 학생이 체육복이 없다면 - if (student === 0) { - // 바로 앞 학생이 체육복 여분이 있다면 - if (students[i - 1] === 2) { - // 바로 앞 학생에게 체육복 빌리기 - students[i - 1]--; - student++; - } - // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면 - else if (students[i + 1] === 2) { - // 바로 뒤 학생에게 체육복 빌리기 - students[i + 1]--; - student++; - } - // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음 - else cnt++; - } - }); - - // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수 - return n - cnt; -} \ No newline at end of file diff --git "a/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" "b/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" deleted file mode 100644 index 2a1955e..0000000 --- "a/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" +++ /dev/null @@ -1,33 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n, m) { - const gcd = greatestCommonDivisor(n, m); - return [gcd, (n * m) / gcd]; -} - -const greatestCommonDivisor = (a, b) => { - if (b === 0) return a; - else return greatestCommonDivisor(b, a % b); -}; - -//정답 2 - chaerin-dev -function solution(n, m) { - // 최대공약수 구하기 - let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m)); - // 최소공배수 구하기 - let lcm = (n, m) => (n * m) / gcd(n, m); - // 결과 출력 - return [gcd(n, m), lcm(n, m)]; -} - -//정답 3 - yongchanson -function solution(a, b) { - let gcd = 0; - for (let i = 1; i <= Math.min(a, b); i++) { - if ((a % i) + (b % i) === 0) { - gcd = i; - } - } - return [gcd, (a / gcd) * b]; -} diff --git "a/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" "b/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" deleted file mode 100644 index 27f96d5..0000000 --- "a/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" +++ /dev/null @@ -1,75 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(num) { - let answer = 0; - while (answer <= 500) { - if (num === 1) return answer; - num = num % 2 === 0 ? num / 2 : num * 3 + 1; - answer += 1; - } - return -1; -} - -//정답 2 - chaerin-dev -function solution(num) { - // 작업을 반복한 횟수를 저장할 변수 - let cnt = 0; - // num이 1이 되면 반복 종료 - while (num > 1) { - // 작업을 500번 반복해도 1이 되지 않으면 -1 반환 - if (cnt == 500) return -1; - // 작업 반복 횟수 증가 - cnt++; - // 입력된 수가 짝수이면 2로 나누기 - if (num % 2 == 0) num /= 2; - // 입력된 수가 홀수이면 3을 곱하고 1을 더하기 - else { - num *= 3; - num++; - } - } - // 작업을 반복한 횟수 반환 - return cnt; -} - -//정답 3 - jaewon1676 -function solution(num) { - var answer = 0; - // num이 1이 아니고, answer이 500이 아니면 진행. - // 두 가지 조건중 하나라도 맞지 않으면 while문 종료. - while (num != 1 && answer != 500) { - //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다. - num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1); - answer++; - } - return num == 1 ? answer : -1; -} - -//정답 4 - prove-ability -function solution(num) { - let count = 0; - - // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. - while (num !== 1) { - // 입력된 수가 짝수라면 2로 나눕니다. - if (num % 2 === 0) num /= 2; - // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. - else num = num * 3 + 1; - count++; - // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요 - if (count > 500) return -1; - } - - return count; -} - -//정답 5 - yongchanson -function solution(num) { - let count = 0; - while (num !== 1) { - if (count++ === 500) return -1; - num = num % 2 ? num * 3 + 1 : num / 2; - } - return count; -} diff --git "a/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" "b/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" deleted file mode 100644 index efdcfcc..0000000 --- "a/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" +++ /dev/null @@ -1,84 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(board, moves) { - let answer = 0; - const length = board.length - let basket = [] - moves.forEach(move => { - for (let i = 0; i < length; i++) { - const item = board[i][move - 1] - if (item !== 0) { - if (basket[basket.length - 1] !== item) { - basket.push(item) - } else { - basket.pop() - answer += 2 - } - board[i][move - 1] = 0 - break - } - } - }) - - return answer; -} - -//정답 2 - jaewon1676 -function solution(board, moves) { - var answer = 0; // 인형을 터뜨린 횟수 - let basket = []; // 바구니 - let crane = 0; // 크레인의 행의 위치 - for (let i = 0; i < moves.length; i++) { - crane = moves[i] - 1; // crane = 0 - for (let j = 0; j < board.length; j++) { - if (board[j][crane] == 0) - else if (board[j][crane] != 0) { - basket.push(board[j][crane]) - board[j][crane] = 0 - if (basket[basket.length - 1] == basket[basket.length - 2]) { - basket.pop(); - basket.pop(); - answer += 2; - } - break; - } - } - } - - return answer; -} - -/* 풀이 과정 -1. 입력받은 moves의 length만큼 for문을 돌린다. -2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다. -3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다. -4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */ - -//정답 3 - chaerin-dev -function solution(board, moves) { - let n = board.length; - - // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경 - board = board.flat(); - let rotatedBoard = Array.from({ length: n }, (i) => []); - for (let i = 0; i < board.length; i++) { - if (board[i]) rotatedBoard[i % n].push(board[i]); - } - - // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기 - let stack = []; - let cnt = 0; - for (let move of moves) { - let doll = rotatedBoard[move - 1].shift(); - if (doll === undefined) continue; - if (stack[stack.length - 1] === doll) { - stack.pop(); - cnt += 2; - } else { - stack.push(doll); - } - } - - return cnt; -} \ No newline at end of file diff --git "a/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" "b/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" deleted file mode 100644 index e613264..0000000 --- "a/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" +++ /dev/null @@ -1,32 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr) { - return arr.reduce((acc, curr) => acc + curr) / arr.length; -} - -//정답 2 - jaewon1676 -function solution(arr) { - var answer = 0; - for (var i = 0; i < arr.length; i++) { - answer += arr[i]; - } - return answer / arr.length; -} - -//정답 3 - chaerin-dev -function solution(arr) { - // arr의 모든 요소를 sum에 더힘 - let sum = arr.reduce((sum, e) => sum + e); - // sum을 arr의 요소의 갯수로 나눈 후 반환 - return sum / arr.length; -} - -// 정답 4 - prove-ability -function solution(arr) { - var answer = 0; - arr.forEach((num) => { - answer += num; - }); - return answer / arr.length; -} diff --git "a/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" "b/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" deleted file mode 100644 index c99d311..0000000 --- "a/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" +++ /dev/null @@ -1,59 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(nums) { - const numLen = nums.length; - const setLen = [...new Set(nums)].length; - return numLen / 2 >= setLen ? setLen : numLen / 2; -} - -//정답 2 - jaewon1676 -function solution(nums) { - let max = nums.length / 2; // N / 2 - let set = [...new Set(nums)]; // 중복을 없앤다. - return set.length > max ? max : set.length; -} - -/* 풀이 과정 -1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다. -2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다. -3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 - 두가지 경우의 수로 좁혀진다. */ - -// 정답 3 - prove-ability -function solution(nums) { - var answer = 0; - // set 을 사용해 중복 제거 - const set = new Set(); - nums.forEach((num) => { - set.add(num); - }); - // set 의 사이즈가 N/2 보다 크다면 N/2 반환 - // 그렇지 않다면 set size 반환 - if (set.size > nums.length / 2) answer = nums.length / 2; - else answer = set.size; - - return answer; -} - -// 정답 4 - yongchanson -function solution(nums) { - const unique = nums.filter((element, index) => { - return nums.indexOf(element) === index; - }); - - return unique.length > nums.length / 2 ? nums.length / 2 : unique.length; -} - -//정답 5 - chaerin-dev -function solution(nums) { - // 가질 수 있는 폰켓몬의 수 - const getCnt = nums.length / 2; - // 폰켓몬 종류의 수 - const setSize = new Set(nums).size; - // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면 - // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음 - // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면 - // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수 - return setSize > getCnt ? getCnt : setSize; -} diff --git "a/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" "b/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" deleted file mode 100644 index d1b0ad8..0000000 --- "a/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(x) { - const sum = x - .toString() - .split("") - .map((x) => parseInt(x)) - .reduce((acc, curr) => acc + curr); - return x % sum === 0; -} - -//정답 2 - chaerin-dev -function solution(x) { - // x의 각 자리에 접근하기 위해 x를 문자열로 변환 - let x_str = x.toString(); - // 각 자릿수의 합을 저장할 변수 - let sum_of_digits = 0; - // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌 - for (let i = 0; i < x_str.length; i++) { - sum_of_digits += Number(x_str[i]); - } - // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환 - return x % sum_of_digits == 0; -} - -//정답 3 - jaewon1676 -function solution(x) { - let sum = 0; - let arr = String(x).split(""); // 숫자를 하나씩 분리한다. - - for (var i = 0; i < arr.length; i++) { - sum += Number(arr[i]); // 각 숫자를 더해준다. - } - - return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수 -} - -//정답 4 - prove-ability -function solution(x) { - var answer = true; - // 모든 자릿수의 합을 구한다 - const sum = x - .toString() - .split("") - .reduce((acc, cur) => acc + parseInt(cur, 10), 0); - // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환 - if (x % sum !== 0) return false; - return answer; -} diff --git "a/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" "b/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" deleted file mode 100644 index 0d5e21a..0000000 --- "a/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" +++ /dev/null @@ -1,22 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(phone_number) { - return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); -} - -//정답 2 - chaerin-dev -function solution(phone_number) { - // "*"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과 - // phone_number의 -4인덱스부터 끝까지 추출한 문자열을 - // 이어붙인 후 반환 - return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); -} - -// 정답 3 - prove-ability -function solution(phone_number) { - var answer = ""; - answer += "*".repeat(phone_number.length - 4); - answer += phone_number.slice(phone_number.length - 4, phone_number.length); - return answer; -} diff --git "a/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" "b/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" deleted file mode 100644 index 92ce3ff..0000000 --- "a/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr1, arr2) { - const answer = []; - arr1.forEach((row, rowIndex) => { - answer.push(row.map((col, colIndex) => col + arr2[rowIndex][colIndex])); - }); - return answer; -} - -//정답 2 - codeisneverodd -function solution(arr1, arr2) { - var answer = new Array(arr1.length); - for (let i = 0; i < arr1.length; i++) { - answer[i] = new Array(arr1[0].length); - } - for (let row = 0; row < answer.length; row++) { - for (let col = 0; col < answer[0].length; col++) { - answer[row][col] = arr1[row][col] + arr2[row][col]; - } - } - return answer; -} - -//정답 3 - chaerin-dev -function solution(arr1, arr2) { - var answer = []; - for (let i = 0; i < arr1.length; i++) { - let ans_row = []; - for (let j = 0; j < arr1[0].length; j++) { - ans_row.push(arr1[i][j] + arr2[i][j]); - } - answer.push(ans_row); - } - return answer; -} - -//정답 4 - yongchanson -function solution(A, B) { - let answer = []; - - for (let i = 0; i < A.length; i++) { - answer[i] = []; - for (let j = 0; j < A[0].length; j++) { - answer[i][j] = A[i][j] + B[i][j]; - } - } - return answer; -} diff --git "a/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" "b/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" deleted file mode 100644 index 86a6c59..0000000 --- "a/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - 본인의 깃허브 아이디 -function solution(n) { - //프로그래머스에 제출하여 통과된 함수를 복사 붙여넣기 해주세요! -} - -//정답 2 - 본인의 깃허브 아이디 -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" "b/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" deleted file mode 100644 index 5bf2450..0000000 --- "a/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" +++ /dev/null @@ -1,62 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - var answer = ''; - const oneTwoFour = ['4', '1', '2'] - while (n > 0) { - const remainder = n % 3 - answer = oneTwoFour[remainder] + answer; - n = Math.floor((n - 1) / 3) //나누어떨어지지 않을 때에도 -1해도 상관없음 - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(n) { - var answer = ''; - const oneTwoFour = ['4', '1', '2'] - while (n > 0) { - const remainder = n % 3 - answer = oneTwoFour[remainder] + answer; - if (remainder === 0) { - n = Math.floor((n - 1) / 3) - } else { - n = Math.floor(n / 3) - } - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(n) { - const number = [ 4, 1, 2]; - let answer = ""; - - while(n){ // - answer = number[n%3] + answer; - n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3); - } - - return answer -} - -//정답 4- RyanDeclan -// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용 -// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드 -let result = ""; -function solution(n) { - let remainder = n % 3; - let quotient = Math.floor(n / 3) - if(!remainder){ - quotient = Math.floor(n / 3) - 1; - remainder = 3 - } - result += remainder; - if( quotient <= 3){ - if(quotient)result += quotient - result = result.replace(/["3"]/g,"4") - return result.split("").reverse().join("") - } - return solution(quotient); -} diff --git a/level-2/H-Index&42747&.js b/level-2/H-Index&42747&.js deleted file mode 100644 index 1af72bc..0000000 --- a/level-2/H-Index&42747&.js +++ /dev/null @@ -1,37 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(citations) { - var answer = 0; - citations.sort((a, b) => b - a) - let h = 0 - while (h + 1 <= citations[h]) h++ - answer = h - return answer; -} - -//정답 2 - codeisneverodd -function solution(citations) { - var answer = 0; - let h = 0 - let length = 0 - while (length >= h) { - h++ - length = citations.filter(citation => citation >= h).length - } - answer = h - 1 - return answer; -} - -//정답 3 - jaewon1676 -function solution(citations) { - var answer = 0; - citations.sort((a,b)=>(b-a)) - - for(var i=0; i word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ') - //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다. - return answer; -} - -//정답 2 - jaewon1676 -function solution(s) { - s = s.split(' ').map(el => el.split('').map((el, index) => - index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ') - return s; -} -// 문자열을 연습하기에 좋은 문제입니다. - -// s.split(' ') // 띄어쓰기를 기준으로 나눕니다. -// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 -// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase()) -// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. -// .join('') 작은 배열들을 합쳐줍니다. -// .join(' ') 큰 배열들을 합쳐줍니다. - -//정답 3 - yongchanson -function solution(s) { - let answer = []; - s = s.split(" "); - - for (let i = 0; i < s.length; i++) { - answer.push( - s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase() - ); - } - return answer.join(" "); -} - -//정답 4 - RyanDeclan - -function solution(s) { - return s.toLowerCase().split(" ").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : "").join(" "); -} - -// 이 문제에서 제일 핵심은 "공백문자가 연속해서 나올 수 있습니다." 입니다. 이 부분을 꼭 고려하셔야합니다. -// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다. -// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. -//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다. diff --git "a/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" "b/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" deleted file mode 100644 index d6b7ce3..0000000 --- "a/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" +++ /dev/null @@ -1,53 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - var answer = ''; - numbers.sort(sortFunc) - answer = numbers.join('') - if (answer[0] === '0') return '0' - return answer; -} - -const sortFunc = (a, b) => { - const compareA = parseInt(a.toString() + b.toString()) - const compareB = parseInt(b.toString() + a.toString()) - return compareB - compareA -} - - -// 정답 2 - createhb21 -function solution(numbers) { - let stringNum = - numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b)); - - return stringNum[0] === '0' ? '0' : stringNum.join(''); -} - -// 정답 3 - prove-ability -function solution(numbers) { - if(numbers.every(v => v === 0)) return "0"; - return numbers.sort((a, b) => { - if(a === b) return 0; - let stringA = a.toString(10), stringB = b.toString(10); - if(stringA[0] === stringB[0]) { - let aIndex = 1, bIndex = 1; - while(true) { - if(!stringA[aIndex]) --aIndex; - if(!stringB[bIndex]) --bIndex; - if(stringA[aIndex] === stringB[bIndex]) { - aIndex++, bIndex++; - continue; - } - if(stringA[aIndex] < stringB[bIndex]) return 1; - else return -1; - } - } - return stringB[0] - stringA[0] - }).join(""); -} - -// 정답 4 - prove-ability -function solution(numbers) { - return numbers.every(v => v === 0) ? "0" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(""); -} diff --git "a/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" "b/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" deleted file mode 100644 index 3bfd2a7..0000000 --- "a/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" +++ /dev/null @@ -1,66 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 -function solution(people, limit) { - let cnt = 0; - - people.sort((a, b) => {return a - b}) // 몸무게 오름차순 - - while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 - if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기 - people.pop() - people.shift() - } else { - people.pop() // 무거운사람을 뺴주자 - } - cnt++; - } - return cnt; -} // 4주차 2번 문제와 유사함 - -// 정답 2- prove-ability -function solution(people, limit) { - let count = 0; - // 오름차순 정렬 - people.sort((a, b) => a - b); - - // people 배열 요소가 있다면? - while(people.length) { - - // 요소 중 가장 큰 수인 마지막 요소를 가져온다 - let sum = people.pop(); - - // 요소 중 가장 작은 수를 더한다 - sum += people[0] - - // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거 - if(sum <= limit) people.shift(); - - count++; - } - - return count; -} - -// 정답 3 - iHoHyeon -function solution(people, limit) { - people.sort((a, b) => a - b); // 오름차순 정렬 - - let cnt = 0; // 구명보트 개수 - - let front = 0; // 가장 몸무게가 작은 사람의 index - let last = people.length; // 가장 몸무게가 큰 사람의 index - - while (last > front) { - cnt++; - - const now = people.pop(); - last--; - - if (now + people[front] <= limit) { - front++; // shift() 연산의 비효율로 인해 front 사용 - } - } - - return cnt; -} \ No newline at end of file diff --git "a/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" "b/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" deleted file mode 100644 index 1cc3df1..0000000 --- "a/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" +++ /dev/null @@ -1,153 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd - 시간복잡도 감소 -function solution(progresses, speeds) { - var answer = []; - const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index])) - console.log(remainDays) - let maxDay = remainDays[0] - answer.push(0) - for (let i = 0; i < remainDays.length; i++) { - if (remainDays[i] <= maxDay) { - answer[answer.length - 1] += 1 - } else { - answer.push(1) - maxDay = remainDays[i] - } - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(progresses, speeds) { - var answer = []; - while (progresses.length > 0) { - let done = 0 - progresses = progresses.map((prog, index) => prog + speeds[index]) - const length = progresses.length - for (let i = 0; i < length; i++) { - if (progresses[0] >= 100) { - progresses.shift() - speeds.shift() - done += 1 - } else { - break - } - } - if (done > 0) answer.push(done) - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(progresses, speeds) { - let answer = []; - - while(speeds.length > 0) { - for(let i=0;i= 100) { - progresses.shift(); - speeds.shift(); - count++; - } - if(count > 0) { // 결과 배열에 넣어주기 - answer.push(count); - } - } - return answer; -} - -// 정답 4 - createhb21 -function solution(progresses, speeds) { - // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열 - var answer = []; - // 각각의 기능이 몇 일 소요되는지 담은 큐 - let queue = []; - - for (let i = 0; i < speeds.length; i++) { - // 각각의 기능이 몇 일 걸리는지 계산 - let task = Math.ceil((100 - progresses[i]) / speeds[i]); - // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다. - queue.push(task); - - // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push() - // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화 - if(task > queue[0]) { - answer.push(queue.length-1); - // 큐 초기화 - queue = [task]; - } - } - - answer.push(queue.length); - return answer; - } - -// 정답 5 - chaerin-dev -function solution(progresses, speeds) { - // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장 - const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i])); - - // 최초 배포날은 daysLeftArr의 첫 번째 요소 - let deployDay = daysLeftArr[0]; - // 각 배포에 몇 개의 기능이 배포될지 셀 변수 - let cnt = 0; - // 각 배포에 몇 개의 기능이 배포될지 저장할 배열 - const answer = []; - - // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포 - daysLeftArr.forEach((daysLeft) => { - if (deployDay < daysLeft) { - deployDay = daysLeft; - answer.push(cnt); - cnt = 0; - } - cnt++; - }); - answer.push(cnt); - - // 정답 반환 - return answer; -} - -// 정답 6 - RyanDeclan -// 예제1) 입력값 : [93, 30, 55], [1, 30, 5] -function solution(progresses, speeds) { - // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열 - let countBox = []; - let completeBox = []; - for(k=1; k<100; k++){ - let complete = [] - for(i=0; i= 100){ - complete.push([i,k]); - progresses.splice(i,1,"end") - } - } - if(complete[0] != null)completeBox.push(...complete) - } - completeBox.sort((a,b) => a[0] - b[0]) - - //여기까지 한다면 console.log(completeBox) [ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. - // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 - - // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 - let count = 0; - completeBox.reduce((acc, cur, i) => { - if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 - if(i) countBox.push(count) - acc[0] = cur[1]; - count = 0; - count++ - }else{count++} - if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. - return acc - } ,[0]) - return countBox; -} diff --git "a/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" "b/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" deleted file mode 100644 index e8b5cd6..0000000 --- "a/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" +++ /dev/null @@ -1,55 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(bridge_length, weight, truck_weights) { - let [tick, onBridge, weightOnBridge] = [0, [{weight: 0, timeToOut: 0}], 0] - while (onBridge.length > 0 || truck_weights.length > 0) { - if (onBridge[0].timeToOut === tick) weightOnBridge -= onBridge.shift().weight - if (weightOnBridge + truck_weights[0] <= weight) { - weightOnBridge += truck_weights[0] - onBridge.push({weight: truck_weights.shift(), timeToOut: tick + bridge_length}) - } else { - if (onBridge[0]) tick = onBridge[0].timeToOut - 1 // 시간을 줄이는 포인트 - } - tick++ - } - return tick -} - -//정답 2 - codeisneverodd -function solution(bridge_length, weight, truck_weights) { - const bridge = new Array(bridge_length).fill(0) - let tick = 0 - do { - tick++ - bridge.pop() - bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ? - bridge.unshift(truck_weights.shift()) : bridge.unshift(0) - } while (bridge.reduce((a, b) => a + b) !== 0) - return tick; -} - -//정답 3 - jaewon1676 -function solution(bridge_length, weight, truck_weights) { - var answer = 0; // 총 걸리는 시간 - let bridge = []; // 다리를 건너는 트럭 - let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게 - - while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다. - answer++; // 1초 추가 - if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다. - bridge_weight -= bridge.shift(); - } - if (bridge_weight + truck_weights[0] > weight) { - bridge.push(0); - continue; - } - let truck_weight = truck_weights.shift(); - bridge.push(truck_weight); - bridge_weight += truck_weight; - } - - answer += bridge_length; - - return answer; - } \ No newline at end of file diff --git "a/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" "b/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" deleted file mode 100644 index 860c9e4..0000000 --- "a/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let answer = n; - const nCountOne = n.toString(2).match(/1/g).length - while (true) { - answer++ - if (nCountOne === (answer).toString(2).match(/1/g).length) break - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(n) { - var answer = 0; - let find = false - const nCountOne = countOne(n.toString(2)) - let counter = 1 - while (!find) { - if (nCountOne === countOne((n + counter).toString(2))) { - answer = n + counter - find = true - } - counter++ - } - return answer; -} - -const countOne = (str) => { - return str.split('').reduce((sum, currentChar) => - currentChar === '1' ? sum += 1 : sum, 0) -} - -//정답 3 - prove-ability -function solution(n) { - let i = n; - n = n.toString(2).match(/1/g).length; - while(true) { - i++; - const value = i.toString(2).match(/1/g).length; - if(n === value) return i; - } -} - -//정답 4 = ryan-dia -function solution(n) { - const count = (num) => num.toString(2).match(/1/g).length; - for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i -} diff --git "a/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" "b/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" deleted file mode 100644 index 539fb20..0000000 --- "a/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" +++ /dev/null @@ -1,65 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(w, h) { - var answer = 1; - const gcd = greatestCommonDivisor(w, h) - answer = w * h - (h + w - gcd) - return answer; -} - -let greatestCommonDivisor = (a, b) => { - while (b > 0) { - let r = a % b; - a = b; - b = r; - } - return a; -} - -//정답 2 - codeisneverodd -function solution(w, h) { - var answer = 1; - const gcd = greatestCommonDivisor2(w, h) - const erasedBoxInUnit = h / gcd + w / gcd - 1 - answer = w * h - erasedBoxInUnit * gcd - return answer; -} - -let greatestCommonDivisor2 = (a, b) => { - while (b > 0) { - let r = a % b; - a = b; - b = r; - } - return a; -} - -//정답 3 - jaewon1676 -// 유클리드 호제법을 이용한 최대 공약수 구하기 -function gcd(w, h) { - let mod = w % h; // w와 h의 나머지를 구합니다. - - if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다. - return h; - } - // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다. - return gcd(h, mod); -} -function solution(w, h) { - const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다. - return w * h - (w + h - gcdVal); -} - -//정답 4 - yongchanson -function solution(w,h){ - const slope = h / w; - let cnt = 0; - //대각선 아래에 위치한 도형의 개수를 구합니다. - //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다. - for(let i = 1; i <= w; i++){ - cnt += Math.ceil(slope * i); - } - //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다. - return ((w*h - cnt) * 2); -} diff --git "a/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" "b/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" deleted file mode 100644 index 93b5e62..0000000 --- "a/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" +++ /dev/null @@ -1,52 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { //수학적 풀이는 별도로 하지 않았습니다. - var answer = 0; - for (let i = 1; i <= n; i++) { - let sum = 0 - for (let j = i; j <= n; j++) { - sum += j - if (sum >= n) { - if (sum === n) answer++ - break - } - } - } - return answer; -} - -//정답 2 - prove-ability -function solution(n) { - let answer = 0; - for(let i = 1; i <= n; i++) { - let sum = 0; - for(let j = i; j <= n; j++) { - sum += j; - if(sum > n) break; - if(n === sum) { - answer++; - break; - } - } - } - return answer; -} - -//정답 3 - yongchanson -function solution(n) { - /* - 정답 = n의 홀수 약수의 개수 - 15의 홀수 약수 : 1,3,5,15 - 1+2+3+4+5=15 (중간값 3) - 4+5+6=15 (중간값 5) - 7+8=15 (연속된 값) - 15=15 (15) - */ - let result = 0; - - for (let i = 1; i <= n; i++) { - if (n % i == 0 && i % 2 == 1) result++; - } - return result; -} diff --git "a/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" "b/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" deleted file mode 100644 index c982ca6..0000000 --- "a/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" +++ /dev/null @@ -1,12 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - let opened = 0; - for (const bracket of s) { - if (bracket === "(") opened += 1; - if (bracket === ")") opened -= 1; - if (opened < 0) return false; - } - return opened === 0; -} diff --git "a/level-2/\354\234\204\354\236\245&42578&.js" "b/level-2/\354\234\204\354\236\245&42578&.js" deleted file mode 100644 index 1466598..0000000 --- "a/level-2/\354\234\204\354\236\245&42578&.js" +++ /dev/null @@ -1,89 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(clothes) { - var answer = 1; - const spyWear = {}; - for (const clothNPart of clothes) - spyWear[clothNPart[1]] = (spyWear[clothNPart[1]] || 0) + 1; - for (const part in spyWear) answer *= spyWear[part] + 1; - return answer - 1; -} - -//정답 2 - codeisneverodd -function solution(clothes) { - var answer = 0; - const spyWear = {}; - for (const clothNPart of clothes) { - if (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = []; - spyWear[clothNPart[1]].push(clothNPart[0]); - } - const clothesCount = []; - for (const part in spyWear) clothesCount.push(spyWear[part].length + 1); - answer = - clothesCount.reduce((previous, current) => previous * current, 1) - 1; - return answer; -} -// 정답 3 - hyosung -function solution(clothes) { - let answer = 1; - // 옷 종류 - const types = {}; - // 반복문 최적화 - length, 비교연산 제거 - const length = clothes.length; - for (let i = length; i--; ) { - // 해당 옷의 종류가 없다면 종류 1 - if (!types[clothes[i][1]]) types[clothes[i][1]] = 1; - // 해당 옷의 종류가 있다면 종류 증가 - else types[clothes[i][1]] += 1; - } - // (종류 별 값 + 1 ) 을 다 곱셈 - Object.values(types).forEach((v) => { - answer *= v + 1; - }); - - return answer - 1; -} - -//정답 4 - jaewon1676 -function solution(clothes) { - var answer = 1; - var obj={}; - for(var i=0;i - clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1) - ); - - // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐 - // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나) - // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨 - let answer = 1; - for (let key of Object.keys(clothsObj)) { - answer *= clothsObj[key] + 1; - } - - // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기 - return answer - 1; -} \ No newline at end of file diff --git "a/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" "b/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" deleted file mode 100644 index 9de65a0..0000000 --- "a/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" +++ /dev/null @@ -1,25 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - var ans = 0; - while (n > 0) { - if (n % 2 !== 0) { - n = (n - 1) / 2 - ans++ - } else { - n = n / 2 - } - } - return ans; -} - -//정답 2 - yongchanson -function solution(n) { - let result = 0; - while (n > 0) { - result += n % 2; - n = Math.floor(n / 2); - } - return result; -} diff --git "a/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" "b/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" deleted file mode 100644 index 66569b8..0000000 --- "a/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" +++ /dev/null @@ -1,47 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = -1; - let notPairStack = [] - for (let i = 0; i < s.length; i++) notPairStack[notPairStack.length - 1] === s[i] ? notPairStack.pop() : notPairStack.push(s[i]) - answer = notPairStack.length === 0 ? 1 : 0 - return answer; -} - -//정답 2 - codeisneverodd -function solution(s) { - var answer = -1; - let notPairStack = [] - notPairStack.push(s[0]) - for (let i = 1; i < s.length; i++) { - if (notPairStack[notPairStack.length - 1] === s[i]) { - notPairStack.pop() - } else { - notPairStack.push(s[i]) - } - } - answer = notPairStack.length === 0 ? 1 : 0 - return answer; -} - -//정답 3 - jaewon1676 - -function solution(s){ - let cnt = 0; // 빼준 부분을 카운트 해줍니다 - let answer; - let stack = [] - for (let i of s){ - if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다 - stack.pop(); - cnt++;; - } else { - stack.push(i) - } - } - - (s.length / 2 == cnt ? answer = 1 : answer = 0 ) - // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다 - return answer; - } - // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다 \ No newline at end of file diff --git "a/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" "b/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" deleted file mode 100644 index d2c0a52..0000000 --- "a/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" +++ /dev/null @@ -1,40 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = ''; - const arr = s.split(' ') - answer = Math.min(...arr) + ' ' + Math.max(...arr) - return answer; -} - -//정답 2 - codeisneverodd -function solution(s) { - var answer = ''; - const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b) - answer = arr[0] + ' ' + arr[arr.length - 1] - return answer; -} - -//정답 3 - jaewon1676 -function solution(s) { - s = s.split(' ') - s.sort((a, b) => {return a - b}) // 오름차순 정렬 - let small = s[0] // s의 최솟값 - let large = s[s.length - 1] // s의 최댓값 - return (small + ' ' + large) -} - -//정답 4 - prove-ability -function solution(s) { - s = s.split(" ").map((v) => parseInt(v, 10)) - return `${Math.min(...s)} ${Math.max(...s)}`; -} - -//정답 5 - yongchanson -function solution(s) { - let arr = s.split(" ").sort((a, b) => a - b); - arr.splice(1, arr.length - 2, " "); - let result = arr.join(""); - return result; -} diff --git "a/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" "b/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" deleted file mode 100644 index c7bf910..0000000 --- "a/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(A, B) { - var answer = 0; - A = A.sort((a, b) => a - b) - B = B.sort((a, b) => b - a) - for (let i = 0; i < A.length; i++) answer += A[i] * B[i] - return answer; -} - -//정답 2 - prove-ability -function solution(A,B){ - let sum = 0; - A.sort((a, b) => a - b); - B.sort((a, b) => b - a); - - for(let i = 0, len = A.length; i < len; i++) { - sum += A[i] * B[i]; - } - - return sum; -} - -//정답 3 - yongchanson -function solution(A, B) { - A.sort((a, b) => a - b); - B.sort((a, b) => b - a); - return A.reduce((t, n, i) => t + n * B[i], 0); -} diff --git "a/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" "b/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" deleted file mode 100644 index 1bedf83..0000000 --- "a/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" +++ /dev/null @@ -1,36 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(number, k) { - var answer = ''; - let answerStack = [0] - let deleteCount = -1 - for (let i = 0; i < number.length; i++) { - while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) { - answerStack.pop() - deleteCount++ - } - if (answerStack.length < number.length - k) answerStack.push(number[i]) - } - answer = answerStack.join('') - return answer; -} - -//정답 4 - jaewon1676 -function solution(number, k) { - const stack = []; - let answer = ''; - - for(let i=0; i 0 && stack[stack.length-1] < el){ - stack.pop(); - k--; - } - stack.push(el); - } - stack.splice(stack.length-k, k); - answer = stack.join(""); - return answer; -} - \ No newline at end of file diff --git "a/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" "b/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" deleted file mode 100644 index 4120a91..0000000 --- "a/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" +++ /dev/null @@ -1,46 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(numbers, target) { - const dfs = (index, sum) => { - if (index === numbers.length) return sum === target ? 1 : 0; - return dfs(index + 1, sum + numbers[index]) + dfs(index + 1, sum - numbers[index]); - }; - return dfs(0, 0); -} - -//정답 2 - ssi02014 -function solution(numbers, target) { - let answer = 0; - - dfs(0, 0); - return answer; - - function dfs(index, sum) { - // 재귀 종료 - if (index === numbers.length) { - if (sum === target) { - answer++; - } - return; - } - - dfs(index + 1, sum + numbers[index]); - dfs(index + 1, sum - numbers[index]); - } -} - -//정답 3 - codeisneverodd -function solution(numbers, target) { - var answer = 0; - const binaryLength = numbers.length; - const binary = 2 ** binaryLength; - for (let i = 0; i < binary; i++) { - const numSlice = numbers.slice(); - const binaryString = i.toString(2).padStart(binaryLength, '0'); - for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null; - const calculated = numSlice.reduce((prev, current) => prev + current); - if (calculated === target) answer += 1; - } - return answer; -} diff --git "a/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" "b/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" deleted file mode 100644 index d29b243..0000000 --- "a/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" +++ /dev/null @@ -1,136 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(priorities, location) { - var answer = 0; - let documents = priorities.map((priority, index) => ({location: index, priority: priority})) - let locationPrinted = false - while (!locationPrinted) { - const shifted = documents.shift() - let printAvailable = true - if (documents.some((document) => shifted.priority < document.priority)) printAvailable = false - if (printAvailable) { - answer += 1 - if (shifted.location === location) locationPrinted = true - } else { - documents.push(shifted) - } - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(priorities, location) { - var answer = 0; - let documents = priorities.map((priority, documentLocation) => [documentLocation, priority]) - let locationPrinted = false - while (!locationPrinted) { - const shifted = documents.shift() - let printAvailable = true - for (let i = 0; i < documents.length; i++) { - if (shifted[1] < documents[i][1]) { - printAvailable = false - break - } - } - if (printAvailable) { - answer += 1 - if (shifted[0] === location) locationPrinted = true - } else { - documents.push(shifted) - } - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(priorities, location) { - var answer = 0; - while (true) { - - if (priorities[0] < Math.max(...priorities)) { - if (location - 1 < 0) location = priorities.length - priorities.push(priorities.shift()) - location--; - } else { - answer++; - if (location - 1 < 0) { - return answer; - } - priorities.shift() - location--; - } - console.log(priorities, location, answer) - - } - return answer -} - -// 정답 4 - createhb21 -function solution(priorities, location) { - var answer = priorities.map((priority, index) => { - return { - index, - priority - }; - }); - - let queue = []; - - while(answer.length > 0){ - const first = answer.shift(); - const isPriority = answer.some((p) => p.priority > first.priority); - isPriority ? answer.push(first) : queue.push(first); - } - const idx = queue.findIndex(p => p.index === location) + 1; - return idx; - } - -//정답 5 - codeisneverodd -//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다. -function solution(priorities, location) { - let answer = 0; - const printer = new Queue; - priorities.forEach((priority, index) => { - printer.enqueue([priority, index]) - }) - while (printer.size() > 0) { - const check = printer.dequeue() - const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length - if (countHigherPriority > 0) { - printer.enqueue(check) - } else { - answer += 1 - if (check[1] === location) break - } - - } - return answer; -} - -class Queue { - constructor() { - this.queue = [] - this.front = 0 - this.rear = 0 - } - - enqueue(value) { - this.queue[this.rear++] = value - } - - dequeue() { - const value = this.queue[this.front] - delete this.queue[this.front] - this.front += 1 - return value - } - - peek() { - return this.queue(this.front) - } - - size() { - return this.rear - this.front - } -} diff --git "a/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" "b/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" deleted file mode 100644 index fb1e167..0000000 --- "a/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" +++ /dev/null @@ -1,33 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(arr1, arr2) { - const [row, col] = [arr1.length, arr2[0].length] - let answer = new Array(row); - for (let i = 0; i < row; i++) answer[i] = new Array(col) - //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값 - for (let i = 0; i < row; i++) { - for (let j = 0; j < col; j++) { - answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0) - } - } - return answer; -} - -//정답 2 - prove-ability -function solution(arr1, arr2) { - var answer = []; - // 행만큼 반복 - for(let i = 0, len = arr1.length; i < len; i++) { - const arr = [] - // 열만큼 반복 - for(let j = 0, len = arr1[i].length; j < len; j++) { - // 각의 배열에서 행을 더해서 arr push - arr.push(arr1[i][j] + arr2[i][j]) - } - // 열 만큼 추가된 arr 를 answer 가 추가 - answer.push(arr) - } - - return answer; -} \ No newline at end of file diff --git "a/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" "b/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" deleted file mode 100644 index 86a6c59..0000000 --- "a/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - 본인의 깃허브 아이디 -function solution(n) { - //프로그래머스에 제출하여 통과된 함수를 복사 붙여넣기 해주세요! -} - -//정답 2 - 본인의 깃허브 아이디 -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" "b/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" deleted file mode 100644 index 5b45d5b..0000000 --- "a/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" +++ /dev/null @@ -1,48 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(genres, plays) { - var answer = []; - const songs = [] - const genreSumHash = {} - const genreSumArr = [] - - //고유번호, 장르, 플레이수를 담은 songs - genres.forEach((genre, id) => { - songs.push({id: id, genre: genre, play: plays[id]}) - genreSumHash[genre] = genreSumHash[genre] === undefined ? plays[id] : genreSumHash[genre] + plays[id] - }) - - //장르별 플레이수 합으로 정렬하기 위해 생성한 배열 genreSumArr - for (const genre in genreSumHash) genreSumArr.push([genre, genreSumHash[genre]]) - genreSumArr.sort((a, b) => b[1] - a[1]) - - //각 장르안에서 각 노래의 play수가 높은 순으로 정렬하고 앞에서부터 2개까지 정답에 고유번호를 push - for (const genre of genreSumArr) { - const sorted = songs.filter(song => song.genre === genre[0]).sort((a, b) => b.play - a.play) - for (let i = 0; i < 2 && i < sorted.length; i++) answer.push(sorted[i].id) - } - return answer; -} - -//정답 2 - codeisneverodd -//Map과 고차함수를 적극적으로 이용한 풀이 -function solution(genres, plays) { - const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]} - genres - .map((genre, id) => [genre, plays[id]]) - .forEach(([genre, play], id) => { - const data = genreMap.get(genre) || {totalPlay: 0, songs: []} - genreMap.set(genre, { - totalPlay: data.totalPlay + play, - songs: [...data.songs, {play: play, id: id}] - .sort((a, b) => b.play - a.play) - .slice(0, 2) - }) - }) - - return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...] - .sort((a, b) => b[1].totalPlay - a[1].totalPlay) - .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs] - .map(song => song.id) -} \ No newline at end of file diff --git "a/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" "b/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" deleted file mode 100644 index 86a6c59..0000000 --- "a/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - 본인의 깃허브 아이디 -function solution(n) { - //프로그래머스에 제출하여 통과된 함수를 복사 붙여넣기 해주세요! -} - -//정답 2 - 본인의 깃허브 아이디 -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" "b/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" deleted file mode 100644 index c6c966a..0000000 --- "a/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - 본인의 깃허브 아이디 -function solution(n) { - //프로그래머스에 제출하여 통과된 함수를 복사 붙여넣기 해주세요! -} - -//정답 2 - 본인의 깃허브 아이디 -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3cff13a..7dd1855 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@types/node": "^18.11.18", "axios": "^1.1.2", "cheerio": "^1.0.0-rc.10", + "nanoid": "^4.0.0", "node-fetch": "^3.2.3", "prettier": "^2.7.1", "ts-node": "^10.9.1", @@ -1008,6 +1009,17 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/nanoid": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", + "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } + }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -2245,6 +2257,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "nanoid": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", + "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==" + }, "node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", diff --git a/package.json b/package.json index 0d04bce..ce15270 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@types/node": "^18.11.18", "axios": "^1.1.2", "cheerio": "^1.0.0-rc.10", + "nanoid": "^4.0.0", "node-fetch": "^3.2.3", "prettier": "^2.7.1", "ts-node": "^10.9.1", diff --git a/run.ts b/run.ts new file mode 100644 index 0000000..b28b04f --- /dev/null +++ b/run.ts @@ -0,0 +1,3 @@ + + + diff --git a/tsconfig.json b/tsconfig.json index baca310..9a4ae08 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,103 +1,23 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - "allowJs": true /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */, - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./built" /* Specify an output folder for all emitted files. */, - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ + "target": "ES2022", + "module": "Node16", + "lib": ["ES2022"], + "moduleResolution": "Node16", + "rootDir": ".", + "outDir": "build", + "allowSyntheticDefaultImports": true, + "importHelpers": true, + "alwaysStrict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitAny": false, + "noImplicitThis": false, + "strictNullChecks": false, + "esModuleInterop": true, + "baseUrl": "." } } diff --git a/utils/db.ts b/utils/db.ts new file mode 100644 index 0000000..6aa44d4 --- /dev/null +++ b/utils/db.ts @@ -0,0 +1,64 @@ +import { nanoid } from 'nanoid'; +import { makeDir, readFile, writeFile } from './file.js'; + +type Prob = { + id: string; + title: string; + level: 0 | 1 | 2 | 3 | 4 | 5; +}; + +interface Sol { + id: string; + probId: string; + code: string; + author: string; +} + +export const getDB = () => JSON.parse(readFile('results/db.json')) as { sols: Sol[]; probs: Prob[] }; +export const writeDB = (content: { probs: Prob[]; sols: Sol[] }) => + writeFile({ + dirName: 'results', + fileName: `db.json`, + content: JSON.stringify(content), + }); + +/** Sol 하나를 DB 및 파일에 추가 */ +export const addSol = ({ author, code, probId }: Omit) => { + const { probs, sols } = getDB(); + const { level, title } = probs.find((prob) => prob.id === probId); + + const addToFiles = () => { + const newDir = `solutions/level-${level}/${title}`; + makeDir(newDir); + + writeFile({ + dirName: newDir, + fileName: `${author}.js`, + content: code, + }); + }; + + const addToDB = () => { + const newSol: Sol = { + id: nanoid(), + author, + code, + probId, + }; + + writeDB({ + probs, + sols: [...sols.filter((sol) => !(sol.author === newSol.author && sol.probId === newSol.probId)), newSol], + }); + }; + + addToFiles(); + addToDB(); +}; + +/** DB 전체를 파일로 변환 */ +export const dbToFile = () => { + const { sols } = getDB(); + + sols.forEach((sol) => addSol(sol)); +}; diff --git a/utils/file.ts b/utils/file.ts new file mode 100644 index 0000000..4bb3ba4 --- /dev/null +++ b/utils/file.ts @@ -0,0 +1,33 @@ +import * as fs from 'fs'; +import path, { dirname } from 'path'; + +import { fileURLToPath } from 'url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +/** build 폴더 기준 절대경로를 사용하세요 */ +export const makeDir = (_path: string) => { + if (fs.existsSync(path.join(__dirname, '../', _path))) return; + + fs.mkdirSync(path.join(__dirname, '../', _path), { recursive: true }); +}; + +/** build 폴더 기준 절대경로를 사용하세요 */ +export const writeFile = ({ dirName, fileName, content }) => { + const _path = `${dirName}/${fileName}`; + // if (fs.existsSync(path.join(__dirname, _path))) return; + + fs.writeFileSync(path.join(__dirname, '../', _path), content); +}; + +/** build 폴더 기준 절대경로를 사용하세요 */ +export const readFile = (_path: string) => { + return fs.readFileSync(path.join(__dirname, '../', _path), { + encoding: 'utf-8', + }); +}; + +/** build 폴더 기준 절대경로를 사용하세요 */ +export const readDir = (dirName: string) => { + return fs.readdirSync(path.join(__dirname, '../', dirName)); +}; From 15bc46e454fddbfa072d86772e94d7be13d9def8 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Sat, 28 Jan 2023 17:11:13 +0900 Subject: [PATCH 03/13] feat: add oldSols and oldSols processing logic --- build/{results => db}/db.json | 3010 +++++++++-------- ...47\214\353\223\244\352\270\260&120842&.js" | 10 + .../369\352\262\214\354\236\204&120891&.js" | 6 + ...5\230-\352\260\234\354\210\230&120912&.js" | 6 + ...47\214\353\223\244\352\270\260&120886&.js" | 7 + .../OX\355\200\264\354\246\210&120907&.js" | 9 + ...5\230-\352\260\234\354\210\230&120887&.js" | 10 + ...63\240\353\245\264\352\270\260&120905&.js" | 6 + ...1\214\354\232\264-\354\210\230&120890&.js" | 7 + ...0\224\354\234\204-\353\263\264&120839&.js" | 7 + ...0\230-\354\260\276\352\270\260&120899&.js" | 7 + ...60\201\353\217\204\352\270\260&120829&.js" | 9 + ...7\270-\352\265\260\353\213\250&120837&.js" | 9 + ...5\230-\352\270\270\354\235\264&120876&.js" | 11 + ...15\230\354\247\200\352\270\260&120843&.js" | 9 + ...2\260\354\235\230-\354\210\230&120840&.js" | 11 + ...65\254\355\225\230\352\270\260&120810&.js" | 6 + ...5\264-\354\266\234\353\240\245&120820&.js" | 6 + ...0\254-\354\210\253\354\236\220&120924&.js" | 9 + ...15\224\355\225\230\352\270\260&120863&.js" | 22 + ...06\214\353\254\270\354\236\220&120893&.js" | 6 + ...0\230\354\235\230-\352\263\261&120804&.js" | 6 + ...02\230\353\210\227\354\205\210&120806&.js" | 6 + ...0\230\354\235\230-\354\260\250&120803&.js" | 6 + ...0\230\354\235\230-\355\225\251&120802&.js" | 6 + ...47\244\352\270\260\352\270\260&120882&.js" | 12 + ...-\354\204\261\352\263\265?&120883&.js" | 8 + ...1\260-\354\202\254\353\236\214&120585&.js" | 6 + ...44\353\266\200\355\230\270-(1)&120838&.js" | 16 + ...5\214-\354\240\234\352\261\260&120849&.js" | 6 + ...65\254\355\225\230\352\270\260&120805&.js" | 6 + ...40\245\355\225\230\352\270\260&120825&.js" | 6 + ...02\260\355\225\230\352\270\260&120902&.js" | 6 + ...22\244\354\247\221\352\270\260&120822&.js" | 6 + ...7\264-\353\260\200\352\270\260&120921&.js" | 12 + ...54\355\225\230\352\270\260-(1)&120850&.js" | 9 + ...54\355\225\230\352\270\260-(2)&120911&.js" | 9 + ...54\270\354\236\220\354\227\264&120908&.js" | 6 + ...47\214\353\223\244\352\270\260&120809&.js" | 6 + ...22\244\354\247\221\352\270\260&120821&.js" | 6 + ...5\230-\352\270\270\354\235\264&120854&.js" | 6 + ...36\220\353\245\264\352\270\260&120833&.js" | 6 + ...13\234\355\202\244\352\270\260&120844&.js" | 8 + ...34\240\354\202\254\353\217\204&120903&.js" | 6 + ...17\211\352\267\240\352\260\222&120817&.js" | 6 + ...5\230-\353\215\247\354\205\210&120808&.js" | 10 + ...61\354\241\260\352\261\264-(1)&120889&.js" | 7 + ...61\354\241\260\352\261\264-(2)&120868&.js" | 14 + ...7\240-\354\246\235\354\213\235&120910&.js" | 6 + ...10\230\353\266\204\355\225\264&120852&.js" | 29 + ...5\230-\352\260\234\354\210\230&120836&.js" | 11 + ...0-\353\215\247\354\205\210-(1)&120851&.js" | 6 + ...0-\353\215\247\354\205\210-(2)&120864&.js" | 7 + ...65\220\355\225\230\352\270\260&120807&.js" | 6 + ...6\220-\354\260\276\352\270\260&120904&.js" | 7 + ...46\254\354\271\264\353\205\270&120819&.js" | 6 + ...40\204\354\247\200\353\214\200&120866&.js" | 30 + ...0\270-\355\225\264\353\217\205&120892&.js" | 6 + ...65\254\355\225\230\352\270\260&120897&.js" | 11 + ...26\221\352\274\254\354\271\230&120830&.js" | 6 + ...0\230\354\235\230-\355\225\251&120923&.js" | 8 + ...13\253\354\226\264\354\232\224&120894&.js" | 8 + ...5\270-\353\260\233\352\270\260&120818&.js" | 9 + ...30\271\354\225\214\354\235\264&120956&.js" | 15 + ...6\264-\354\202\254\354\240\204&120869&.js" | 7 + ...5\230-\353\202\230\354\235\264&120834&.js" | 6 + ...63\204\355\225\230\352\270\260&120878&.js" | 26 + ...15\224\355\225\230\352\270\260&120885&.js" | 6 + ...60\224\352\276\270\352\270\260&120895&.js" | 10 + ...15\224\355\225\230\352\270\260&120906&.js" | 6 + ...36\245\355\225\230\352\270\260&120913&.js" | 8 + ...230-\354\210\253\354\236\220-3&120871&.js" | 14 + ...65\254\355\225\230\352\270\260&120841&.js" | 8 + ...63\204\355\225\230\352\270\260&120909&.js" | 6 + ...36\220\353\245\264\352\270\260&120922&.js" | 6 + ...5\230-\352\260\234\354\210\230&120845&.js" | 6 + ...6\220-\354\240\234\352\261\260&120888&.js" | 6 + ...6\220-\352\260\234\354\210\230&120583&.js" | 6 + ...65\254\355\225\230\352\270\260&120811&.js" | 6 + ...40\245\355\225\230\352\270\260&120823&.js" | 16 + ...65\254\355\225\230\352\270\260&120860&.js" | 10 + ...40\225\355\225\230\352\270\260&120835&.js" | 7 + ...0\230-\352\260\234\354\210\230&120824&.js" | 7 + ...13\253\354\226\264\354\232\224&120813&.js" | 10 + ...0\230\354\235\230-\355\225\251&120831&.js" | 10 + ...214\353\223\244\352\270\260(1)&120847&.js" | 7 + ...14\353\223\244\352\270\260-(2)&120862&.js" | 7 + ...65\254\355\225\230\352\270\260&120812&.js" | 9 + ...2\250-\354\277\240\355\217\260&120884&.js" | 11 + ...5\230-\354\242\214\355\221\234&120861&.js" | 43 + ...1\244-\354\240\234\355\212\270&120853&.js" | 8 + ...5\234-\354\240\225\353\240\254&120880&.js" | 10 + ...61\260\355\225\230\352\270\260&120826&.js" | 6 + ...06\240\353\246\254\354\226\274&120848&.js" | 9 + .../\355\216\270\354\247\200&120898&.js" | 6 + .../\355\217\211\355\226\211&120875&.js" | 15 + ...0-\353\250\271\352\270\260-(1)&120814&.js" | 6 + ...0-\353\250\271\352\270\260-(2)&120815&.js" | 12 + ...0-\353\250\271\352\270\260-(3)&120816&.js" | 6 + ...5\234-\353\254\270\354\236\220&120896&.js" | 10 + ...0\230-\354\260\276\352\270\260&120846&.js" | 19 + .../level-1/2016\353\205\204&12901&.js" | 65 + ...222\244\354\247\221\352\270\260&68935&.js" | 37 + ...262\210\354\247\270\354\210\230&42748&.js" | 60 + ...12\270-\352\262\214\354\236\204&17682&.js" | 60 + ...260\200\354\247\200\353\217\204&17681&.js" | 62 + ...35\230-\354\210\253\354\236\220&12954&.js" | 41 + ...240\270\354\230\244\352\270\260&12903&.js" | 50 + ...12\224-\354\213\253\354\226\264&12906&.js" | 43 + ...36\220-\353\260\260\354\227\264&12910&.js" | 35 + ...10\230-\354\260\276\352\270\260&87389&.js" | 36 + .../\353\202\264\354\240\201&70128&.js" | 41 + ...215\224\355\225\230\352\270\260&68644&.js" | 26 + ...35\264\354\235\230-\355\225\251&12912&.js" | 47 + ...40\200-\354\210\234\354\234\204&77484&.js" | 151 + ...235\230\352\263\240\354\202\254&42840&.js" | 135 + ...35\230-\352\260\234\354\210\230&12916&.js" | 36 + ...240\254\355\225\230\352\270\260&12915&.js" | 35 + ...271\230\355\225\230\352\270\260&12917&.js" | 39 + ...70\260-\352\270\260\353\263\270&12918&.js" | 54 + ...260\224\352\276\270\352\270\260&12925&.js" | 22 + ...202\260\355\225\230\352\270\260&82612&.js" | 57 + ...60\251-\354\260\276\352\270\260&12919&.js" | 25 + ...02\254\355\225\230\352\270\260&118666&.js" | 72 + ...247\214\353\223\244\352\270\260&12977&.js" | 85 + ...10\230-\354\260\276\352\270\260&42839&.js" | 100 + ...30\353\260\225\354\210\230?&12922&.js" | 39 + ...230\201\353\213\250\354\226\264&81301&.js" | 102 + ...6\220-\354\247\235\352\277\215&131128&.js" | 30 + ...40\200-\354\225\224\355\230\270&12926&.js" | 88 + ...63\274-\353\260\233\352\270\260&92334&.js" | 167 + ...24\224-\354\266\224\354\262\234&72410&.js" | 123 + ...213\244\355\214\250\354\234\250&42889&.js" | 79 + ...31\200-\353\215\247\354\205\210&77884&.js" | 60 + ...10\230\354\235\230-\355\225\251&12928&.js" | 69 + ...215\224\355\225\230\352\270\260&86051&.js" | 59 + .../\354\230\210\354\202\260&12982&.js" | 48 + ...25\234-\354\204\240\354\210\230&42576&.js" | 83 + ...215\224\355\225\230\352\270\260&76501&.js" | 69 + ...247\214\353\223\244\352\270\260&12930&.js" | 87 + ...215\224\355\225\230\352\270\260&12931&.js" | 39 + ...247\214\353\223\244\352\270\260&12932&.js" | 66 + ...271\230\355\225\230\352\270\260&12933&.js" | 28 + ...67\274-\355\214\220\353\263\204&12934&.js" | 39 + ...261\260\355\225\230\352\270\260&12935&.js" | 68 + ...263\204\354\260\215\352\270\260&12969&.js" | 54 + ...31\200-\355\231\200\354\210\230&12937&.js" | 29 + ...262\264\354\234\241\353\263\265&42862&.js" | 127 + ...263\265\353\260\260\354\210\230&12940&.js" | 33 + ...202\254\352\260\201\355\230\225&86491&.js" | 32 + ...70\240-\354\266\224\354\270\241&12943&.js" | 75 + ...70\260-\352\262\214\354\236\204&64061&.js" | 84 + ...210\204\353\245\264\352\270\260&67256&.js" | 39 + ...265\254\355\225\230\352\270\260&12944&.js" | 32 + ...\217\260\354\274\223\353\252\254&1845&.js" | 59 + ...03\244\353\223\234-\354\210\230&12947&.js" | 50 + ...260\200\353\246\254\352\270\260&12948&.js" | 22 + ...35\230-\353\215\247\354\205\210&12950&.js" | 50 + ...35\230-\354\210\253\354\236\220&12899&.js" | 62 + ...203\200\354\235\274\353\247\201&12900&.js" | 3 + ...45\270-\353\271\204\355\212\270&77885&.js" | 17 + ...203\200\354\235\274\353\247\201&12902&.js" | 18 + build/oldSols/level-2/H-Index&42747&.js | 37 + ...247\214\353\223\244\352\270\260&12951&.js" | 48 + .../level-2/N-Queen&12952&.js} | 3 + ...263\265\353\260\260\354\210\230&12953&.js" | 21 + ...212\244\355\204\260\353\247\201&17677&.js" | 78 + ...0\250]-\354\272\220\354\213\234&17680&.js" | 58 + ...46\2104\353\270\224\353\241\235&17679&.js" | 47 + ...10\230-\352\262\214\354\236\204&17687&.js" | 16 + ...270\210\352\267\270\352\263\241&17683&.js" | 42 + ...0\250]-\354\225\225\354\266\225&17684&.js" | 55 + ...52\205-\354\240\225\353\240\254&17686&.js" | 14 + ...265\254\355\225\230\352\270\260&92335&.js" | 23 + ...236\220\353\245\264\352\270\260&87390&.js" | 13 + ...6\245-\355\201\260-\354\210\230&42746&.js" | 53 + ...30\225-\354\260\276\352\270\260&12905&.js" | 12 + ...235\270\355\225\230\352\270\260&81302&.js" | 21 + ...\213\250\352\261\260\353\246\254&1844&.js" | 40 + ...30\270-\353\263\200\355\231\230&60058&.js" | 64 + ...240\204\355\225\230\352\270\260&76502&.js" | 38 + ...247\214\353\223\244\352\270\260&87377&.js" | 43 + ...252\205\353\263\264\355\212\270&42885&.js" | 66 + ...212\245\352\260\234\353\260\234&42586&.js" | 153 + ...12\224-\355\212\270\353\237\255&42583&.js" | 55 + ...01\260-\354\210\253\354\236\220&12911&.js" | 50 + ...47\214\353\223\244\352\270\260&118667&.js" | 31 + ...224\260\353\250\271\352\270\260&12913&.js" | 29 + ...46\254-\353\233\260\352\270\260&12914&.js" | 12 + ...202\254\352\260\201\355\230\225&62048&.js" | 65 + ...246\254\353\211\264\354\226\274&72411&.js" | 35 + ...235\214\354\202\254\354\240\204&84512&.js" | 30 + ...27\264-\354\225\225\354\266\225&60057&.js" | 71 + ...54\270-\352\270\270\354\235\264&49994&.js" | 37 + .../\353\260\260\353\213\254&12978&.js" | 190 ++ ...202\254\354\235\264\355\201\264&86052&.js" | 76 + ...213\254\355\214\275\354\235\264&68645&.js" | 40 + ...265\234\353\214\200\355\231\224&67257&.js" | 33 + ...34\204-\352\262\200\354\203\211&72412&.js" | 51 + ...36\220-\353\270\224\353\241\235&12923&.js" | 32 + ...35\230-\355\221\234\355\230\204&12924&.js" | 52 + ...202\254\355\212\270\353\246\254&49993&.js" | 16 + ...266\201\353\214\200\355\232\214&92342&.js" | 72 + ...247\220\354\236\207\352\270\260&12981&.js" | 13 + ...214\200\354\247\204\355\221\234&12985&.js" | 42 + ...261\204\355\214\205\353\260\251&42888&.js" | 83 + ...45\270-\352\264\204\355\230\270&12909&.js" | 12 + .../\354\234\204\354\236\245&42578&.js" | 89 + ...263\265\355\225\230\352\270\260&70129&.js" | 32 + ...202\230\353\210\204\352\270\260&86971&.js" | 29 + ...60\204-\354\235\264\353\217\231&12980&.js" | 25 + ...235\264\354\212\244\355\213\261&42860&.js" | 25 + ...70\210-\352\263\204\354\202\260&92341&.js" | 65 + ...12\224-\353\260\251\353\262\225&12936&.js" | 39 + ...261\260\355\225\230\352\270\260&12973&.js" | 47 + ...265\234\354\206\237\352\260\222&12939&.js" | 40 + ...247\214\353\223\244\352\270\260&12941&.js" | 30 + .../\354\271\264\355\216\253&42842&.js" | 41 + ...10\230-\354\204\270\352\270\260&68936&.js" | 25 + ...247\214\353\223\244\352\270\260&42883&.js" | 36 + ...62\237-\353\204\230\353\262\204&43165&.js" | 46 + .../\355\212\234\355\224\214&64065&.js" | 33 + ...224\204\353\246\260\355\204\260&42587&.js" | 136 + ...224\274\353\241\234\353\217\204&87946&.js" | 28 + ...02\230\354\271\230-\354\210\230&12945&.js" | 30 + ...35\264\354\235\230-\355\203\221&12946&.js" | 28 + ...240\204\355\225\230\352\270\260&77485&.js" | 27 + ...35\230-\352\263\261\354\205\210&12949&.js" | 33 + ...233\204\353\263\264\355\202\244&42890&.js" | 50 + ...50\274-\353\205\270\353\223\234&49189&.js" | 23 + ...212\270\354\233\214\355\201\254&43162&.js" | 30 + ...271\264\353\251\224\353\235\274&42884&.js" | 34 + ...212\270\354\225\250\353\262\224&42579&.js" | 48 + ...226\211\352\262\275\353\241\234&43164&.js" | 24 + ...210\234\354\234\204\355\201\220&42628&.js" | 34 + ...265\255\354\213\254\354\202\254&43238&.js" | 19 + ...02\254-\352\262\200\354\203\211&60060&.js" | 73 + ...26\264-\355\215\274\354\246\220&12983&.js" | 31 + ...235\274\354\235\264\353\270\214&42891&.js" | 30 + ...35\230-\352\260\257\354\210\230&12929&.js" | 7 + build/run.js | 11 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- ...4 \354\225\204\354\235\264\353\224\224.js" | 3 - .../level-1/2016\353\205\204/chaerin-dev.js" | 3 +- .../2016\353\205\204/codeisneverodd.js" | 8 + .../2016\353\205\204/prove-ability.js" | 2 +- .../level-1/2016\353\205\204/yongchanson.js" | 3 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 4 +- .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 6 + .../createhb21.js" | 4 +- .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../codeisneverodd.js" | 23 + .../jaewon1676.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 5 + .../jaewon1676.js" | 2 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 +- .../prove-ability.js" | 2 +- .../codeisneverodd.js" | 12 +- .../dev.js" | 7 + .../prove-ailbity.js" | 2 +- .../codeisneverodd.js" | 8 + .../jaewon1676.js" | 4 +- .../prove-ability.js" | 3 +- .../\353\202\264\354\240\201/chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 3 + .../\353\202\264\354\240\201/jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../\353\202\264\354\240\201/yongchanson.js" | 3 +- .../codeisneverodd.js" | 9 + .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 7 + .../jaewon1676.js" | 2 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 3 +- .../codeisneverodd.js" | 25 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 5 + .../prove-ability.js" | 0 .../yongchanson.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 8 + .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 4 +- .../codeisneverodd.js" | 10 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../prove-ability.js" | 3 +- .../soulhn.js" | 2 +- .../yongchanson.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../jaewon1676.js" | 2 +- .../prove-ability.js" | 4 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 5 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../jaewon1676.js" | 0 .../prove-ability.js" | 3 +- .../codeisneverodd.js" | 3 +- .../codisneverodd.js" | 2 +- .../ssi02014.js" | 3 +- .../chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 21 + .../jaewon1676.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 36 + .../jaewon1676.js" | 2 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 7 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../yongchanson.js" | 2 +- .../ssi02014.js" | 1 - .../chaerin-dev.js" | 4 +- .../codeisneverodd.js" | 14 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 26 + .../codeisneverodd.js" | 29 +- .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 18 +- .../codeisneverodd.js" | 15 + .../jaewon1676.js" | 3 +- .../codeisneverodd.js" | 27 - .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../prove-bility.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 7 + .../jaewon1676.js" | 4 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 3 +- .../chaerin-dev.js" | 0 .../codeisneverodd.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 3 +- .../codeisneverodd.js" | 10 + .../\354\230\210\354\202\260/jaewon1676.js" | 2 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 8 + .../hyosung.js" | 2 +- .../jaewon1676.js" | 2 +- .../chaerin-dev.js" | 0 .../codeisneverod.js" | 3 +- .../codeisneverodd.js" | 6 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 15 + .../jaewon1676.js" | 4 +- .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 7 + .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 7 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 9 + .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 5 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../codeisneverodd.js" | 24 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 9 + .../yongchanson.js" | 2 +- .../codeisneverodd.js" | 9 + .../prove-ability.js" | 12 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 9 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../chaerin-dev.js" | 0 .../codeisneverodd.js" | 22 + .../jaewon1676.js" | 3 +- .../chaerin-dev.js" | 61 + .../codeisneverodd.js" | 37 + .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 5 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 3 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 8 + .../jaewon1676.js" | 3 +- .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 + .../prove-ability.js" | 2 +- .../chaerin-dev.js" | 3 +- .../codeisneverodd.js" | 3 +- .../yongchanson.js" | 2 +- ...4 \354\225\204\354\235\264\353\224\224.js" | 3 - .../RyanDeclan.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../jaewon1676.js" | 0 .../le2sky.js" | 2 +- .../codeisneverodd.js" | 2 +- .../{H-Index => H Index}/codeisneverodd.js | 3 +- .../{H-Index => H Index}/jaewon1676.js | 0 .../RyanDeclan.js" | 3 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../yongchanson.js" | 3 +- .../{N-Queen => N Queen}/codeisneverodd.js | 0 .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 0 .../minjongbaek.js" | 0 .../codeisneverodd.js" | 3 +- .../ssi02014.js" | 2 +- .../codeisneverodd.js" | 0 .../minjongbaek.js" | 0 .../jaewon1676.js" | 0 .../codeisneverodd.js" | 4 +- .../createhb21.js" | 3 +- .../prove-ability.js" | 2 +- .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 0 .../prove-ability.js" | 0 .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 2 +- .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../RyanDeclan.js" | 2 +- .../chaerin-dev.js" | 3 +- ...1\353\217\204 \352\260\220\354\206\214.js" | 3 +- .../codeisneverodd.js" | 3 +- .../createhb21.js" | 3 +- .../jaewon1676.js" | 3 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 0 .../codeisneverodd.js" | 3 +- .../dia.js" | 4 + .../prove-ability.js" | 8 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../jaewon1676.js" | 3 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../yongchanson.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 2 +- .../chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 3 +- .../codeisneverodd.js" | 2 +- .../\353\260\260\353\213\254/pereng11.js" | 3 +- .../minjongbaek.js" | 3 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 2 +- .../codeisneverodd.js" | 32 - .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 2 +- .../iHoHyeon.js" | 2 +- .../codeisneverodd.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 4 +- .../le2sky.js" | 3 +- .../chaerin-dev.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../codeisneverodd.js" | 9 + .../codeisneverodd.js" | 2 +- .../\354\234\204\354\236\245/hyosung.js" | 3 +- .../\354\234\204\354\236\245/jaewon1676.js" | 3 +- .../RyanDeclan.js" | 2 +- .../codeisneverodd.js" | 3 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 3 +- .../yongchanson.js" | 2 +- .../ljw0096.js" | 3 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 1 - .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../codeisneverodd.js" | 3 +- .../prove-ability.js" | 3 +- .../yongchanson.js" | 2 +- .../codeisneverodd.js" | 3 +- .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 3 +- .../codeisneverodd.js" | 2 +- .../ssi02014.js" | 3 +- .../codeisneverodd.js" | 3 +- .../codeisneverodd.js" | 2 +- .../createhb21.js" | 3 +- .../jaewon1676.js" | 3 +- .../pereng11.js" | 5 +- .../codeisneverodd.js" | 3 +- .../jaewon1676.js" | 0 .../codeisneverodd.js" | 2 +- .../codeisneverodd.js" | 0 .../codeisneverodd.js" | 3 +- .../prove-ability.js" | 0 .../codeisneverodd.js" | 2 +- ...4 \354\225\204\354\235\264\353\224\224.js" | 3 - .../codeisneverodd.js" | 0 .../jaewon1676.js" | 2 +- .../codeisneverodd.js" | 2 +- ...4 \354\225\204\354\235\264\353\224\224.js" | 3 - .../ryong9rrr.js" | 0 .../codeisneverodd.js" | 2 +- .../ryong9rrr.js" | 0 .../cg10036.js" | 2 +- ...4 \354\225\204\354\235\264\353\224\224.js" | 3 - build/utils/db.js | 12 +- build/utils/file.js | 7 + build/utils/oldSols.js | 33 + build/utils/solutions.js | 1 + package-lock.json | 20 + package.json | 1 + run.ts | 11 +- utils/db.ts | 24 +- utils/file.ts | 8 + utils/oldSols.ts | 41 + 689 files changed, 10431 insertions(+), 2141 deletions(-) rename build/{results => db}/db.json (80%) create mode 100644 "build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" create mode 100644 "build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" create mode 100644 "build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" create mode 100644 "build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" create mode 100644 "build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" create mode 100644 "build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" create mode 100644 "build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" create mode 100644 "build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" create mode 100644 "build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" create mode 100644 "build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" create mode 100644 "build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" create mode 100644 "build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" create mode 100644 "build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" create mode 100644 "build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" create mode 100644 "build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" create mode 100644 "build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" create mode 100644 "build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" create mode 100644 "build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" create mode 100644 "build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" create mode 100644 "build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" create mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" create mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" create mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" create mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" create mode 100644 "build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" create mode 100644 "build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" create mode 100644 "build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" create mode 100644 "build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" create mode 100644 "build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" create mode 100644 "build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" create mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" create mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" create mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" create mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" create mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" create mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" create mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" create mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" create mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" create mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" create mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" create mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" create mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" create mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" create mode 100644 "build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" create mode 100644 "build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" create mode 100644 "build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" create mode 100644 "build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" create mode 100644 "build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" create mode 100644 "build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" create mode 100644 "build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" create mode 100644 "build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" create mode 100644 "build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" create mode 100644 "build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" create mode 100644 "build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" create mode 100644 "build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" create mode 100644 "build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" create mode 100644 "build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" create mode 100644 "build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" create mode 100644 "build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" create mode 100644 "build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" create mode 100644 "build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" create mode 100644 "build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" create mode 100644 "build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" create mode 100644 "build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" create mode 100644 "build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" create mode 100644 "build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" create mode 100644 "build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" create mode 100644 "build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" create mode 100644 "build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" create mode 100644 "build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" create mode 100644 "build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" create mode 100644 "build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" create mode 100644 "build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" create mode 100644 "build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" create mode 100644 "build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" create mode 100644 "build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" create mode 100644 "build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" create mode 100644 "build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" create mode 100644 "build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" create mode 100644 "build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" create mode 100644 "build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" create mode 100644 "build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" create mode 100644 "build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" create mode 100644 "build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" create mode 100644 "build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" create mode 100644 "build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" create mode 100644 "build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" create mode 100644 "build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" create mode 100644 "build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" create mode 100644 "build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" create mode 100644 "build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" create mode 100644 "build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" create mode 100644 "build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" create mode 100644 "build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" create mode 100644 "build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" create mode 100644 "build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" create mode 100644 "build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" create mode 100644 "build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" create mode 100644 "build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" create mode 100644 "build/oldSols/level-1/2016\353\205\204&12901&.js" create mode 100644 "build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" create mode 100644 "build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" create mode 100644 "build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" create mode 100644 "build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" create mode 100644 "build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" create mode 100644 "build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" create mode 100644 "build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" create mode 100644 "build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" create mode 100644 "build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" create mode 100644 "build/oldSols/level-1/\353\202\264\354\240\201&70128&.js" create mode 100644 "build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" create mode 100644 "build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" create mode 100644 "build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" create mode 100644 "build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" create mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" create mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" create mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" create mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" create mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" create mode 100644 "build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" create mode 100644 "build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" create mode 100644 "build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" create mode 100644 "build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" create mode 100644 "build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" create mode 100644 "build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" create mode 100644 "build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" create mode 100644 "build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" create mode 100644 "build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" create mode 100644 "build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" create mode 100644 "build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" create mode 100644 "build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" create mode 100644 "build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" create mode 100644 "build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" create mode 100644 "build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" create mode 100644 "build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" create mode 100644 "build/oldSols/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230&42576&.js" create mode 100644 "build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" create mode 100644 "build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" create mode 100644 "build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" create mode 100644 "build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" create mode 100644 "build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" create mode 100644 "build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" create mode 100644 "build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" create mode 100644 "build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" create mode 100644 "build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" create mode 100644 "build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" create mode 100644 "build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" create mode 100644 "build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" create mode 100644 "build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" create mode 100644 "build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" rename "build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" => "build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" (76%) create mode 100644 "build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" create mode 100644 "build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" create mode 100644 "build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" create mode 100644 "build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" create mode 100644 "build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" create mode 100644 "build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" rename "build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" => "build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" (79%) create mode 100644 "build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" create mode 100644 "build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" create mode 100644 build/oldSols/level-2/H-Index&42747&.js create mode 100644 "build/oldSols/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260&12951&.js" rename build/{solutions/level-3/N-Queen/codeisneverodd.js => oldSols/level-2/N-Queen&12952&.js} (93%) create mode 100644 "build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" create mode 100644 "build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" create mode 100644 "build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" create mode 100644 "build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" create mode 100644 "build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" create mode 100644 "build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" create mode 100644 "build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" create mode 100644 "build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" create mode 100644 "build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" create mode 100644 "build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" create mode 100644 "build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" create mode 100644 "build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" create mode 100644 "build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" create mode 100644 "build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" create mode 100644 "build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" create mode 100644 "build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" create mode 100644 "build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" create mode 100644 "build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" create mode 100644 "build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" create mode 100644 "build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" create mode 100644 "build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" create mode 100644 "build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" create mode 100644 "build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" create mode 100644 "build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" create mode 100644 "build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" create mode 100644 "build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" create mode 100644 "build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" create mode 100644 "build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" create mode 100644 "build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" create mode 100644 "build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" create mode 100644 "build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" create mode 100644 "build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" create mode 100644 "build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" create mode 100644 "build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" create mode 100644 "build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" create mode 100644 "build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" create mode 100644 "build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" create mode 100644 "build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" create mode 100644 "build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" create mode 100644 "build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" create mode 100644 "build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" create mode 100644 "build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" create mode 100644 "build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" create mode 100644 "build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" create mode 100644 "build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" create mode 100644 "build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" create mode 100644 "build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" create mode 100644 "build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" create mode 100644 "build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" create mode 100644 "build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" create mode 100644 "build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" create mode 100644 "build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" create mode 100644 "build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" create mode 100644 "build/oldSols/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260&68936&.js" create mode 100644 "build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" create mode 100644 "build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" create mode 100644 "build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" create mode 100644 "build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" create mode 100644 "build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" create mode 100644 "build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" create mode 100644 "build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" create mode 100644 "build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" create mode 100644 "build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" create mode 100644 "build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" create mode 100644 "build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" create mode 100644 "build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" create mode 100644 "build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" create mode 100644 "build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" create mode 100644 "build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" create mode 100644 "build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" create mode 100644 "build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" create mode 100644 "build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" create mode 100644 "build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" create mode 100644 "build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" create mode 100644 "build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" rename "build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" => "build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" (97%) rename "build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" => "build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" (98%) rename "build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" => "build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" => "build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" (98%) rename "build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" => "build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" (98%) rename "build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" => "build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" (98%) rename "build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" => "build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" (99%) rename "build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" => "build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" (99%) rename "build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" (96%) rename "build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" => "build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" (96%) rename "build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" => "build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" (99%) rename "build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220/codeisneverodd.js" => "build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200 \354\206\214\353\254\270\354\236\220/codeisneverodd.js" (100%) rename "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" => "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" (96%) rename "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" => "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" => "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" (96%) rename "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" => "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" (100%) rename "build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" => "build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" (98%) rename "build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" => "build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" => "build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" (99%) rename "build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" => "build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" (96%) rename "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" (98%) rename "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" (98%) rename "build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" => "build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (96%) rename "build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" (96%) rename "build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" => "build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" => "build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" => "build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" (97%) rename "build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" => "build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" => "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" => "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" (96%) rename "build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" => "build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" (95%) rename "build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" => "build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" => "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" => "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" => "build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" => "build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" => "build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" => "build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" => "build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264/codeisneverodd.js" => "build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230 \353\202\230\354\235\264/codeisneverodd.js" (100%) rename "build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" => "build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" (95%) rename "build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" => "build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" => "build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" => "build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" => "build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" => "build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" => "build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" => "build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" => "build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" (98%) rename "build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" => "build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" => "build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" (99%) rename "build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" => "build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" (98%) rename "build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" => "build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" (99%) rename "build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" => "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" (96%) rename "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" => "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" (98%) rename "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" => "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" (97%) rename "build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" => "build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" (99%) rename "build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" => "build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" (99%) delete mode 100644 "build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" create mode 100644 "build/solutions/level-1/2016\353\205\204/codeisneverodd.js" rename "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" => "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" => "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" (96%) rename "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" => "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" (97%) create mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" create mode 100644 "build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" rename "build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" => "build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" (99%) rename "build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" => "build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" (99%) rename "build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" => "build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" (97%) rename "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" => "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" rename "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" => "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" (98%) rename "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" => "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" (99%) rename "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" (97%) create mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" => "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" (99%) rename "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" => "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" (99%) rename "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" => "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" (98%) rename "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" => "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" (99%) rename "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" => "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" (98%) rename "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" => "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" (99%) rename "build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" => "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" (52%) create mode 100644 "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" rename "build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" => "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" (98%) create mode 100644 "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" => "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" (96%) rename "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/prove-ability.js" => "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/prove-ability.js" (98%) create mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" create mode 100644 "build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" (99%) rename "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" => "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" (97%) create mode 100644 "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" rename "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" => "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" (99%) rename "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" => "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" (98%) rename "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" => "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" (99%) rename "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" => "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" (99%) rename "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" => "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" (99%) rename "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" => "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" (99%) rename "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" => "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" (99%) create mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" (85%) create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/prove-ability.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/prove-ability.js" (100%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" (97%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" (99%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" (95%) create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" (95%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" (95%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" (99%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" (99%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" (98%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" (93%) create mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" (95%) rename "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" => "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" (92%) rename "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" => "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" (98%) rename "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" (98%) rename "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" => "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" (98%) rename "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" (96%) create mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/jaewon1676.js" (100%) rename "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" (97%) rename "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" => "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" (99%) rename "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" => "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" (99%) rename "build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" (94%) rename "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" (99%) rename "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" (99%) rename "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" => "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" rename "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" => "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" (98%) rename "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" => "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" (97%) rename "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" => "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" (97%) rename "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" => "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" (99%) rename "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" => "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" (99%) rename "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" => "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" (99%) rename "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" => "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" (99%) rename "build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" => "build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" (99%) rename "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" => "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" rename "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" => "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" (99%) rename "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" => "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" (99%) create mode 100644 "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" rename "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" (50%) rename "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" (99%) rename "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" (99%) rename "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" => "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" (70%) create mode 100644 "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" rename "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" => "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" (99%) delete mode 100644 "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" rename "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" => "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" (99%) rename "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" => "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" (98%) rename "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" => "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" (99%) rename "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" => "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" rename "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" => "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" (93%) rename "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" => "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" (97%) rename "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" => "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" (99%) rename "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" (100%) rename "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" (97%) rename "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" => "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" (99%) create mode 100644 "build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" rename "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" => "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" rename "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" => "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" (96%) rename "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" => "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" (92%) rename "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" (100%) rename "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" => "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" (98%) create mode 100644 "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" (98%) rename "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" (98%) rename "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" (99%) rename "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" (99%) rename "build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" (97%) create mode 100644 "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" (98%) rename "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" (97%) rename "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" (98%) rename "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" => "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" (99%) rename "build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" (97%) rename "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" => "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" rename "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" => "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" (97%) rename "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" => "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" (98%) rename "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" => "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" (98%) rename "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" => "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" (95%) rename "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" (99%) rename "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" (99%) rename "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" => "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" (98%) rename "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" => "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" (99%) rename "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" => "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" (95%) create mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" rename "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" => "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" (98%) rename "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" => "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" (95%) rename "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" => "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" (96%) create mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" rename "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" => "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" rename "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" => "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" (98%) create mode 100644 "build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" rename "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" => "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" rename "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" => "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" (99%) rename "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" => "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" (99%) rename "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" => "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" (98%) rename "build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/chaerin-dev.js" => "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/chaerin-dev.js" (100%) create mode 100644 "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" rename "build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" => "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" (96%) create mode 100644 "build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" create mode 100644 "build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" => "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" (97%) rename "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" => "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" (98%) create mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" rename "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" => "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" (99%) create mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" rename "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" => "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" (99%) rename "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" => "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" (99%) rename "build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" => "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" (98%) create mode 100644 "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" rename "build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" => "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" (98%) rename "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" => "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" (98%) rename "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" => "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" (99%) rename "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" => "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" (99%) delete mode 100644 "build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" rename "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" => "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" (99%) rename "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" => "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" (99%) rename "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" => "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" (98%) rename "build/solutions/level-2/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" => "build/solutions/level-2/2 x n \355\203\200\354\235\274\353\247\201/jaewon1676.js" (100%) rename "build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" => "build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" (99%) rename "build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" => "build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" (99%) rename build/solutions/level-2/{H-Index => H Index}/codeisneverodd.js (98%) rename build/solutions/level-2/{H-Index => H Index}/jaewon1676.js (100%) rename "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/RyanDeclan.js" => "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/RyanDeclan.js" (92%) rename "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" => "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" (92%) rename "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" => "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" (98%) rename build/solutions/level-2/{N-Queen => N Queen}/codeisneverodd.js (100%) rename "build/solutions/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" => "build/solutions/level-2/N\352\260\234\354\235\230 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" (100%) rename "build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" => "build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" (99%) rename "build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" => "build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" (99%) rename "build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" => "build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" (99%) rename "build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" => "build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" (98%) rename "build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" => "build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" (99%) rename "build/solutions/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204/codeisneverodd.js" => "build/solutions/level-2/[3\354\260\250] n\354\247\204\354\210\230 \352\262\214\354\236\204/codeisneverodd.js" (100%) rename "build/solutions/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" => "build/solutions/level-2/[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" (100%) rename "build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" => "build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" (99%) rename "build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" => "build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" (99%) rename "build/solutions/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254/codeisneverodd.js" => "build/solutions/level-2/[3\354\260\250] \355\214\214\354\235\274\353\252\205 \354\240\225\353\240\254/codeisneverodd.js" (100%) rename "build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260/minjongbaek.js" => "build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234 \354\206\214\354\210\230 \352\260\234\354\210\230 \352\265\254\355\225\230\352\270\260/minjongbaek.js" (100%) rename "build/solutions/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/jaewon1676.js" => "build/solutions/level-2/n^2 \353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/jaewon1676.js" (100%) rename "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" => "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" (98%) rename "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" => "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" (98%) rename "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" => "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" (98%) rename "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/codeisneverodd.js" (100%) rename "build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260 \355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" (100%) rename "build/solutions/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" => "build/solutions/level-2/\352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" (100%) rename "build/solutions/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230/codeisneverodd.js" => "build/solutions/level-2/\352\264\204\355\230\270 \353\263\200\355\231\230/codeisneverodd.js" (100%) rename "build/solutions/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\352\264\204\355\230\270 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" (100%) rename "build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" => "build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" (99%) rename "build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/jaewon1676.js" => "build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/jaewon1676.js" (100%) rename "build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" => "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" (99%) create mode 100644 "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" rename "build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" => "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" (51%) rename "build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" (97%) rename "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" => "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" (99%) rename "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" => "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" (99%) rename "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" => "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" (99%) rename "build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" => "build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" (99%) rename "build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" => "build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" (99%) rename "build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" => "build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" (99%) rename "build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" => "build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" (99%) rename "build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" => "build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" (99%) rename "build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" => "build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" (99%) rename "build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" => "build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" (99%) delete mode 100644 "build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" rename "build/solutions/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224/codeisneverodd.js" => "build/solutions/level-2/\354\210\230\354\213\235 \354\265\234\353\214\200\355\231\224/codeisneverodd.js" (100%) rename "build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" => "build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" (98%) rename "build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" => "build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" (99%) rename "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" => "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" (99%) rename "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" => "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" (98%) rename "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" => "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" (99%) rename "build/solutions/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\354\230\201\354\226\264 \353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" (100%) rename "build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" => "build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" (99%) rename "build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" => "build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" (99%) create mode 100644 "build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" rename "build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" => "build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" (99%) rename "build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" => "build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" (98%) rename "build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" => "build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" (98%) rename "build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" => "build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" (99%) rename "build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" => "build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" (99%) rename "build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" => "build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" (99%) rename "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" => "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" (98%) rename "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" => "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" (98%) rename "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" => "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" (97%) rename "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" => "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" (98%) rename "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (98%) rename "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" => "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" (98%) rename "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" => "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" (98%) rename "build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225 \355\233\204 \352\260\234\354\210\230 \354\204\270\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" (99%) rename "build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" => "build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" (98%) rename "build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" => "build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" (99%) rename "build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" => "build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" (99%) rename "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" => "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" (99%) rename "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/jaewon1676.js" => "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/jaewon1676.js" (100%) rename "build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" => "build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" (99%) rename "build/solutions/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" => "build/solutions/level-2/\355\226\211\353\240\254 \355\205\214\353\221\220\353\246\254 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" (100%) rename "build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" => "build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" (99%) rename "build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/prove-ability.js" => "build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/prove-ability.js" (100%) delete mode 100644 "build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" rename "build/solutions/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234/codeisneverodd.js" => "build/solutions/level-3/\352\260\200\354\236\245 \353\250\274 \353\205\270\353\223\234/codeisneverodd.js" (100%) delete mode 100644 "build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" rename "build/solutions/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211/ryong9rrr.js" => "build/solutions/level-4/\352\260\200\354\202\254 \352\262\200\354\203\211/ryong9rrr.js" (100%) rename "build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" => "build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" (97%) rename "build/solutions/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214/ryong9rrr.js" => "build/solutions/level-4/\353\254\264\354\247\200\354\235\230 \353\250\271\353\260\251 \353\235\274\354\235\264\353\270\214/ryong9rrr.js" (100%) rename "build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" => "build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" (98%) delete mode 100644 "build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" create mode 100644 build/utils/oldSols.js create mode 100644 build/utils/solutions.js create mode 100644 utils/oldSols.ts diff --git a/build/results/db.json b/build/db/db.json similarity index 80% rename from build/results/db.json rename to build/db/db.json index 445814b..cbb6f26 100644 --- a/build/results/db.json +++ b/build/db/db.json @@ -120,7 +120,7 @@ { "id": "12917", "title": "문자열 내림차순으로 배치하기", "level": 1 }, { "id": "12918", "title": "문자열 다루기 기본", "level": 1 }, { "id": "12919", "title": "서울에서 김서방 찾기", "level": 1 }, - { "id": "12922", "title": "수박수박수박수박수박수#63;", "level": 1 }, + { "id": "12922", "title": "수박수박수박수박수박수?", "level": 1 }, { "id": "12923", "title": "숫자 블록", "level": 2 }, { "id": "12924", "title": "숫자의 표현", "level": 2 }, { "id": "12925", "title": "문자열을 정수로 바꾸기", "level": 1 }, @@ -181,7 +181,7 @@ { "id": "42746", "title": "가장 큰 수", "level": 2 }, { "id": "42747", "title": "H Index", "level": 2 }, { "id": "42748", "title": "K번째수", "level": 1 }, - { "id": "42839", "title": "소수 찾기", "level": 2 }, + { "id": "42839", "title": "소수 찾기", "level": 1 }, { "id": "42840", "title": "모의고사", "level": 1 }, { "id": "42842", "title": "카펫", "level": 2 }, { "id": "42860", "title": "조이스틱", "level": 2 }, @@ -242,2554 +242,2668 @@ ], "sols": [ { - "id": "MIKUSLr_8dvQwCo3irWtm", - "author": "ssi02014", - "code": "function solution(survey, choices) {\n const points = [3, 2, 1, 0, 1, 2, 3];\n const pointBoard = {\n R: 0,\n T: 0,\n C: 0,\n F: 0,\n J: 0,\n M: 0,\n A: 0,\n N: 0,\n };\n let result = \"\";\n\n // 카테고리 별 점수 추가\n for (let i = 0; i < survey.length; i++) {\n const categories = survey[i];\n\n if (choices[i] < 4) {\n pointBoard[categories[0]] += points[choices[i] - 1];\n } else if (choices[i] > 4) {\n pointBoard[categories[1]] += points[choices[i] - 1];\n }\n }\n\n const pointBoardEntries = Object.entries(pointBoard);\n\n // 지표에 맞게 결과 값 도출\n for (let i = 0; i < pointBoardEntries.length; i += 2) {\n const [curCategory, curValue] = pointBoardEntries[i];\n const [nextCategory, nextValue] = pointBoardEntries[i + 1];\n\n if (curValue < nextValue) {\n result += nextCategory;\n } else {\n result += curCategory;\n }\n }\n\n return result;\n}\n\n", - "probId": "118666" - }, - { - "id": "lKaNNuMhO1Q9g73VNElaE", + "id": "xSm8od1xFwgFefxNzkVqa", "author": "codeisneverodd", - "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {});\n survey.forEach((key, i) => {\n const point = points[choices[i] - 1];\n Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point);\n });\n return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join('');\n}\n\n", - "probId": "118666" - }, - { - "id": "TFIMvbMgOOaok0yVvchlV", - "author": "codisneverodd", - "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = survey.reduce((a, key, i) => {\n if (types.includes(key)) {\n a[key] = (a[key] || 0) + points[choices[i] - 1];\n return a;\n }\n const rKey = key[1] + key[0];\n a[rKey] = (a[rKey] || 0) - points[choices[i] - 1];\n return a;\n }, {});\n return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join('');\n}\n", - "probId": "118666" + "code": "function solution(num_list, n) {\n let result = [];\n for (let i = 0; i < num_list.length / n; i++) {\n result = [...result, num_list.slice(i * n, i * n + n)];\n }\n return result;\n}", + "probId": "120842" }, { - "id": "sEgHL15D-B_hURnHRf8nz", + "id": "K-zJIO4QrSl-S9XOoRs9z", "author": "codeisneverodd", - "code": "function solution(queue1, queue2) {\n const getSum = arr => arr.reduce((a, c) => a + c, 0);\n\n if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1;\n\n const queue = [...queue1, ...queue2, ...queue1, ...queue2];\n const maxCount = queue.length;\n const average = getSum(queue) / 4;\n let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length];\n\n const pop = () => {\n currentSum -= queue[start];\n start += 1;\n count += 1;\n };\n const insert = () => {\n currentSum += queue[end];\n end += 1;\n count += 1;\n };\n\n while (count <= maxCount) {\n if (currentSum < average) insert();\n if (currentSum > average) pop();\n if (currentSum === average) return count;\n }\n return -1;\n}\n", - "probId": "118667" + "code": "function solution(order) {\n return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length;\n}", + "probId": "120891" }, { - "id": "_AR0U5ozQWXYqZ2gsS3Uz", + "id": "z9tZ9PckhK1H-6ocTeWO2", "author": "codeisneverodd", - "code": "function solution(array, n) {\n return array.filter(a => a === n).length;\n}\n", - "probId": "120583" + "code": "function solution(array) {\n return [...array.join('')].filter(a => a === '7').length;\n}", + "probId": "120912" }, { - "id": "rRfCkqYnAz8rn9BaMUI4y", + "id": "NNf6s-HTVaGKm78AOPaVw", "author": "codeisneverodd", - "code": "function solution(array, height) {\n return array.filter(a => a > height).length;\n}\n", - "probId": "120585" + "code": "function solution(before, after) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return sort(before) === sort(after) ? 1 : 0;\n}", + "probId": "120886" }, { - "id": "I0bMOuK7vM42xCtHfqnp8", + "id": "7oXUiFUSQ9uqtT5hYSLIf", "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 + num2\n}", - "probId": "120802" + "code": "function solution(quiz) {\n return quiz.map(q => {\n const [formula, answer] = q.split('=');\n return eval(formula) === +answer ? 'O' : 'X';\n });\n}", + "probId": "120907" }, { - "id": "nPw5LMBQcZ_fGnRQdWuUh", + "id": "BYmirH4q1XECD8bMEo29U", "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 - num2;\n}\n", - "probId": "120803" + "code": "function solution(i, j, k) {\n let count = 0;\n for (let num = i; num <= j; num++) {\n count += [...('' + num)].filter(n => +n === k).length;\n }\n return count;\n}", + "probId": "120887" }, { - "id": "pnCYYkwVWBu3WjDLvCpuq", + "id": "Fd_1vZ2pAt6rpah2QbEsi", "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 * num2;\n}\n", - "probId": "120804" + "code": "function solution(n, numlist) {\n return numlist.filter(num => num % n === 0);\n}", + "probId": "120905" }, { - "id": "EKG2lawqGvED9pATXfLNS", + "id": "tGL_-zp4MOVhXsFcJcMun", "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return Math.floor(num1 / num2);\n}\n", - "probId": "120805" + "code": "function solution(array, n) {\n const minDiff = Math.min(...array.map(a => Math.abs(a - n)));\n return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff);\n}", + "probId": "120890" }, { - "id": "pY3Cqlkl_eOmjxZimcXF5", + "id": "nKQO66zONo7540fHrto5P", "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return Math.floor((num1 / num2) * 1000);\n}\n", - "probId": "120806" + "code": "function solution(rsp) {\n const win = { 0: 5, 2: 0, 5: 2 };\n return [...rsp].map(num => win[num]).join('');\n}", + "probId": "120839" }, { - "id": "EmsAj_2jTgt6gJIWpfShP", + "id": "m6fBW1kYmz63rvE_9J-j7", "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 === num2 ? 1 : -1;\n}\n", - "probId": "120807" + "code": "function solution(array) {\n const max = Math.max(...array);\n return [max, array.indexOf(max)];\n}", + "probId": "120899" }, { - "id": "RPr6DCCG3mO6I084BiAun", + "id": "CqKrSPtMSN3R0qbXB3uaj", "author": "codeisneverodd", - "code": "function solution(denum1, num1, denum2, num2) {\n const denum = denum2 * num1 + denum1 * num2;\n const num = num1 * num2;\n const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b));\n const gcd = getGCD(denum, num);\n return [denum / gcd, num / gcd];\n}\n", - "probId": "120808" + "code": "function solution(angle) {\n if (angle === 180) return 4;\n if (angle > 90) return 3;\n if (angle === 90) return 2;\n return 1;\n}", + "probId": "120829" }, { - "id": "DE1kBGflGJmcjZsx3FJd6", + "id": "O7PoiGypXs92Zf0CtGSFq", "author": "codeisneverodd", - "code": "function solution(numbers) {\n return numbers.map(n => n * 2);\n}\n", - "probId": "120809" + "code": "function solution(hp) {\n const first = Math.floor(hp / 5);\n const second = Math.floor((hp - first * 5) / 3);\n const third = hp - first * 5 - second * 3;\n return first + second + third;\n}", + "probId": "120837" }, { - "id": "QozPu473a-_9A-8589pM-", + "id": "eQLxLoyizYAtnKZ2NvI7K", "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 % num2;\n}\n", - "probId": "120810" + "code": "function solution(lines) {\n const visited = lines.reduce((a, [x, y]) => {\n for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1;\n return a;\n }, {});\n\n return Object.values(visited).filter(v => v > 1).length;\n}", + "probId": "120876" }, { - "id": "3fm2TroEj2CU2jMFq9BnF", + "id": "rKj4MpytQxyf3pHUEsJdP", "author": "codeisneverodd", - "code": "function solution(array) {\n return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];\n}\n", - "probId": "120811" + "code": "function solution(numbers, k) {\n const goNext = current => (current + 2) % numbers.length;\n let current = 0;\n for (let i = 0; i < k - 1; i++) current = goNext(current);\n return numbers[current];\n}", + "probId": "120843" }, { - "id": "BM8LhSXvXu4-aRHH7bR0Y", + "id": "HCLioSAvzxRnHX8mjtUWU", "author": "codeisneverodd", - "code": "function solution(array) {\n const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n const max = Math.max(...Object.values(counts));\n const modes = Object.keys(counts).filter(key => counts[key] === max);\n return modes.length === 1 ? +modes[0] : -1;\n}\n", - "probId": "120812" + "code": "function solution(balls, share) {\n const [n, m] = [balls, share];\n const fact = [BigInt(1), BigInt(1)];\n\n for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i);\n\n return Number(fact[n] / (fact[n - m] * fact[m]));\n}", + "probId": "120840" }, { - "id": "8oX9XPtBcPaRoPpsEWTvS", + "id": "FPUJpgh0XMsggme9iIl50", "author": "codeisneverodd", - "code": "function solution(n) {\n let nums = [];\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 1) nums = [...nums, i];\n }\n return nums;\n}\n", - "probId": "120813" + "code": "function solution(num1, num2) {\n return num1 % num2;\n}", + "probId": "120810" }, { - "id": "eMb5IrM48uRvfVWbFEIiB", + "id": "mk4qvXkinyqMf5XPVCHdj", "author": "codeisneverodd", - "code": "function solution(n) {\n return Math.floor((n - 1) / 7) + 1;\n}\n", - "probId": "120814" + "code": "function solution(age) {\n return 2022 - age + 1;\n}", + "probId": "120820" }, { - "id": "Bc4dj7iLlnacd98nH_sYp", + "id": "18S-4SEbVwFndDpxz2ciT", "author": "codeisneverodd", - "code": "function solution(n) {\n const getLCM = (a, b) => {\n let lcm = 1;\n while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1;\n return lcm;\n };\n\n return getLCM(n, 6) / 6;\n}\n", - "probId": "120815" + "code": "function solution(common) {\n const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0];\n return isAP(common)\n ? common[common.length - 1] + common[1] - common[0]\n : common[common.length - 1] * (common[1] / common[0]);\n}", + "probId": "120924" }, { - "id": "a-CGP0gA0ygo3fpSlsJ1R", + "id": "kVuyEQ3KiqW-p8BTxdFgS", "author": "codeisneverodd", - "code": "function solution(slice, n) {\n return Math.floor((n - 1) / slice) + 1;\n}\n", - "probId": "120816" + "code": "function solution(polynomial) {\n const countX = x => {\n const count = x.replaceAll('x', '');\n return count === '' ? 1 : +count;\n };\n\n const count = polynomial\n .split(' + ')\n .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), {\n x: 0,\n num: 0,\n });\n\n const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : '';\n const num = count.num > 0 ? '' + count.num : '';\n const plus = x !== '' && num !== '' ? ' + ' : '';\n\n return x + plus + num;\n}", + "probId": "120863" }, { - "id": "j-tP2-FI_bQLIYQV9RH9D", + "id": "XsKuARaEONvRaODN2AM0x", "author": "codeisneverodd", - "code": "function solution(numbers) {\n return numbers.reduce((a, c) => a + c, 0) / numbers.length;\n}\n", - "probId": "120817" + "code": "function solution(my_string) {\n return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join('');\n}", + "probId": "120893" }, { - "id": "2srutfxkMPmO5jAuwsZ-V", + "id": "qQWDAJ0NE_d14Se_xpJlf", "author": "codeisneverodd", - "code": "function solution(price) {\n if (price >= 500000) return Math.floor(price * 0.8);\n if (price >= 300000) return Math.floor(price * 0.9);\n if (price >= 100000) return Math.floor(price * 0.95);\n return price;\n}\n", - "probId": "120818" + "code": "function solution(num1, num2) {\n return num1 * num2;\n}", + "probId": "120804" }, { - "id": "PNSHuY1xKT3SGzAEVBAjS", + "id": "8kX9ALQ_W9RpcWuaA8orB", "author": "codeisneverodd", - "code": "function solution(money) {\n return [Math.floor(money / 5500), money % 5500];\n}\n", - "probId": "120819" + "code": "function solution(num1, num2) {\n return Math.floor((num1 / num2) * 1000);\n}", + "probId": "120806" }, { - "id": "El4EvV6ynL-snVWGZK6j4", + "id": "yQwy5c7WXcwqM2jDGreyj", "author": "codeisneverodd", - "code": "function solution(age) {\n return 2022 - age + 1;\n}\n", - "probId": "120820" + "code": "function solution(num1, num2) {\n return num1 - num2;\n}", + "probId": "120803" }, { - "id": "lPnW8TnistmnU_FwYfSw9", + "id": "flq5YSiss1nLA5LYkvWI2", "author": "codeisneverodd", - "code": "function solution(num_list) {\n return num_list.reverse();\n}\n", - "probId": "120821" + "code": "function solution(num1, num2) {\n return num1 + num2\n}", + "probId": "120802" }, { - "id": "enli6kZDeUhUqqcLfYMOY", + "id": "_JQtvPHPiTHkpMg6dBdYV", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...my_string].reverse().join('');\n}\n", - "probId": "120822" + "code": "function solution(score) {\n const avgs = score.map(([a, b]) => (a + b) / 2);\n const avgRank = [...avgs]\n .sort((a, b) => b - a)\n .map((avg, i) => ({ avg, rank: i + 1 }))\n .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a));\n\n return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank);\n}", + "probId": "120882" }, { - "id": "GU9tOOv0YflxFeuLc1rAy", + "id": "bEBMTcBreInF2HUsI8Srb", "author": "codeisneverodd", - "code": "const readline = require('readline');\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet input = [];\n\nrl.on('line', function (line) {\n input = line.split(' ');\n}).on('close', function () {\n for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i));\n});\n", - "probId": "120823" + "code": "function solution(id_pw, db) {\n const [id, pw] = id_pw;\n if (!db.find(([_id]) => _id === id)) return 'fail';\n return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw';\n}", + "probId": "120883" }, { - "id": "8t3DZqIIvYfAt9e0PHHEx", + "id": "e9hMhyRpgd_yQEIsJosu9", "author": "codeisneverodd", - "code": "function solution(num_list) {\n const evenLength = num_list.filter(n => n % 2 === 0).length;\n return [evenLength, num_list.length - evenLength];\n}\n", - "probId": "120824" + "code": "function solution(array, height) {\n return array.filter(a => a > height).length;\n}", + "probId": "120585" }, { - "id": "4WaSdDkEQii94ZVxjqTtb", + "id": "A-b2Wsfa0T54J6VWMLuu9", "author": "codeisneverodd", - "code": "function solution(my_string, n) {\n return [...my_string].map(char => char.repeat(n)).join('');\n}\n", - "probId": "120825" + "code": "function solution(letter) {\n const morse = { \n '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',\n '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',\n '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',\n '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',\n '-.--':'y','--..':'z'\n }\n return letter\n .split(' ')\n .map(l => morse[l])\n .join('');\n}", + "probId": "120838" }, { - "id": "1vUc9xQxPCPK3WSI61ykE", + "id": "tBLnLwhR8r9zfQcOfHxsx", "author": "codeisneverodd", - "code": "function solution(my_string, letter) {\n return my_string.replaceAll(letter, '');\n}\n", - "probId": "120826" + "code": "function solution(my_string) {\n return my_string.replace(/[aeiou]/g, '');\n}", + "probId": "120849" }, { - "id": "LOFQZX3AwnzV1HCLo04ke", + "id": "8tUQNdlKqJGZVvFP8pfQb", "author": "codeisneverodd", - "code": "function solution(angle) {\n if (angle === 180) return 4;\n if (angle > 90) return 3;\n if (angle === 90) return 2;\n return 1;\n}\n", - "probId": "120829" + "code": "function solution(num1, num2) {\n return Math.floor(num1 / num2);\n}", + "probId": "120805" }, { - "id": "hj6B5NADfrmS8PFvx2Veq", + "id": "wkUGsvxZ3z-W5vTvPExjc", "author": "codeisneverodd", - "code": "function solution(n, k) {\n return n * 12000 + (k - Math.floor(n / 10)) * 2000;\n}\n", - "probId": "120830" + "code": "function solution(my_string, n) {\n return [...my_string].map(char => char.repeat(n)).join('');\n}", + "probId": "120825" }, { - "id": "dVta7xJs--XnQe_2k_yPr", + "id": "UVfLDE0kUq5-Mb2qiIT-Q", "author": "codeisneverodd", - "code": "function solution(n) {\n let answer = 0;\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 0) answer += i;\n }\n return answer;\n}\n", - "probId": "120831" + "code": "function solution(my_string) {\n return eval(my_string);\n}", + "probId": "120902" }, { - "id": "XJy_DNL6md3IXq7qzwWf7", + "id": "YMoDlo5dmBhdtuG9F-uqQ", "author": "codeisneverodd", - "code": "function solution(numbers, num1, num2) {\n return numbers.slice(num1, num2 + 1);\n}\n", - "probId": "120833" + "code": "function solution(my_string) {\n return [...my_string].reverse().join('');\n}", + "probId": "120822" }, { - "id": "z2lOt7XIcpaoshp9BjERf", + "id": "6Y-EoZ6LOvILJ7Lel6NSI", "author": "codeisneverodd", - "code": "function solution(age) {\n return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join('');\n}", - "probId": "120834" + "code": "function solution(A, B) {\n const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join('');\n for (let i = 0; i <= A.length; i++) {\n if (A === B) return i;\n A = pushRight(A);\n }\n\n return -1;\n}", + "probId": "120921" }, { - "id": "Sz3iHVBucH-oqNfQYEn4S", + "id": "cI4OhwYtuVREl6zRScqAI", "author": "codeisneverodd", - "code": "function solution(emergency) {\n const sorted = [...emergency].sort((a, b) => b - a);\n return emergency.map(e => sorted.findIndex(s => s === e) + 1);\n}\n", - "probId": "120835" + "code": "function solution(my_string) {\n return my_string\n .match(/[0-9]/g)\n .map(str => +str)\n .sort((a, b) => a - b);\n}", + "probId": "120850" }, { - "id": "qaMlzhKP7eCFuNLF7zLil", + "id": "BxMASisim4qdys6KJBmev", "author": "codeisneverodd", - "code": "function solution(n) {\n let count = 0;\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) count += 2;\n }\n if (n % Math.sqrt(n) === 0) count += 1;\n return count;\n}\n", - "probId": "120836" + "code": "function solution(my_string) {\n return [...my_string]\n .map(char => char.toLowerCase())\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}", + "probId": "120911" }, { - "id": "8vFeaHf-A0Slz5CHrUGdi", + "id": "uBNgRHK5Itek6vZj_b2ZF", "author": "codeisneverodd", - "code": "function solution(hp) {\n const first = Math.floor(hp / 5);\n const second = Math.floor((hp - first * 5) / 3);\n const third = hp - first * 5 - second * 3;\n return first + second + third;\n}\n", - "probId": "120837" + "code": "function solution(str1, str2) {\n return str1.includes(str2) ? 1 : 2;\n}", + "probId": "120908" }, { - "id": "TvFb7pJkaWBq6z9UBlMDU", + "id": "i6QAPFUAt3dpKN9EEHkOB", "author": "codeisneverodd", - "code": "function solution(letter) {\n const morse = { \n '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',\n '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',\n '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',\n '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',\n '-.--':'y','--..':'z'\n }\n return letter\n .split(' ')\n .map(l => morse[l])\n .join('');\n}\n", - "probId": "120838" + "code": "function solution(numbers) {\n return numbers.map(n => n * 2);\n}", + "probId": "120809" }, { - "id": "qeIytPQKPekTyQxOBW17d", + "id": "yyezriEKHxGA4903NHu-p", "author": "codeisneverodd", - "code": "function solution(rsp) {\n const win = { 0: 5, 2: 0, 5: 2 };\n return [...rsp].map(num => win[num]).join('');\n}\n", - "probId": "120839" + "code": "function solution(num_list) {\n return num_list.reverse();\n}", + "probId": "120821" }, { - "id": "gfgE0p8unrIXwGxG84YGz", + "id": "8KAzdEaoD--V3usRyB810", "author": "codeisneverodd", - "code": "function solution(balls, share) {\n const [n, m] = [balls, share];\n const fact = [BigInt(1), BigInt(1)];\n\n for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i);\n\n return Number(fact[n] / (fact[n - m] * fact[m]));\n}\n", - "probId": "120840" + "code": "function solution(strlist) {\n return strlist.map(s => s.length);\n}", + "probId": "120854" }, { - "id": "CZFybhNvkLH6TULT4HP0-", + "id": "4lUPXxJ7YT1dtYeZ-wb5Z", "author": "codeisneverodd", - "code": "function solution(dot) {\n const [x, y] = dot;\n if (y > 0) return x > 0 ? 1 : 2;\n return x < 0 ? 3 : 4;\n}\n", - "probId": "120841" + "code": "function solution(numbers, num1, num2) {\n return numbers.slice(num1, num2 + 1);\n}", + "probId": "120833" }, { - "id": "4CHIyjjHXKYcWN_-fQdnm", + "id": "xynsg91juTSBA6n0gTGqD", "author": "codeisneverodd", - "code": "function solution(num_list, n) {\n let result = [];\n for (let i = 0; i < num_list.length / n; i++) {\n result = [...result, num_list.slice(i * n, i * n + n)];\n }\n return result;\n}\n", - "probId": "120842" + "code": "function solution(numbers, direction) {\n return direction === 'right'\n ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]\n : [...numbers.slice(1), numbers[0]];\n}", + "probId": "120844" }, { - "id": "MMC1wdtu0dLFpU-6ZSaRH", + "id": "Sc60jxZax2HO-tpUSEC1f", "author": "codeisneverodd", - "code": "function solution(numbers, k) {\n const goNext = current => (current + 2) % numbers.length;\n let current = 0;\n for (let i = 0; i < k - 1; i++) current = goNext(current);\n return numbers[current];\n}\n", - "probId": "120843" + "code": "function solution(s1, s2) {\n return s1.filter(s => s2.includes(s)).length;\n}", + "probId": "120903" }, { - "id": "8qXdMLgXlde3nbA6CvwCp", + "id": "FyRd_EPVRwYpZS9u07dkp", "author": "codeisneverodd", - "code": "function solution(numbers, direction) {\n return direction === 'right'\n ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]\n : [...numbers.slice(1), numbers[0]];\n}\n", - "probId": "120844" + "code": "function solution(numbers) {\n return numbers.reduce((a, c) => a + c, 0) / numbers.length;\n}", + "probId": "120817" }, { - "id": "qvAm63raIopomtq1AI2l_", + "id": "roh_q2oY0XpKwnNsBnP0s", "author": "codeisneverodd", - "code": "function solution(box, n) {\n return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);\n}\n", - "probId": "120845" + "code": "function solution(denum1, num1, denum2, num2) {\n const denum = denum2 * num1 + denum1 * num2;\n const num = num1 * num2;\n const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b));\n const gcd = getGCD(denum, num);\n return [denum / gcd, num / gcd];\n}", + "probId": "120808" }, { - "id": "455WTlErBDesscntyHmj4", + "id": "iP7JW645q8rySEb5VCr6t", "author": "codeisneverodd", - "code": "function solution(n) {\n const isPrime = num => {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return true;\n }\n return false;\n };\n\n let count = 0;\n\n for (let i = 1; i <= n; i++) {\n if (isPrime(i)) count += 1;\n }\n \n return count;\n}\n", - "probId": "120846" + "code": "function solution(sides) {\n const max = Math.max(...sides);\n return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2;\n}", + "probId": "120889" }, { - "id": "EUkqc0bXNcdUzwNLOY6Cz", + "id": "3XMMT8OfEfX0OAUf5cNuc", "author": "codeisneverodd", - "code": "function solution(numbers) {\n const [first, second, ...rest] = numbers.sort((a, b) => b - a);\n return first * second;\n}\n", - "probId": "120847" + "code": "function solution(sides) {\n return Math.min(...sides) * 2 - 1;\n}", + "probId": "120868" }, { - "id": "hevvitKh1qIFM0btA8s9S", + "id": "q237y8p-W2-NymFreJNK2", "author": "codeisneverodd", - "code": "function solution(n) {\n let factorial = [1, 1];\n for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i;\n\n return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2;\n}\n", - "probId": "120848" + "code": "function solution(n, t) {\n return n * 2 ** t;\n}", + "probId": "120910" }, { - "id": "8pVQtqZO6PcGrdckxMhmf", + "id": "aE4vSAa7PBamLUB4tsrEQ", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return my_string.replace(/[aeiou]/g, '');\n}\n", - "probId": "120849" + "code": "function solution(n) {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(n); i++) {\n while (n % i === 0) {\n pFactors = [...pFactors, i];\n n /= i;\n }\n }\n if (n >= 2) pFactors = [...pFactors, n];\n return [...new Set(pFactors)].sort((a, b) => a - b);\n}\n\nconst funcB = () => {\n return new Promise(resolve => {\n setTimeout(resolve('guys'), 1000);\n });\n};\n\nconst funcC = async () => {\n const m = 1;\n const res = await funcB();\n return res;\n};\nwindow.addEventListener('DOMContentLoaded', async () => {\n console.log(await funcC());\n});", + "probId": "120852" }, { - "id": "48xqGBO6aQ_3J5Y3g1Ixe", + "id": "W1Ha5iyhI7K7os4oVnTqK", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return my_string\n .match(/[0-9]/g)\n .map(str => +str)\n .sort((a, b) => a - b);\n}\n", - "probId": "120850" + "code": "function solution(n) {\n let count = 0;\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) count += 2;\n }\n if (n % Math.sqrt(n) === 0) count += 1;\n return count;\n}", + "probId": "120836" }, { - "id": "eq4twrsvySW0scqrsCVRf", + "id": "kmOkg2WIkUP1Cm-OJ-MeQ", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0);\n}\n", + "code": "function solution(my_string) {\n return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0);\n}", "probId": "120851" }, { - "id": "wPuFt2ITew2Z3cIEM91m8", + "id": "uVccwTQARnsGW96AVykfD", "author": "codeisneverodd", - "code": "function solution(n) {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(n); i++) {\n while (n % i === 0) {\n pFactors = [...pFactors, i];\n n /= i;\n }\n }\n if (n >= 2) pFactors = [...pFactors, n];\n return [...new Set(pFactors)].sort((a, b) => a - b);\n}\n\nconst funcB = () => {\n return new Promise(resolve => {\n setTimeout(resolve('guys'), 1000);\n });\n};\n\nconst funcC = async () => {\n const m = 1;\n const res = await funcB();\n return res;\n};\nwindow.addEventListener('DOMContentLoaded', async () => {\n console.log(await funcC());\n});\n", - "probId": "120852" + "code": "function solution(my_string) {\n const nums = my_string.match(/[0-9]+/g);\n return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0;\n}", + "probId": "120864" }, { - "id": "276qTrHei6IlIhbf41Gc5", + "id": "-Os7P_tCHgkNkR4DrJ0PN", "author": "codeisneverodd", - "code": "function solution(s) {\n const arr = s.split(' ');\n while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2);\n return arr.map(n => +n).reduce((a, c) => a + c, 0);\n}\n", - "probId": "120853" + "code": "function solution(num1, num2) {\n return num1 === num2 ? 1 : -1;\n}", + "probId": "120807" }, { - "id": "lKXKuX80mXYBeU2Arj-Qv", + "id": "zSDOYDjSmsATo2fbfxxWm", "author": "codeisneverodd", - "code": "function solution(strlist) {\n return strlist.map(s => s.length);\n}\n", - "probId": "120854" + "code": "function solution(num, k) {\n const index = [...('' + num)].findIndex(n => +n === k);\n return index === -1 ? -1 : index + 1;\n}", + "probId": "120904" }, { - "id": "se0WdOkyN4JHb38y_bm-w", + "id": "fLHyXayI4FyOCt255le-1", "author": "codeisneverodd", - "code": "function solution(dots) {\n const xDots = dots.flatMap(([x, y]) => x);\n const yDots = dots.flatMap(([x, y]) => y);\n const width = Math.max(...xDots) - Math.min(...xDots);\n const height = Math.max(...yDots) - Math.min(...yDots);\n return width * height;\n}\n", - "probId": "120860" + "code": "function solution(money) {\n return [Math.floor(money / 5500), money % 5500];\n}", + "probId": "120819" }, { - "id": "TNBL0z51K3WcXuLMH83Z-", + "id": "KkTti4G5XKJq39sAvcgUH", "author": "codeisneverodd", - "code": "function solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n return keyinput\n .map(key => moves[key])\n .reduce(\n ([x, y], [mX, mY]) => (Math.abs(x + mX) > rangeX || Math.abs(y + mY) > rangeY ? [x, y] : [x + mX, y + mY]),\n [0, 0]\n );\n}\n\n", - "probId": "120861" + "code": "function solution(board) {\n const isBombNearby = (r, c) => {\n const nearby = [\n [-1, -1],\n [-1, 0],\n [-1, 1],\n [0, -1],\n [0, 1],\n [1, -1],\n [1, 0],\n [1, 1],\n ];\n\n const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length;\n\n return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1);\n };\n\n let count = 0;\n\n for (let r = 0; r < board.length; r++) {\n for (let c = 0; c < board.length; c++) {\n if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1;\n }\n }\n return count;\n}", + "probId": "120866" }, { - "id": "Oyb7m6dvHqIVM5YzcWlfZ", + "id": "E6dyRuBWZAnVUJA4Du6ev", "author": "codeisneverodd", - "code": "//명령형\nfunction solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n let pos = [0, 0];\n\n keyinput\n .map(key => moves[key])\n .forEach(move => {\n if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return;\n pos[0] += move[0];\n pos[1] += move[1];\n });\n\n return pos;\n}\n", - "probId": "120861" + "code": "function solution(cipher, code) {\n return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), '');\n}", + "probId": "120892" }, { - "id": "r1dBb_hzDjtP8uiBtWSP9", + "id": "VC4tCj0840HRGp-z1Q4qE", "author": "codeisneverodd", - "code": "function solution(numbers) {\n const sorted = numbers.sort((a, b) => a - b);\n return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]);\n}\n", - "probId": "120862" + "code": "function solution(n) {\n let answer = [];\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) answer = [...answer, i, n / i];\n }\n if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)];\n return answer.sort((a, b) => a - b);\n}", + "probId": "120897" }, { - "id": "7RxXIiGVuTeZogRPk_TXo", + "id": "7sOJt_9XaqOJvghXbf_kC", "author": "codeisneverodd", - "code": "function solution(polynomial) {\n const countX = x => {\n const count = x.replaceAll('x', '');\n return count === '' ? 1 : +count;\n };\n\n const count = polynomial\n .split(' + ')\n .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), {\n x: 0,\n num: 0,\n });\n\n const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : '';\n const num = count.num > 0 ? '' + count.num : '';\n const plus = x !== '' && num !== '' ? ' + ' : '';\n\n return x + plus + num;\n}\n", - "probId": "120863" + "code": "function solution(n, k) {\n return n * 12000 + (k - Math.floor(n / 10)) * 2000;\n}", + "probId": "120830" }, { - "id": "16YZxcKo66LfWR4Ooy54I", + "id": "3BTyE9pEztLOFSaUde2h7", "author": "codeisneverodd", - "code": "function solution(my_string) {\n const nums = my_string.match(/[0-9]+/g);\n return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0;\n}\n", - "probId": "120864" + "code": "function solution(num, total) {\n const numArr = Array.from({ length: num }, (_, i) => i);\n const sum = numArr.reduce((a, c) => a + c);\n return numArr.map(n => n - (sum - total) / num);\n}", + "probId": "120923" }, { - "id": "eqYC-4JAwlNlO8uZFgGYi", + "id": "EIIrUFaAS0V5x6_bEJexe", "author": "codeisneverodd", - "code": "function solution(board) {\n const isBombNearby = (r, c) => {\n const nearby = [\n [-1, -1],\n [-1, 0],\n [-1, 1],\n [0, -1],\n [0, 1],\n [1, -1],\n [1, 0],\n [1, 1],\n ];\n\n const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length;\n\n return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1);\n };\n\n let count = 0;\n\n for (let r = 0; r < board.length; r++) {\n for (let c = 0; c < board.length; c++) {\n if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1;\n }\n }\n return count;\n}\n", - "probId": "120866" + "code": "function solution(numbers) {\n const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 };\n const regex = new RegExp(Object.keys(nums).join('|'), 'g');\n return +numbers.replace(regex, key => nums[key]);\n}", + "probId": "120894" }, { - "id": "7F3rUTsivMaZloU2WX2Xn", + "id": "jllBcdS7x6TpR19h4i3mW", "author": "codeisneverodd", - "code": "function solution(sides) {\n const min = Math.min(...sides);\n const max1 = Math.max(...sides);\n const max2 = min + max1 - 1;\n return max2 - (max1 - min);\n}\n\n", - "probId": "120868" + "code": "function solution(price) {\n if (price >= 500000) return Math.floor(price * 0.8);\n if (price >= 300000) return Math.floor(price * 0.9);\n if (price >= 100000) return Math.floor(price * 0.95);\n return price;\n}", + "probId": "120818" }, { - "id": "kJ1LotqK81DQ7ld9T1hNx", + "id": "k6ifMbSEXrkZxfNsJob9s", "author": "codeisneverodd", - "code": "function solution(sides) {\n return Math.min(...sides) * 2 - 1;\n}\n", - "probId": "120868" + "code": "function solution(babbling) {\n const convertPWordsToNum = word => {\n const pWords = ['aya', 'ye', 'woo', 'ma'];\n return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word);\n };\n const canPronounce = word => {\n const result = convertPWordsToNum(word);\n return !/[^\\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]);\n };\n\n return babbling.filter(b => canPronounce(b)).length;\n}", + "probId": "120956" }, { - "id": "hjBxrQaTyf9z9zX-dTrXC", + "id": "k1QZofbDT5yfaiJexD24k", "author": "codeisneverodd", - "code": "function solution(spell, dic) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2;\n}\n", + "code": "function solution(spell, dic) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2;\n}", "probId": "120869" }, { - "id": "wcGIaDkhpmsxZjs90agio", + "id": "omKQmjAADJvBbGzzgMH-k", "author": "codeisneverodd", - "code": "function solution(n) {\n let num = 0;\n let count = 0;\n\n while (count < n) {\n num += 1;\n if (!('' + num).includes('3') && num % 3 !== 0) count += 1;\n }\n\n return num;\n}\n", - "probId": "120871" + "code": "function solution(age) {\n return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join('');\n}", + "probId": "120834" }, { - "id": "BdFhVrddSUE3JKf1g2RHF", + "id": "jOpezmOte2FKGRKxMqOws", "author": "codeisneverodd", - "code": "function solution(dots) {\n const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity);\n const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2);\n\n return dots.some(dot => {\n const line1 = [dots[0], dot];\n const line2 = dots.filter(dot => !line1.includes(dot));\n return isParallel(line1, line2);\n })\n ? 1\n : 0;\n}\n", - "probId": "120875" + "code": "function solution(a, b) {\n const getGCD = (a, b) => {\n let gcd = 1;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if (a % i === 0 && b % i === 0) gcd = i;\n }\n return gcd;\n };\n\n const getPrimeFactors = num => {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(num); i++) {\n while (num % i === 0) {\n pFactors = [...pFactors, i];\n num /= i;\n }\n }\n if (num > 2) pFactors = [...pFactors, num];\n return pFactors;\n };\n\n return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1;\n}", + "probId": "120878" }, { - "id": "dO8txwVrhmROUZPL-lA9-", + "id": "LMVzWcSFfwsYtSgO6hNXc", "author": "codeisneverodd", - "code": "function solution(lines) {\n const visited = lines.reduce((a, [x, y]) => {\n for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1;\n return a;\n }, {});\n\n return Object.values(visited).filter(v => v > 1).length;\n}\n", - "probId": "120876" + "code": "function solution(bin1, bin2) {\n return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);\n}", + "probId": "120885" }, { - "id": "69Ji9CFx_qWnISYx-OF7k", + "id": "gtQGO4DvoU1oLUddtt-LZ", "author": "codeisneverodd", - "code": "function solution(a, b) {\n const getGCD = (a, b) => {\n let gcd = 1;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if (a % i === 0 && b % i === 0) gcd = i;\n }\n return gcd;\n };\n\n const getPrimeFactors = num => {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(num); i++) {\n while (num % i === 0) {\n pFactors = [...pFactors, i];\n num /= i;\n }\n }\n if (num > 2) pFactors = [...pFactors, num];\n return pFactors;\n };\n\n return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1;\n}\n", - "probId": "120878" + "code": "function solution(my_string, num1, num2) {\n const str = [...my_string];\n\n [str[num1], str[num2]] = [str[num2], str[num1]];\n\n return str.join('');\n}", + "probId": "120895" }, { - "id": "_oj1zujPmxkBguHkK-FUZ", + "id": "0VONCnZmY7f3yd625hIpr", "author": "codeisneverodd", - "code": "function solution(numlist, n) {\n return numlist.sort((a, b) => {\n const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)];\n if (aDiff === bDiff) return b - a;\n return aDiff - bDiff;\n });\n}\n", - "probId": "120880" + "code": "function solution(n) {\n return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0);\n}", + "probId": "120906" }, { - "id": "Onm1IWHhHFuloPXPdCp31", + "id": "GlYKS6KBtGmPGmladvL0U", "author": "codeisneverodd", - "code": "function solution(score) {\n const avgs = score.map(([a, b]) => (a + b) / 2);\n const avgRank = [...avgs]\n .sort((a, b) => b - a)\n .map((avg, i) => ({ avg, rank: i + 1 }))\n .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a));\n\n return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank);\n}\n", - "probId": "120882" + "code": "function solution(my_str, n) {\n let result = [];\n for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)];\n return result;\n}", + "probId": "120913" }, { - "id": "aj9a1sArsxSY1-JlC02qG", + "id": "j3E7UTIvK9SivBYv-QN_b", "author": "codeisneverodd", - "code": "function solution(id_pw, db) {\n const [id, pw] = id_pw;\n if (!db.find(([_id]) => _id === id)) return 'fail';\n return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw';\n}\n", - "probId": "120883" + "code": "function solution(n) {\n let num = 0;\n let count = 0;\n\n while (count < n) {\n num += 1;\n if (!('' + num).includes('3') && num % 3 !== 0) count += 1;\n }\n\n return num;\n}", + "probId": "120871" }, { - "id": "xA5H1YSa3_trYgw-LhBoW", + "id": "zuKW6v0J6alpgcDtzf58X", "author": "codeisneverodd", - "code": "function solution(chicken) {\n const order = coupons => {\n if (coupons < 10) return 0;\n const service = Math.floor(coupons / 10);\n return service + order(service + (coupons % 10));\n };\n return order(chicken);\n}\n", - "probId": "120884" + "code": "function solution(dot) {\n const [x, y] = dot;\n if (y > 0) return x > 0 ? 1 : 2;\n return x < 0 ? 3 : 4;\n}", + "probId": "120841" }, { - "id": "H19SV_SJWhddccXg88Uas", + "id": "Vhp-_gTRlWlIK9bwC20Bs", "author": "codeisneverodd", - "code": "function solution(bin1, bin2) {\n return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);\n}\n", - "probId": "120885" + "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? 1 : 2;\n}", + "probId": "120909" }, { - "id": "tXJzOdf-F10UruI8W3ddt", + "id": "0Rbwoi8hQYeh8KnDJ7Pjw", "author": "codeisneverodd", - "code": "function solution(before, after) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return sort(before) === sort(after) ? 1 : 0;\n}\n", - "probId": "120886" + "code": "function solution(M, N) {\n return M * N - 1;\n}", + "probId": "120922" }, { - "id": "nh6i5tDtEuqXalqCeNKzJ", + "id": "ZXHZe-XilNybP5cTIZClP", "author": "codeisneverodd", - "code": "function solution(i, j, k) {\n let count = 0;\n for (let num = i; num <= j; num++) {\n count += [...('' + num)].filter(n => +n === k).length;\n }\n return count;\n}\n", - "probId": "120887" + "code": "function solution(box, n) {\n return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);\n}", + "probId": "120845" }, { - "id": "LdprzSmYPX5Tafx0i7g4O", + "id": "LrS3JXzlAzv78oxs0JRvP", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...new Set(my_string)].join('');\n}\n", + "code": "function solution(my_string) {\n return [...new Set(my_string)].join('');\n}", "probId": "120888" }, { - "id": "xPIEyxQDAXCSgQDIWJLx4", - "author": "codeisneverodd", - "code": "function solution(sides) {\n const max = Math.max(...sides);\n return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2;\n}\n", - "probId": "120889" - }, - { - "id": "VeYTkOjJ3brgMq8iN6-FM", + "id": "kJJRY9GgLy98mK7jGPdK3", "author": "codeisneverodd", - "code": "function solution(array, n) {\n const minDiff = Math.min(...array.map(a => Math.abs(a - n)));\n return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff);\n}\n", - "probId": "120890" + "code": "function solution(array, n) {\n return array.filter(a => a === n).length;\n}", + "probId": "120583" }, { - "id": "eNMbQhGFYlxupagPdTtHm", + "id": "5UBJ9ldIXAeNjpp0JIkfB", "author": "codeisneverodd", - "code": "function solution(order) {\n return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length;\n}\n", - "probId": "120891" + "code": "function solution(array) {\n return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];\n}", + "probId": "120811" }, { - "id": "pDJZ9U0t6JtrvomqW5LAE", + "id": "SiUS7rs55Tz70IpM2SQzb", "author": "codeisneverodd", - "code": "function solution(cipher, code) {\n return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), '');\n}\n", - "probId": "120892" + "code": "const readline = require('readline');\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet input = [];\n\nrl.on('line', function (line) {\n input = line.split(' ');\n}).on('close', function () {\n for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i));\n});", + "probId": "120823" }, { - "id": "9EqGti08O2oWtIQbrqajU", + "id": "2SCINAyIX_7A8LruK1A1V", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join('');\n}", - "probId": "120893" + "code": "function solution(dots) {\n const xDots = dots.flatMap(([x, y]) => x);\n const yDots = dots.flatMap(([x, y]) => y);\n const width = Math.max(...xDots) - Math.min(...xDots);\n const height = Math.max(...yDots) - Math.min(...yDots);\n return width * height;\n}", + "probId": "120860" }, { - "id": "FGKMaIzCZU8ihKh9EpIuf", + "id": "jouig9uSYkIg_D-tsM4Zu", "author": "codeisneverodd", - "code": "function solution(numbers) {\n const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 };\n const regex = new RegExp(Object.keys(nums).join('|'), 'g');\n return +numbers.replace(regex, key => nums[key]);\n}\n", - "probId": "120894" + "code": "function solution(emergency) {\n const sorted = [...emergency].sort((a, b) => b - a);\n return emergency.map(e => sorted.findIndex(s => s === e) + 1);\n}", + "probId": "120835" }, { - "id": "DPB6axy9jBGn5457tX2U8", + "id": "mPD29Z9lQ_cxKrDHC__oI", "author": "codeisneverodd", - "code": "function solution(my_string, num1, num2) {\n const str = [...my_string];\n\n [str[num1], str[num2]] = [str[num2], str[num1]];\n\n return str.join('');\n}\n", - "probId": "120895" + "code": "function solution(num_list) {\n const evenLength = num_list.filter(n => n % 2 === 0).length;\n return [evenLength, num_list.length - evenLength];\n}", + "probId": "120824" }, { - "id": "qtXyW0yuLFxA-57h37-rq", + "id": "zy6mk4AvXF9xztiXRS8-4", "author": "codeisneverodd", - "code": "function solution(s) {\n const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n return Object.keys(count)\n .filter(key => count[key] === 1)\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}\n", - "probId": "120896" + "code": "function solution(n) {\n let nums = [];\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 1) nums = [...nums, i];\n }\n return nums;\n}", + "probId": "120813" }, { - "id": "D5TeeqTF_MZ685rhIZZZk", + "id": "kHlGOVzrZIqpqvNmbWow6", "author": "codeisneverodd", - "code": "function solution(n) {\n let answer = [];\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) answer = [...answer, i, n / i];\n }\n if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)];\n return answer.sort((a, b) => a - b);\n}\n", - "probId": "120897" + "code": "function solution(n) {\n let answer = 0;\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 0) answer += i;\n }\n return answer;\n}", + "probId": "120831" }, { - "id": "reRZ9qwz49UnzoZoYG7Ox", + "id": "JQpPiPuxh73c7kO5a7Nzh", "author": "codeisneverodd", - "code": "function solution(message) {\n return message.length * 2;\n}\n", - "probId": "120898" + "code": "function solution(numbers) {\n const [first, second, ...rest] = numbers.sort((a, b) => b - a);\n return first * second;\n}", + "probId": "120847" }, { - "id": "y8ZesETSuSDVG3OcaSnU4", + "id": "k8E_n2JN9JYI6PrLnGzfX", "author": "codeisneverodd", - "code": "function solution(array) {\n const max = Math.max(...array);\n return [max, array.indexOf(max)];\n}\n", - "probId": "120899" + "code": "function solution(numbers) {\n const sorted = numbers.sort((a, b) => a - b);\n return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]);\n}", + "probId": "120862" }, { - "id": "0KqtAQszMysOlLsxF8P9o", + "id": "czion0YKw_J-4kluumzhK", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return eval(my_string);\n}\n", - "probId": "120902" + "code": "function solution(array) {\n const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n const max = Math.max(...Object.values(counts));\n const modes = Object.keys(counts).filter(key => counts[key] === max);\n return modes.length === 1 ? +modes[0] : -1;\n}", + "probId": "120812" }, { - "id": "rBOJViCtDx6A8RGbm55ZD", + "id": "JWQH6EyirigybzhegY5ST", "author": "codeisneverodd", - "code": "function solution(s1, s2) {\n return s1.filter(s => s2.includes(s)).length;\n}\n", - "probId": "120903" + "code": "function solution(chicken) {\n const order = coupons => {\n if (coupons < 10) return 0;\n const service = Math.floor(coupons / 10);\n return service + order(service + (coupons % 10));\n };\n return order(chicken);\n}", + "probId": "120884" }, { - "id": "1zwx3c1mdsXhh1K9s5JsE", + "id": "CDR9AYzvMSjY8652CVTQN", "author": "codeisneverodd", - "code": "function solution(num, k) {\n const index = [...('' + num)].findIndex(n => +n === k);\n return index === -1 ? -1 : index + 1;\n}\n", - "probId": "120904" + "code": "//명령형\nfunction solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n let pos = [0, 0];\n\n keyinput\n .map(key => moves[key])\n .forEach(move => {\n if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return;\n pos[0] += move[0];\n pos[1] += move[1];\n });\n\n return pos;\n}", + "probId": "120861" }, { - "id": "14FKf8QAN_ZX6w1QtvxcS", + "id": "L0AgXguklH1kXTw0yykGl", "author": "codeisneverodd", - "code": "function solution(n, numlist) {\n return numlist.filter(num => num % n === 0);\n}\n", - "probId": "120905" + "code": "function solution(s) {\n const arr = s.split(' ');\n while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2);\n return arr.map(n => +n).reduce((a, c) => a + c, 0);\n}", + "probId": "120853" }, { - "id": "K5_vNL1F_VrMePAfcjh9Z", + "id": "8Fs11e7oBekuxNjpAstT3", "author": "codeisneverodd", - "code": "function solution(n) {\n return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0);\n}\n", - "probId": "120906" + "code": "function solution(numlist, n) {\n return numlist.sort((a, b) => {\n const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)];\n if (aDiff === bDiff) return b - a;\n return aDiff - bDiff;\n });\n}", + "probId": "120880" }, { - "id": "OsY3zwWU7GetEqX_6HycR", + "id": "vdwvjmlu0CVowMKz2vTZD", "author": "codeisneverodd", - "code": "function solution(quiz) {\n return quiz.map(q => {\n const [formula, answer] = q.split('=');\n return eval(formula) === +answer ? 'O' : 'X';\n });\n}\n", - "probId": "120907" + "code": "function solution(my_string, letter) {\n return my_string.replaceAll(letter, '');\n}", + "probId": "120826" }, { - "id": "Y5g1hmVSLpJ_Za5hcbSjw", + "id": "hbxjMqfAUJmkubGtkiuZf", "author": "codeisneverodd", - "code": "function solution(str1, str2) {\n return str1.includes(str2) ? 1 : 2;\n}\n", - "probId": "120908" + "code": "function solution(n) {\n let factorial = [1, 1];\n for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i;\n\n return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2;\n}", + "probId": "120848" }, { - "id": "Tm6HLdmBVkki2HWGdYVBo", + "id": "uT6FMY9QYKdJW8t9cY7Lk", "author": "codeisneverodd", - "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? 1 : 2;\n}\n", - "probId": "120909" + "code": "function solution(message) {\n return message.length * 2;\n}", + "probId": "120898" }, { - "id": "IGt1habZQLXv-WKRzNbcr", + "id": "orCSuHScIqur0ogDwynkK", "author": "codeisneverodd", - "code": "function solution(n, t) {\n return n * 2 ** t;\n}\n", - "probId": "120910" + "code": "function solution(dots) {\n const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity);\n const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2);\n\n return dots.some(dot => {\n const line1 = [dots[0], dot];\n const line2 = dots.filter(dot => !line1.includes(dot));\n return isParallel(line1, line2);\n })\n ? 1\n : 0;\n}", + "probId": "120875" }, { - "id": "edIJE1RUJ7ZSJtvHhafSc", + "id": "PLZGvoLrsqLBgJXgDXUwd", "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...my_string]\n .map(char => char.toLowerCase())\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}\n", - "probId": "120911" + "code": "function solution(n) {\n return Math.floor((n - 1) / 7) + 1;\n}", + "probId": "120814" }, { - "id": "EY7cmG0wcuQDZsVmMCP4Y", + "id": "H_H5U2fZK_cMpSSW8A_Rg", "author": "codeisneverodd", - "code": "function solution(array) {\n return [...array.join('')].filter(a => a === '7').length;\n}\n", - "probId": "120912" + "code": "function solution(n) {\n const getLCM = (a, b) => {\n let lcm = 1;\n while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1;\n return lcm;\n };\n\n return getLCM(n, 6) / 6;\n}", + "probId": "120815" }, { - "id": "0JrHJL0JCkEDzsEFlS8DA", + "id": "UF4EuA0Zbky3u50b1ay54", "author": "codeisneverodd", - "code": "function solution(my_str, n) {\n let result = [];\n for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)];\n return result;\n}\n", - "probId": "120913" + "code": "function solution(slice, n) {\n return Math.floor((n - 1) / slice) + 1;\n}", + "probId": "120816" }, { - "id": "9SZ5gjfB_PiUWWcXAXHnC", + "id": "44CkOTIiD_oxexcg_TZIK", "author": "codeisneverodd", - "code": "function solution(A, B) {\n const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join('');\n for (let i = 0; i <= A.length; i++) {\n if (A === B) return i;\n A = pushRight(A);\n }\n\n return -1;\n}\n", - "probId": "120921" + "code": "function solution(s) {\n const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n return Object.keys(count)\n .filter(key => count[key] === 1)\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}", + "probId": "120896" }, { - "id": "sBi5KQ13QrClVJeuex1Pd", + "id": "Ude8dWJ0veL-IkVuADF1k", "author": "codeisneverodd", - "code": "function solution(M, N) {\n return M * N - 1;\n}\n", - "probId": "120922" + "code": "function solution(n) {\n const isPrime = num => {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return true;\n }\n return false;\n };\n\n let count = 0;\n\n for (let i = 1; i <= n; i++) {\n if (isPrime(i)) count += 1;\n }\n \n return count;\n}", + "probId": "120846" }, { - "id": "pYG5-VLodAZnnjCazkF5Z", + "id": "AEcVZmiBojNk8Oboba6mD", "author": "codeisneverodd", - "code": "function solution(num, total) {\n const numArr = Array.from({ length: num }, (_, i) => i);\n const sum = numArr.reduce((a, c) => a + c);\n return numArr.map(n => n - (sum - total) / num);\n}\n", - "probId": "120923" + "code": "function solution(a, b) {\n let count = 0;\n const day = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n for (let i = 1; i < a; i++) count += month[i];\n count += b;\n return day[(count + 4) % 7]; // 금요일 부터 1일 이므로\n}", + "probId": "12901" }, { - "id": "bWANoxNVB9Jp9GsSuOQax", - "author": "codeisneverodd", - "code": "function solution(common) {\n const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0];\n return isAP(common)\n ? common[common.length - 1] + common[1] - common[0]\n : common[common.length - 1] * (common[1] / common[0]);\n}\n", - "probId": "120924" + "id": "S22YSfhqRPUc6UHmqWtTT", + "author": "yongchanson", + "code": "function solution(a, b) {\n const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const week = [\"THU\", \"FRI\", \"SAT\", \"SUN\", \"MON\", \"TUE\", \"WED\"];\n\n let sum = b;\n for (\n let i = 0;\n i < a - 1;\n i++ //ex)5월인 경우 1~4월까지 더해준다.\n )\n sum += month[i];\n\n return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다.\n}", + "probId": "12901" }, { - "id": "rQMnOCqnnk0R_Ew1kRmtH", - "author": "codeisneverodd", - "code": "function solution(babbling) {\n const convertPWordsToNum = word => {\n const pWords = ['aya', 'ye', 'woo', 'ma'];\n return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word);\n };\n const canPronounce = word => {\n const result = convertPWordsToNum(word);\n return !/[^\\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]);\n };\n\n return babbling.filter(b => canPronounce(b)).length;\n}\n", - "probId": "120956" + "id": "LjTnxDHrI117NKRnU7Zqy", + "author": "chaerin-dev", + "code": "function solution(a, b) {\n let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n let week = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수\n let passedDays = 0;\n // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌\n for (let i = 1; i < a; i++) passedDays += arr[i];\n // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌\n passedDays += b - 1;\n return week[(5 + passedDays) % 7];\n}", + "probId": "12901" }, { - "id": "1mQvRoZ0pd01s0AVyhSoX", - "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n n = Math.floor((n - 1) / 3) //나누어떨어지지 않을 때에도 -1해도 상관없음\n }\n return answer;\n}\n\n", - "probId": "12899" + "id": "1kHjxIv6xoYdMdmdvQlAg", + "author": "prove-ability", + "code": "function solution(a, b) {\n var answer = \"\";\n // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?\n const days = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n // 2016년 1월 1일은 금요일로 4를 더해준다\n let totalDays = 4;\n // a 이전 모든 달의 일 수를 더한다\n for (let i = 0, len = a - 1; i < len; i++) {\n totalDays += daysOfMonth[i];\n }\n // totalDays 와 해당 일을 더해주고 7로 나눈 나머지\n const dayIndex = (totalDays + b) % 7;\n return days[dayIndex];\n}", + "probId": "12901" }, { - "id": "QWQGmUaEU55O06dGrbsTx", + "id": "czN4T6LuWlCohCBZEFVSf", "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n if (remainder === 0) {\n n = Math.floor((n - 1) / 3)\n } else {\n n = Math.floor(n / 3)\n }\n }\n return answer;\n}\n\n", - "probId": "12899" + "code": "function solution(n) {\n var answer = 0;\n const ternaryReversed = decimalToTernaryReversed(n);\n answer = parseInt(ternaryReversed, 3);\n return answer;\n}\n\nconst decimalToTernaryReversed = (num) => {\n let ternary = \"\";\n while (num >= 3) {\n ternary += (num % 3).toString();\n num = Math.floor(num / 3);\n }\n ternary += num.toString();\n return ternary;\n};", + "probId": "68935" }, { - "id": "QBPZ5Ppo9lldMncIPHvY2", + "id": "bQuOLguok3JdvtEXbswhY", "author": "jaewon1676", - "code": "function solution(n) {\n const number = [ 4, 1, 2];\n let answer = \"\";\n \n while(n){ // \n answer = number[n%3] + answer;\n n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3);\n }\n\n return answer\n}\n\n", - "probId": "12899" + "code": "function solution(n) {\n var answer = n.toString(3).split(\"\").reverse().join(\"\");\n\n return parseInt(answer, 3);\n}", + "probId": "68935" }, { - "id": "ADTNameB-b5n9Hkn4DAC9", - "author": "RyanDeclan", - "code": "// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용\n// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드\nlet result = \"\";\nfunction solution(n) {\n let remainder = n % 3;\n let quotient = Math.floor(n / 3)\n if(!remainder){\n quotient = Math.floor(n / 3) - 1;\n remainder = 3\n }\n result += remainder;\n if( quotient <= 3){\n if(quotient)result += quotient\n result = result.replace(/[\"3\"]/g,\"4\")\n return result.split(\"\").reverse().join(\"\")\n } \n return solution(quotient);\n}\n", - "probId": "12899" + "id": "M3fIPh7bjuq-s72EiNRB_", + "author": "prove-ability", + "code": "function solution(n) {\n return parseInt(n.toString(3).split(\"\").reverse().join(\"\"), 3)\n}", + "probId": "68935" }, { - "id": "loMqlEtl2TELeLmtqSudP", - "author": "jaewon1676", - "code": "function solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", - "probId": "12900" + "id": "w731dCWjCy4oHDfK9usEH", + "author": "codeisneverodd", + "code": "function solution(array, commands) {\n return commands.map((cmd) => {\n const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b);\n return arrCmd[cmd[2] - 1];\n });\n}", + "probId": "42748" }, { - "id": "4RaFAp4CZ2NK2Pl5snUYA", + "id": "JCbzIgZhJ3YjVlXbIT-z9", "author": "jaewon1676", - "code": "function solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", - "probId": "12900" + "code": "function solution(array, commands) {\n var result = [];\n var temp = [];\n for (var i = 0; i < commands.length; i++) {\n temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => {\n return a - b;\n });\n console.log(temp);\n result.push(temp[commands[i][2] - 1]);\n }\n return result;\n}", + "probId": "42748" }, { - "id": "HGTcW9kEGlLoqWkHaDIQS", - "author": "yongchanson", - "code": "function solution(a, b) {\n const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const week = [\"THU\", \"FRI\", \"SAT\", \"SUN\", \"MON\", \"TUE\", \"WED\"];\n\n let sum = b;\n for (\n let i = 0;\n i < a - 1;\n i++ //ex)5월인 경우 1~4월까지 더해준다.\n )\n sum += month[i];\n\n return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다.\n}\n\n", - "probId": "12901" + "id": "JF0TOt-JJ6h1O8Krb60Ke", + "author": "prove-ability", + "code": "function solution(array, commands) {\n var answer = [];\n commands.forEach(([i, j, k]) => {\n const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1];\n answer.push(su);\n });\n return answer;\n}", + "probId": "42748" }, { - "id": "fmhLxttj3enOVjmSoIKey", - "author": "chaerin-dev", - "code": "function solution(a, b) {\n let week = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n let dateStr = \"2016-\" + a + \"- \" + b;\n let date = new Date(dateStr);\n return week[date.getDay()];\n}\n\n", - "probId": "12901" + "id": "45jjvhNysFJA-M7MRfbX2", + "author": "createhb21", + "code": "function solution(array, commands) {\n let answer = [];\n for (let i = 0; i < commands.length; i++) {\n let eachCommand = commands[i];\n let slice = array.slice(eachCommand[0] - 1, eachCommand[1]);\n answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]);\n }\n return answer;\n}", + "probId": "42748" }, { - "id": "Rg3HhwS9kvwW7NsdO96Kd", + "id": "KeoN162P78OTI7INZNqDO", "author": "chaerin-dev", - "code": "function solution(a, b) {\n let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n let week = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수\n let passedDays = 0;\n // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌\n for (let i = 1; i < a; i++) passedDays += arr[i];\n // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌\n passedDays += b - 1;\n return week[(5 + passedDays) % 7];\n}\n\n", - "probId": "12901" + "code": "function solution(array, commands) {\n let t = commands.length;\n let answer = [];\n while (t--) {\n let command = commands.shift();\n answer.push(\n array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[\n command[2] - 1\n ]\n );\n }\n return answer;\n}", + "probId": "42748" }, { - "id": "ybrH1nWr7pQl4j2f7RPF6", - "author": "prove-ability", - "code": "function solution(a, b) {\n var answer = \"\";\n // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?\n const days = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n // 2016년 1월 1일은 금요일로 4를 더해준다\n let totalDays = 4;\n // a 이전 모든 달의 일 수를 더한다\n for (let i = 0, len = a - 1; i < len; i++) {\n totalDays += daysOfMonth[i];\n }\n // totalDays 와 해당 일을 더해주고 7로 나눈 나머지\n const dayIndex = (totalDays + b) % 7;\n return days[dayIndex];\n}\n", - "probId": "12901" + "id": "wsEkfxo9XV-p77hkbekXa", + "author": "codeisneverodd", + "code": "function solution(dartResult) {\n const regex = /\\d{1,2}[SDT]{1}[*|#]?/g;\n let result = [];\n for (const dart of dartResult.match(regex)) {\n const game = [...dart.split(/([SDT]{1})/)];\n const score = game[0];\n let bonus = 1;\n let option = 1;\n if (game[1] === \"S\") bonus = 1;\n if (game[1] === \"D\") bonus = 2;\n if (game[1] === \"T\") bonus = 3;\n\n if (game[2] === \"*\") {\n if (result.length !== 0) result[result.length - 1] *= 2;\n option = 2;\n }\n if (game[2] === \"#\") option = -1;\n\n result.push(score ** bonus * option);\n }\n\n return result.reduce((a, b) => a + b);\n}", + "probId": "17682" }, { - "id": "CbXqzRCSUHwgfMU5JPdCG", + "id": "irR2UXQX-A5XSGaRc1Hae", + "author": "jaewon1676", + "code": "function solution(dartResult) {\n var answer = 0;\n let score = 0;\n let cnt = [];\n\n for (let i = 0; i < dartResult.length; i++) {\n //점수가 주어질때\n if (!isNaN(dartResult[i])) {\n // i가 1인 경우는 10점, 그외에는 점수\n score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]);\n //보너스 S일때\n } else if (dartResult[i] === \"S\") {\n cnt.push(score);\n //보너스 D일때\n } else if (dartResult[i] === \"D\") {\n cnt.push(Math.pow(score, 2));\n //보너스 T일때\n } else if (dartResult[i] === \"T\") {\n cnt.push(Math.pow(score, 3));\n //옵션 *일떄\n } else if (dartResult[i] === \"*\") {\n cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2;\n cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2;\n //옵션 #일때\n } else if (dartResult[i] === \"#\") {\n cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1];\n }\n }\n //3개의 점수 합산\n answer = cnt.reduce((acc, cur) => acc + cur, 0);\n return answer;\n}", + "probId": "17682" + }, + { + "id": "VFnKIAMHH4Xt05M7jCGR8", "author": "codeisneverodd", - "code": "function solution(n) {\n if (n % 2 !== 0) return 0;\n\n const getCount = n => {\n const k = n / 2;\n const count = [3, 11, ...Array(k - 2)];\n const divider = 1000000007;\n for (let i = 2; i < k; i++) {\n count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider;\n }\n return count[count.length - 1];\n };\n\n return getCount(n);\n}\n", - "probId": "12902" + "code": "function solution(n, arr1, arr2) {\n var answer = [];\n let mapA = [];\n let mapB = [];\n for (let i = 0; i < n; i++) {\n let rowArrA = arr1[i].toString(2).split(\"\");\n let rowArrB = arr2[i].toString(2).split(\"\");\n for (let j = 0, len = rowArrA.length; j < n - len; j++)\n rowArrA.unshift(\"0\");\n for (let j = 0, len = rowArrB.length; j < n - len; j++)\n rowArrB.unshift(\"0\");\n mapA.push(rowArrA);\n mapB.push(rowArrB);\n }\n let answer2D = mapA.slice();\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n answer2D[i][j] = mapA[i][j] === \"0\" && mapB[i][j] === \"0\" ? \" \" : \"#\";\n }\n }\n answer = answer2D.map((row) => row.join(\"\"));\n return answer;\n}", + "probId": "17681" + }, + { + "id": "5SiIjKY4OzuKQ5AL87KS3", + "author": "jaewon1676", + "code": "function solution(n, arr1, arr2) {\n let answer = [];\n for (let i = 0; i < n; i++) {\n let temp = (arr1[i] | arr2[i]).toString(2);\n let line = []; // 한 행의 모든 2진수 보관\n\n for (let j = temp.length - n; j < temp.length; j++) {\n if (temp[j] == 1) {\n line.push(\"#\");\n } else {\n line.push(\" \");\n }\n }\n answer.push(line.join(\"\"));\n }\n return answer;\n}\n\n/* 풀이 과정\n1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다.\n2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다.\n3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/", + "probId": "17681" + }, + { + "id": "YpoSpGPJGAlrqUgsohv5i", + "author": "codeisneverodd", + "code": "function solution(x, n) {\n return Array.from(Array(n), (_, index) => x * (index + 1));\n}", + "probId": "12954" + }, + { + "id": "Cvkcn0ZBRI8ZT6VViEajm", + "author": "chaerin-dev", + "code": "function solution(x, n) {\n var answer = [];\n let add_gap = x;\n // n번 반복\n for (let i = 0; i < n; i++) {\n answer.push(x); // 처음 배열에 넣을 x\n x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가\n }\n return answer;\n}", + "probId": "12954" + }, + { + "id": "3qn2IflJ7P5F_tKB6XC7f", + "author": "jaewon1676", + "code": "function solution(n) {\n let str = \"\";\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + \"수\") : (str = str + \"박\");\n }\n return str;\n}", + "probId": "12954" + }, + { + "id": "m0z2ecvCUempXfOB6GMMY", + "author": "prove-ability", + "code": "function solution(x, n) {\n var answer = [];\n let i = 1;\n // n개 지니는 리스트를 리턴해야 합니다\n while (answer.length !== n) {\n // x부터 시작해 x씩 증가하는 숫자\n answer.push(x * i);\n i++;\n }\n return answer;\n}", + "probId": "12954" + }, + { + "id": "dxeSx_ZVdGgq2z1QHa6Cw", + "author": "codeisneverodd", + "code": "function solution(s) {\n return s.length % 2 !== 0\n ? s[Math.floor(s.length / 2)]\n : s.slice(s.length / 2 - 1, s.length / 2 + 1);\n}", + "probId": "12903" }, { - "id": "MdWmFQcD0jjkXpKvm7zpr", + "id": "r-rwFERI9-Lah5UA83Maq", "author": "yongchanson", - "code": "function solution(s) {\n var answer = \"\";\n let L2 = s.length / 2;\n\n answer =\n s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]);\n\n return answer;\n}\n\n", + "code": "function solution(s) {\n var answer = \"\";\n let L2 = s.length / 2;\n\n answer =\n s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]);\n\n return answer;\n}", "probId": "12903" }, { - "id": "6sw2KL0SpGYTgBpML-ASx", + "id": "-qN4d-WX14-j50bZByLaG", "author": "prove-ability", - "code": "function solution(s) {\n var answer = '';\n // 중간 지점 찾기\n const point = Math.floor(s.length / 2);\n // 짝수인 경우 - (중간지점 - 1) + 중간지점 \n if(s.length % 2 ===0) answer = s[point - 1] + s[point];\n // 홀수인 경우 - 중간지점\n else answer = s[point];\n return answer;\n}\n\n", + "code": "function solution(s) {\n var answer = '';\n // 중간 지점 찾기\n const point = Math.floor(s.length / 2);\n // 짝수인 경우 - (중간지점 - 1) + 중간지점 \n if(s.length % 2 ===0) answer = s[point - 1] + s[point];\n // 홀수인 경우 - 중간지점\n else answer = s[point];\n return answer;\n}", "probId": "12903" }, { - "id": "MPMUGep5vbLeTAMJuxYCE", + "id": "70_67tohf_a1hLYU_krte", "author": "chaerin-dev", - "code": "function solution(s) {\n return s.length % 2\n ? s[parseInt(s.length / 2)]\n : s[s.length / 2 - 1] + s[s.length / 2];\n}\n\n", + "code": "function solution(s) {\n return s.length % 2\n ? s[parseInt(s.length / 2)]\n : s[s.length / 2 - 1] + s[s.length / 2];\n}", "probId": "12903" }, { - "id": "jRrNcLxoVnDSX5ypE3Z3c", + "id": "oxWHg53i3iT665f8hozdE", "author": "jaewon1676", - "code": "function solution(s) {\n var answer = '';\n \n if (s.length % 2 == 0 ) { // 짝수일 경우,\n answer = s[s.length / 2 - 1] + s[s.length / 2];\n } else {\n answer = s[parseInt(s.length / 2)]; // 홀수일 경우\n }\n return answer;\n}\n", + "code": "function solution(s) {\n var answer = '';\n \n if (s.length % 2 == 0 ) { // 짝수일 경우,\n answer = s[s.length / 2 - 1] + s[s.length / 2];\n } else {\n answer = s[parseInt(s.length / 2)]; // 홀수일 경우\n }\n return answer;\n}", "probId": "12903" }, { - "id": "j9VtXOQYb17EZa6H0aSeQ", - "author": "codeisneverodd", - "code": "function solution(board) {\n for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능\n for (let col = 0; col < board[0].length; col++) {\n if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined)))\n board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1;\n }\n }\n return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대\n}", - "probId": "12905" - }, - { - "id": "I5ZxKEcbmdFEJAmN0UkzH", + "id": "tplZVPK_PKF-XuBUl5Eq-", "author": "codeisneverodd", - "code": "function solution(arr) {\n var answer = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다.\n answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null;\n }\n return answer;\n}\n\n", + "code": "function solution(arr) {\n var answer = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다.\n answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null;\n }\n return answer;\n}", "probId": "12906" }, { - "id": "FdwY-HirCCfK-sU1VdR8c", + "id": "GzhFem1SEpbyrlwaIwQkw", "author": "chaerin-dev", - "code": "function solution(arr) {\n // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고,\n // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용\n // 첫 번째 요소의 경우 undefined와 비교\n return arr.filter((item, index) => item !== arr[index - 1]);\n}\n\n", + "code": "function solution(arr) {\n // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고,\n // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용\n // 첫 번째 요소의 경우 undefined와 비교\n return arr.filter((item, index) => item !== arr[index - 1]);\n}", "probId": "12906" }, { - "id": "ES5UGVvvysqmy2ELpnWNE", + "id": "sSuxksrH_HTsCFC99QbVD", "author": "prove-ability", - "code": "function solution(arr) {\n let answer = [];\n // 이중 배열을 사용해서 포인터?를 두 개를 사용한다\n for (let i = 0, len = arr.length - 1; i < len; i++) {\n // i 의 다음수를 비교하기 위해 j = (i + 1)\n for (let j = i + 1, len = arr.length; j < len; j++) {\n // i 와 j 번째 값이 같이 않다면\n if (arr[i] !== arr[j]) {\n answer.push(arr[i]);\n i = j - 1;\n break;\n }\n }\n }\n answer.push(arr[arr.length - 1]);\n return answer;\n}\n", + "code": "function solution(arr) {\n let answer = [];\n // 이중 배열을 사용해서 포인터?를 두 개를 사용한다\n for (let i = 0, len = arr.length - 1; i < len; i++) {\n // i 의 다음수를 비교하기 위해 j = (i + 1)\n for (let j = i + 1, len = arr.length; j < len; j++) {\n // i 와 j 번째 값이 같이 않다면\n if (arr[i] !== arr[j]) {\n answer.push(arr[i]);\n i = j - 1;\n break;\n }\n }\n }\n answer.push(arr[arr.length - 1]);\n return answer;\n}", "probId": "12906" }, { - "id": "4pc75UF-ziuj6uqrpQTvR", + "id": "Apl4xThs1U943jNGofenj", "author": "codeisneverodd", - "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((element) => {\n element % divisor === 0 ? answer.push(element) : null;\n });\n answer.length === 0 ? answer.push(-1) : null;\n answer.sort((a, b) => a - b);\n return answer;\n}\n\n//정답 3. chaerin-dev\nfunction solution(arr, divisor) {\n let answer = [];\n arr.forEach((e) => {\n if (e % divisor === 0) answer.push(e);\n });\n return answer.length ? answer.sort((a, b) => a - b) : [-1];\n}\n\n", + "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((element) => {\n element % divisor === 0 ? answer.push(element) : null;\n });\n answer.length === 0 ? answer.push(-1) : null;\n answer.sort((a, b) => a - b);\n return answer;\n}", + "probId": "12910" + }, + { + "id": "wQ0wLhdnBhT5nV-HrUOG6", + "author": "dev", + "code": "function solution(arr, divisor) {\n let answer = [];\n arr.forEach((e) => {\n if (e % divisor === 0) answer.push(e);\n });\n return answer.length ? answer.sort((a, b) => a - b) : [-1];\n}", "probId": "12910" }, { - "id": "d5m0iKO2p-_Plm4pyMlnZ", + "id": "9gBj_SQybGqNPFUgPgwAL", "author": "prove-ailbity", - "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((v) => v % divisor === 0 && answer.push(v))\n return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);\n}\n", + "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((v) => v % divisor === 0 && answer.push(v))\n return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);\n}", "probId": "12910" }, { - "id": "39d91zAf4hYS4In40aqYF", + "id": "wBB0LgxWB13kFvcb7a0bn", "author": "codeisneverodd", - "code": "function solution(n) {\n let answer = n;\n const nCountOne = n.toString(2).match(/1/g).length\n while (true) {\n answer++\n if (nCountOne === (answer).toString(2).match(/1/g).length) break\n }\n return answer;\n}\n\n", - "probId": "12911" + "code": "function solution(n) {\n\n let answer = 0;\n for (let divisor = n - 1; divisor >= 2; divisor--) {\n if (n % divisor === 1) answer = divisor;\n }\n return answer;\n}", + "probId": "87389" + }, + { + "id": "-3DC0G3b7HQlRUoXI1xS4", + "author": "prove-ability", + "code": "function solution(n) {\n var answer = 0;\n let i = 0;\n while(true) {\n if(n % i === 1) {\n answer = i;\n break;\n }\n i++;\n }\n return answer;\n}", + "probId": "87389" + }, + { + "id": "eNmzI_I9Cm2Zosmx6ry0u", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = 0;\n for (let i=1; i {\n return str.split('').reduce((sum, currentChar) =>\n currentChar === '1' ? sum += 1 : sum, 0)\n}\n\n", - "probId": "12911" + "code": "function solution(a, b) {\n return a.reduce((x, y, i) => x + y * b[i], 0);\n}", + "probId": "70128" + }, + { + "id": "3TpNIAgLL-5u6NTCVTVPt", + "author": "yongchanson", + "code": "function solution(a, b) {\n var answer = 0;\n\n for (i = 0; i < a.length; i++) {\n answer += a[i] * b[i];\n }\n return answer;\n}", + "probId": "70128" }, { - "id": "21WFWM06pmnGv7fa78J6k", + "id": "7FaF84IBRAP5M6el6xMzE", "author": "prove-ability", - "code": "function solution(n) {\n let i = n;\n n = n.toString(2).match(/1/g).length;\n while(true) {\n i++;\n const value = i.toString(2).match(/1/g).length;\n if(n === value) return i;\n }\n}\n\n//정답 4 = ryan-dia\nfunction solution(n) {\n const count = (num) => num.toString(2).match(/1/g).length;\n for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i\n}\n", - "probId": "12911" + "code": "function solution(a, b) {\n var answer = 0;\n\n for (let i = 0, len = a.length; i < len; i++) {\n answer += a[i] * b[i];\n }\n\n return answer;\n}", + "probId": "70128" }, { - "id": "LOoGANkGVcczTUl7-HtO6", + "id": "H1wPpp1YCjQYNFtS4N5p6", + "author": "jaewon1676", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i=0; i acc + e * b[i], 0);\n}", + "probId": "70128" + }, + { + "id": "u1LRslWaD35sQvv9sq4Ix", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const answer = [];\n for (let i = 0; i < numbers.length; i++) {\n for (let j = i + 1; j < numbers.length; j++) {\n answer.push(numbers[i] + numbers[j]);\n }\n }\n return [...new Set(answer)].sort((a, b) => a - b);\n}", + "probId": "68644" }, { - "id": "9nEMYv3TDugN7VoyrNoOX", + "id": "ddHM-zBFEziRa-cT5KCbU", "author": "prove-ability", - "code": "function solution(a, b) {\n let answer = 0;\n for(let i = Math.min(a, b), len = Math.max(a, b); i <= len; i++) {\n answer += i;\n }\n return answer;\n}\n\n", + "code": "function solution(numbers) {\n const answer = [];\n \n for(let i = 0, len = numbers.length; i < len; i++) {\n for(let j = i + 1, len = numbers.length; j < len; j++) {\n if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j])\n }\n }\n \n return answer.sort((a, b) => a - b);\n}", + "probId": "68644" + }, + { + "id": "cH427BdoJegcnYsf3edFD", + "author": "codeisneverodd", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}", + "probId": "12912" + }, + { + "id": "rnopZ1is74uXF9AaqtqaK", + "author": "chaerin-dev", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}", "probId": "12912" }, { - "id": "UxZg_9AgjoElAbOGpZ5tv", + "id": "nESVaMUpCWlxN7XdDjjjE", "author": "prove-ability", - "code": "function solution(a, b) {\n return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0);\n}\n\n", + "code": "function solution(a, b) {\n return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0);\n}", "probId": "12912" }, { - "id": "2NDSgNsjO-Luuq1qR2iPD", + "id": "bV_2v8ALJkaaeWq2X27Py", "author": "jaewon1676", - "code": "function solution(a, b) {\n if (b < a){ // b가 a보다 큰 수가 되도록 해준다.\n let c = b\n b = a\n a = c\n }\n let sum = 0; // 합을 구할 변수\n for (let i=a; i<=b; i++){\n sum += i\n }\n return sum;\n}\n", + "code": "function solution(a, b) {\n if (b < a){ // b가 a보다 큰 수가 되도록 해준다.\n let c = b\n b = a\n a = c\n }\n let sum = 0; // 합을 구할 변수\n for (let i=a; i<=b; i++){\n sum += i\n }\n return sum;\n}", "probId": "12912" }, { - "id": "_hRkfHE52vLc8DxOq3twk", + "id": "vefgEjNOZgxFWk82k8HSb", + "author": "codeisneverodd", + "code": "function solution(lottos, win_nums) {\n // 0이 없는 경우 > 최저 순위 == 최고 순위\n // 0이 있는 경우 > 모두 0인경우 > 1위\n // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위\n // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함.\n // 순위는 7 - hit\n // 최종적으로 7위인 경우 6위로 변경\n var answer = [];\n if (lottos.indexOf(0) === -1) {\n answer[0] = answer[1] = 7 - hit(lottos, win_nums);\n } else {\n const zeroCount = lottos.length - [...new Set(lottos)].length + 1;\n answer[1] = 7 - hit(lottos, win_nums);\n zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount);\n }\n for (let i = 0; i < 2; i++) {\n answer[i] >= 7 ? (answer[i] = 6) : null;\n }\n return answer;\n}\n\nfunction hit(lottos, win_nums) {\n let result = 0;\n lottos.forEach((element) => {\n win_nums.indexOf(element) === -1 ? null : (result += 1);\n });\n return result;\n}", + "probId": "77484" + }, + { + "id": "9dpy1EpfSz9k1iArBgumY", "author": "jaewon1676", - "code": "function solution(land) {\n var answer = 0;\n \n for (i = 1; i < land.length; i++){\n land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3]));\n land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3]));\n land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3]));\n land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2]))\n }\n answer = land[land.length - 1]\n return Math.max(...answer)\n}\n/* 풀이 과정\n1. land의 행만큼 반복문을 돌린다.\n2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다.\n3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/\n\n", - "probId": "12913" + "code": "function solution(lottos, win_nums) {\n var answer = [];\n let max = 7;\n let min = 7;\n console.log(lottos);\n console.log(win_nums);\n for (let i = 0; i < 6; i++) {\n if (lottos.includes(win_nums[i])) {\n max--;\n }\n }\n min = max;\n for (let i = 0; i < 6; i++) {\n if (lottos[i] == 0) min--;\n }\n if (max == 7) max = 6;\n if (min == 7) min = 6;\n answer = [min, max];\n return answer;\n}", + "probId": "77484" }, { - "id": "9TV7ExZ-AhNg5Z40Fuxwp", - "author": "codeisneverodd", - "code": "function solution(land) {\n for (let rowIndex = 1; rowIndex < land.length; rowIndex++) {\n for (let colIndex = 0; colIndex < land[0].length; colIndex++) {\n land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1))\n }\n }\n return Math.max(...land[land.length - 1])\n}\n", - "probId": "12913" + "id": "vxbGIckHl0SSCwsKi5pe1", + "author": "yongchanson", + "code": "function solution(lottos, win_nums) {\n //최고당첨개수 : maxPoint + basicPoint\n //최저당첨개수 : basicPoint\n\n let basicPoint = 0;\n let maxPoint = 0;\n let answer = [];\n\n lottos.forEach(function (lottos_item) {\n win_nums.forEach(function (win_nums_item) {\n if (lottos_item == win_nums_item) {\n basicPoint++;\n }\n });\n });\n\n lottos.forEach(function (item) {\n if (item == 0) {\n maxPoint++;\n }\n });\n\n maxPoint + basicPoint >= 2\n ? answer.push(7 - maxPoint - basicPoint)\n : answer.push(6);\n basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6);\n\n return answer;\n}", + "probId": "77484" }, { - "id": "YYDMgjmNjLlPoihYmbCB6", - "author": "codeisneverodd", - "code": "function solution(n) {\n if (n < 2) return 1;\n const count = [0, 1, 2, ...Array(n - 2).fill(0)];\n count.forEach((_, i) => {\n if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567;\n });\n return count[n];\n}\n//재귀를 사용하면 콜스택 오버플로우가 발생합니다.\n", - "probId": "12914" + "id": "EyheSzDORX6Wu8Bei-nL0", + "author": "prove-ability", + "code": "function solution(lottos, win_nums) {\n // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화\n let winCount = 0;\n let zeroCount = 0;\n // 내 로또 번호 하니씩 접근\n lottos.forEach((num) => {\n // 번호가 0이 아니고 당첨 번호라면\n if (num !== 0 && win_nums.includes(num)) {\n winCount++;\n // 번호가 0이라면\n } else if (num === 0) {\n zeroCount++;\n }\n });\n // 일치한 수와 등수는 반비례하기 때문에 빼기 7\n // 이때 등수를 벗어나면 낙첨(6) 으로 고정\n let max = 7 - (winCount + zeroCount);\n if (max > 5) max = 6;\n let min = 7 - winCount;\n if (min > 5) min = 6;\n\n return [max, min];\n}", + "probId": "77484" }, { - "id": "j7a3PBejKSlnOubq2gm2N", + "id": "qjNmmEmjC9keh1q2piy0p", "author": "chaerin-dev", - "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n // 인덱스 n번째 글자를 기준으로 오름차순 정렬\n if (a[n] > b[n]) return 1;\n else if (a[n] < b[n]) return -1;\n // 인덱스 n번째 글자가 같으면 사전순 정렬\n else return a > b ? 1 : -1;\n });\n}\n\n", - "probId": "12915" + "code": "function solution(lottos, win_nums) {\n let zeroCount = 0;\n let winCount = 0;\n lottos.forEach((item) => {\n if (item === 0) zeroCount++;\n else if (win_nums.includes(item)) winCount++;\n });\n let maxRank = Math.min(7 - (winCount + zeroCount), 6);\n let minRank = Math.min(7 - winCount, 6);\n return [maxRank, minRank];\n}", + "probId": "77484" + }, + { + "id": "jtXAf9CXgcBR0eVal_VcX", + "author": "codeisneverodd", + "code": "function solution(answers) {\n const answer = [];\n const firstPattern = [1, 2, 3, 4, 5];\n const firstPLength = firstPattern.length;\n const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5];\n const secondPLength = secondPattern.length;\n const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n const thirdLength = thirdPattern.length;\n let correctCount = [0, 0, 0];\n\n for (let i = 0, len = answers.length; i < len; i++) {\n if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1;\n if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1;\n if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1;\n }\n\n const maxScore = Math.max(...correctCount);\n for (let i = 0; i < 3; i++) {\n if (correctCount[i] === maxScore) answer.push(i + 1);\n }\n\n return answer;\n}\n\n// 완벽한 정답이 아닙니다.", + "probId": "42840" }, { - "id": "p5BrCQ4gCQt1NTAC83QwM", + "id": "hUEeeo5yGROmIsN_jAgdO", "author": "prove-ability", - "code": "function solution(strings, n) {\n // 정렬\n strings.sort((a, b) => {\n // n번째 클자가 같다면 사전순\n if(a[n].charCodeAt() === b[n].charCodeAt()) {\n return a > b ? 1 : -1;\n } else return a[n].charCodeAt() - b[n].charCodeAt();\n });\n \n return strings;\n}\n", - "probId": "12915" + "code": "function solution(answers) {\n let result = [];\n\n let players = {\n 1: {\n pattern: [1, 2, 3, 4, 5],\n count: 0,\n },\n 2: {\n pattern: [2, 1, 2, 3, 2, 4, 2, 5],\n count: 0,\n },\n 3: {\n pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],\n count: 0,\n },\n };\n let max = 0;\n answers.forEach((answer, index) => {\n for (let [key, { pattern }] of Object.entries(players)) {\n // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가\n if (pattern[index % pattern.length] === answer) {\n players[key].count++;\n // 제일 높은 count 구하기\n if (max < players[key].count) max = players[key].count;\n }\n }\n });\n // players 중에 count 가 max 와 값이 같다면 result 추가\n for (let [key, { count }] of Object.entries(players)) {\n if (count === max) result.push(parseInt(key, 10));\n }\n\n return result;\n}", + "probId": "42840" }, { - "id": "o5Mkx3uUX6wV-xVkdyl55", + "id": "7ocFw-Mfowyrv60oOyoRL", "author": "yongchanson", - "code": "function solution(s) {\n p = s.toLowerCase().split(\"p\").length;\n y = s.toLowerCase().split(\"y\").length;\n\n return p == y ? true : false;\n}\n\n", + "code": "function solution(answers) {\n let score = [];\n let answer = [];\n let a1 = [1, 2, 3, 4, 5];\n let a2 = [2, 1, 2, 3, 2, 4, 2, 5];\n let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n\n score.push(answers.filter((a, i) => a === a1[i % a1.length]).length);\n score.push(answers.filter((a, i) => a === a2[i % a2.length]).length);\n score.push(answers.filter((a, i) => a === a3[i % a3.length]).length);\n\n for (let i = 0; i < score.length; i++) {\n const max = Math.max(...score);\n if (score[i] === max) {\n answer.push(i + 1);\n }\n }\n\n return answer;\n}", + "probId": "42840" + }, + { + "id": "DsDsHG8XG_QE_c8oxKz0q", + "author": "jaewon1676", + "code": "function solution(answers) {\n let arr1 = [1,2,3,4,5]\n let arr2 = [2,1,2,3,2,4,2,5]\n let arr3 = [3,3,1,1,2,2,4,4,5,5]\n \n let score = [0, 0, 0]\n for (let i=0; i {\n for (let j = 0; j < pattern.length; j++) {\n const patternLength = pattern[j].length;\n if (answer === pattern[j][i % patternLength]) scores[j]++;\n }\n });\n\n const answer = [];\n const maxScore = Math.max(...scores);\n scores.forEach((score, i) => {\n if (score === maxScore) answer.push(i + 1);\n });\n return answer;\n}", + "probId": "42840" + }, + { + "id": "6Xvm3DRqhWlMmXu7pxkMi", + "author": "codeisneverodd", + "code": "function solution(s) {\n const countP = [...s.matchAll(/p/gi)].length;\n const countY = [...s.matchAll(/y/gi)].length;\n return countP === countY;\n}", + "probId": "12916" + }, + { + "id": "gbuN_FBdxM9d3v0pl7f72", + "author": "yongchanson", + "code": "function solution(s) {\n p = s.toLowerCase().split(\"p\").length;\n y = s.toLowerCase().split(\"y\").length;\n\n return p == y ? true : false;\n}", "probId": "12916" }, { - "id": "kWZCFdLI6QiLIL9q_tzIg", + "id": "Wj5GvftUtCNvjbDPeRwyW", "author": "chaerin-dev", - "code": "function solution(s) {\n let pCount = s.split(/p/i).length - 1;\n let yCount = s.split(/y/i).length - 1;\n return pCount === yCount;\n}\n// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다.\n// Ex. \"ababb\".split(\"a\") 의 결과는 [\"\", \"b\", \"bb\"]\n// => 즉, \"a\"의 갯수는 3에서 1을 뺀 2\n\n", + "code": "function solution(s) {\n let pCount = s.split(/p/i).length - 1;\n let yCount = s.split(/y/i).length - 1;\n return pCount === yCount;\n}\n// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다.\n// Ex. \"ababb\".split(\"a\") 의 결과는 [\"\", \"b\", \"bb\"]\n// => 즉, \"a\"의 갯수는 3에서 1을 뺀 2", "probId": "12916" }, { - "id": "EJv3hqzs7k3muf9cscFwz", + "id": "2lh7YnCfgFLvYbiPaXMPY", "author": "prove-ability", "code": "function solution(s){\n // 배열로 변환 \n s = s.split(\"\");\n // filter 를 사용해 갯수 추출\n const pCount = s.filter((v) => v === \"p\" || v === \"P\").length;\n const yCount = s.filter((v) => v === \"y\" || v === \"Y\").length;\n return pCount === yCount;\n}", "probId": "12916" }, { - "id": "cH3x4lY5oOcnsKQCMlYyK", + "id": "SuH9zb3QseKwsBlIUvbeb", + "author": "codeisneverodd", + "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n if (a[n] < b[n]) return -1;\n if (a[n] > b[n]) return 1;\n if (a[n] === b[n]) return a < b ? -1 : 1;\n return 0;\n });\n}", + "probId": "12915" + }, + { + "id": "p0UrQpOrzjxTbpCrToefp", "author": "chaerin-dev", - "code": "function solution(s) {\n // 문자열 -> 배열 -> 정렬 -> 순서뒤집기 -> 문자열\n return s.split(\"\").sort().reverse().join(\"\");\n}\n\n", + "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n // 인덱스 n번째 글자를 기준으로 오름차순 정렬\n if (a[n] > b[n]) return 1;\n else if (a[n] < b[n]) return -1;\n // 인덱스 n번째 글자가 같으면 사전순 정렬\n else return a > b ? 1 : -1;\n });\n}", + "probId": "12915" + }, + { + "id": "CZtoJ5hGw6yD6qmcOAxAh", + "author": "prove-ability", + "code": "function solution(strings, n) {\n // 정렬\n strings.sort((a, b) => {\n // n번째 클자가 같다면 사전순\n if(a[n].charCodeAt() === b[n].charCodeAt()) {\n return a > b ? 1 : -1;\n } else return a[n].charCodeAt() - b[n].charCodeAt();\n });\n \n return strings;\n}", + "probId": "12915" + }, + { + "id": "6PBSwqM-7Lxp2uzW3y5Rm", + "author": "codeisneverodd", + "code": "function solution(s) {\n return s\n .split(\"\")\n .sort((a, b) => {\n if (a < b) return 1;\n if (a > b) return -1;\n return 0;\n })\n .join(\"\");\n}", "probId": "12917" }, { - "id": "y1WT1E8MPRPG9L3C6PnLt", + "id": "POlRT_d81WKoMvkOpZLwE", "author": "chaerin-dev", - "code": "function solution(s) {\n return s.split(\"\").sort((a, b) => (a < b ? 1 : -1)).join(\"\");\n}\n\n\n", + "code": "function solution(s) {\n return s.split(\"\").sort((a, b) => (a < b ? 1 : -1)).join(\"\");\n}", "probId": "12917" }, { - "id": "FG22myf-zIk4c0Bdnd78t", + "id": "Iht2iJ1-uF8rNDkfvgqA5", "author": "prove-ability", - "code": "function solution(s) {\n return s.split(\"\").sort().reverse().join(\"\")\n}\n\n", + "code": "function solution(s) {\n return s.split(\"\").sort().reverse().join(\"\")\n}", "probId": "12917" }, { - "id": "ttkZCDLrK7QSwuWKxKyD_", + "id": "cVAON9iE8SNoeIa0AicHr", "author": "jaewon1676", - "code": "function solution(s) {\n return s.split('').sort().reverse().join('')\n}\n// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다.\n// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다.\n// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다.\n\n", + "code": "function solution(s) {\n return s.split('').sort().reverse().join('')\n}\n// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다.\n// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다.\n// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다.", "probId": "12917" }, { - "id": "004AV00mEeZyKFIaoWGe7", + "id": "wOdMGpOtd-sWso4N0zJgS", + "author": "codeisneverodd", + "code": "function solution(s) {\n return s.search(/\\D/g) < 0 && (s.length === 4 || s.length === 6);\n}", + "probId": "12918" + }, + { + "id": "BC2iVdtTid2DmUfOWJ_Wx", "author": "yongchanson", - "code": "function solution(s) {\n let parseInts = parseInt(s);\n if (s.length == 6 || s.length == 4) {\n if (s == parseInts) {\n return true;\n }\n }\n\n return false;\n}\n\n", + "code": "function solution(s) {\n let parseInts = parseInt(s);\n if (s.length == 6 || s.length == 4) {\n if (s == parseInts) {\n return true;\n }\n }\n\n return false;\n}", "probId": "12918" }, { - "id": "NiF8yX6_dsxoVap-Lj0o6", + "id": "BLMS81Kd_3ESK6sJRDBv6", "author": "prove-ability", - "code": "function solution(s) {\n var answer = true;\n // 문자열 s의 길이가 4 혹은 6이고\n if (s.length === 4 || s.length === 6) {\n for (let i = 0, len = s.length; i < len; i++) {\n // 숫자로만 구성돼있는지 확인\n if (!Number.isInteger(parseInt(s[i], 10))) return false;\n }\n // 문자열 s의 길이가 4 혹은 6 가 아니라면 false\n } else return false;\n\n return answer;\n}\n\n", + "code": "function solution(s) {\n var answer = true;\n // 문자열 s의 길이가 4 혹은 6이고\n if (s.length === 4 || s.length === 6) {\n for (let i = 0, len = s.length; i < len; i++) {\n // 숫자로만 구성돼있는지 확인\n if (!Number.isInteger(parseInt(s[i], 10))) return false;\n }\n // 문자열 s의 길이가 4 혹은 6 가 아니라면 false\n } else return false;\n\n return answer;\n}", "probId": "12918" }, { - "id": "mTFTQMZbbgLnUSO0vR0LB", + "id": "KdFwqPsbkbeC2sry1YlLP", "author": "chaerin-dev", - "code": "function solution(s) {\n // 길이가 4 혹은 6이 아니면 false 반환\n if (s.length !== 4 && s.length !== 6) return false;\n // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환\n for (let i = 0; i < s.length; i++) {\n if (isNaN(Number(s[i]))) return false;\n }\n // 위의 모든 조건에 포함되지 않으면\n // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환\n return true;\n}\n\n", + "code": "function solution(s) {\n // 길이가 4 혹은 6이 아니면 false 반환\n if (s.length !== 4 && s.length !== 6) return false;\n // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환\n for (let i = 0; i < s.length; i++) {\n if (isNaN(Number(s[i]))) return false;\n }\n // 위의 모든 조건에 포함되지 않으면\n // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환\n return true;\n}", "probId": "12918" }, { - "id": "K8wga-lhgrDahuXfs6tMx", + "id": "8bAMLCGHJsEdyy4w-3wqv", "author": "soulhn", - "code": "function solution(s) {\n if (s.length !== 4 && s.length !== 6) return false;\n return !s.split(\"\").some((i) => isNaN(parseInt(i, 10))); \n //early return 제외사항 먼저 처리\n //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환\n}\n", + "code": "function solution(s) {\n if (s.length !== 4 && s.length !== 6) return false;\n return !s.split(\"\").some((i) => isNaN(parseInt(i, 10))); \n //early return 제외사항 먼저 처리\n //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환\n}", "probId": "12918" }, { - "id": "L8JTn3yXKMSm8miXw4DOw", + "id": "-D40QnsIG0MSdP2ddCzTM", + "author": "codeisneverodd", + "code": "function solution(s) {\n return parseInt(s);\n}", + "probId": "12925" + }, + { + "id": "M_pnjlqwOE1iXMlP8Sana", "author": "chaerin-dev", - "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}\n\n", - "probId": "12919" + "code": "function solution(s) {\n return Number(s);\n}", + "probId": "12925" }, { - "id": "oOfsuWXBBpqCQxM78XnOs", + "id": "dcT3fiZrYG9B2fTtKBoYS", "author": "prove-ability", - "code": "function solution(seoul) {\n return `김서방은 ${seoul.findIndex(v => v === \"Kim\")}에 있다`;\n}\n\n", - "probId": "12919" + "code": "function solution(s) {\n return parseInt(s, 10);\n}", + "probId": "12925" }, { - "id": "DPLqzm0nmTRp63AN_Sb7m", + "id": "CUOqDr4YB132Z2jleOMM3", "author": "jaewon1676", - "code": "function solution(seoul) {\n var answer = '';\n for (let i=0; i<1000; i++){\n if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다';\n }\n return 1;\n}", - "probId": "12919" + "code": "function solution(s) {\n return parseInt(s);\n}", + "probId": "12925" }, { - "id": "G7cvzFTrzs0bj15pYligP", - "author": "chaerin-dev", - "code": "function solution(n) {\n // \"수박\"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환\n return '수박'.repeat(n).substr(0, n);\n}\n\n", - "probId": "12922" + "id": "YkiXJ0xsbRd1Coc5zUSFB", + "author": "codeisneverodd", + "code": "function solution(price, money, count) {\n let totalCost = 0;\n for (let i = 1; i <= count; i++) totalCost += price * i;\n return totalCost <= money ? 0 : totalCost - money;\n}", + "probId": "82612" }, { - "id": "zqAY3Gp-1N7oyzlsYCPjL", + "id": "uezZoEz0m8hdOIR3BleHq", + "author": "yongchanson", + "code": "function solution(price, money, count) {\n var answer = 0;\n let sum = price;\n\n for (i = 2; i <= count; i++) {\n sum += price * i;\n }\n\n if (sum <= money) {\n answer = 0;\n } else {\n answer = sum - money;\n }\n return answer;\n}", + "probId": "82612" + }, + { + "id": "jPwA0bbofjNFRXr-RZahv", "author": "jaewon1676", - "code": "function solution(n) {\n let str = '';\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + '수') : (str = str + '박');\n }\n return str;\n}\n\n", - "probId": "12922" + "code": "function solution(price, money, count) {\n let sum_price = 0; // 놀이기구의 이용료의 합\n for (let i = 1; i <= count; i++) {\n sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다.\n }\n if (sum_price <= money) {\n return 0;\n }\n return sum_price - money;\n}", + "probId": "82612" }, { - "id": "N6X9MWUSgNmegIDOhUevI", + "id": "wgyHIm0C7_YgaxjJ_BNSm", "author": "prove-ability", - "code": "function solution(n) {\n let answer = '';\n answer = '수박'.repeat(n / 2);\n if (n % 2 !== 0) answer += '수';\n return answer;\n}\n\n", - "probId": "12922" + "code": "function solution(price, money, count) {\n let sum = 0;\n for(let i = 1; i <= count; i++) {\n sum += (i * price)\n }\n \n return sum < money ? 0 : sum - money;\n}", + "probId": "82612" }, { - "id": "YagOuPc_IZo7NIANvlXhq", - "author": "yongchanson", - "code": "function solution(n) {\n return '수박'.repeat(n / 2) + '수'.repeat(n % 2);\n}\n", - "probId": "12922" + "id": "15io-kgHZyB9UaD1R45X3", + "author": "chaerin-dev", + "code": "function solution(price, money, count) {\n let totalPrice = 0;\n for(let i=1; i<=count; i++){\n totalPrice += i * price;\n }\n return money > totalPrice ? 0 : totalPrice-money;\n}", + "probId": "82612" }, { - "id": "vEhAuAGCp1b9TM3T5bZBl", - "author": "iHoHyeon", - "code": "function solution(begin, end) {\n return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx));\n // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다.\n}\n \nconst calc = (number) => {\n if (number === 1) return 0;\n // 1번째 위치는 무조건 0블록이 위치\n\n for (let i = 2; i <= Math.sqrt(number); i++) {\n if (number % i === 0 && number / i <= 10_000_000) return number / i;\n // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외\n }\n\n return 1;\n};\n\n/*\n 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는\n 시간 / 공간 복잡도가 급상승\n\n -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자\n \n -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다.\n\n -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다.\n\n + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다.\n*/\n", - "probId": "12923" + "id": "MAqIJ3oD3esA37-hZPA7q", + "author": "codeisneverodd", + "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}", + "probId": "12919" }, { - "id": "jOTBjPXWcsCfxKjaYxQUp", - "author": "codeisneverodd", - "code": "function solution(n) { //수학적 풀이는 별도로 하지 않았습니다.\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n let sum = 0\n for (let j = i; j <= n; j++) {\n sum += j\n if (sum >= n) {\n if (sum === n) answer++\n break\n }\n }\n }\n return answer;\n}\n\n", - "probId": "12924" + "id": "1P_8CD3TNq6Oyz3OfshfI", + "author": "chaerin-dev", + "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}", + "probId": "12919" }, { - "id": "5sb3HowTsAAsS_2_SG8C2", + "id": "iPAbSgoCkYxzQbOgEYUbE", "author": "prove-ability", - "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n let sum = 0;\n for(let j = i; j <= n; j++) {\n sum += j;\n if(sum > n) break;\n if(n === sum) {\n answer++;\n break;\n }\n }\n }\n return answer;\n}\n\n", - "probId": "12924" + "code": "function solution(seoul) {\n return `김서방은 ${seoul.findIndex(v => v === \"Kim\")}에 있다`;\n}", + "probId": "12919" }, { - "id": "hXV1uNm6UmonW4i_9XWIy", - "author": "yongchanson", - "code": "function solution(n) {\n /*\n 정답 = n의 홀수 약수의 개수\n 15의 홀수 약수 : 1,3,5,15\n 1+2+3+4+5=15 (중간값 3)\n 4+5+6=15 (중간값 5)\n 7+8=15 (연속된 값)\n 15=15 (15)\n */\n let result = 0;\n\n for (let i = 1; i <= n; i++) {\n if (n % i == 0 && i % 2 == 1) result++;\n }\n return result;\n}\n", - "probId": "12924" + "id": "9gGGQN_CRMDg_SQ5OviA1", + "author": "jaewon1676", + "code": "function solution(seoul) {\n var answer = '';\n for (let i=0; i<1000; i++){\n if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다';\n }\n return 1;\n}", + "probId": "12919" }, { - "id": "FJvsO4-e0Joa2Tks6a1-X", - "author": "chaerin-dev", - "code": "function solution(s) {\n return Number(s);\n}\n\n", - "probId": "12925" + "id": "8NK6j6prhKmavr0TqA-Hz", + "author": "ssi02014", + "code": "function solution(survey, choices) {\n const points = [3, 2, 1, 0, 1, 2, 3];\n const pointBoard = {\n R: 0,\n T: 0,\n C: 0,\n F: 0,\n J: 0,\n M: 0,\n A: 0,\n N: 0,\n };\n let result = \"\";\n\n // 카테고리 별 점수 추가\n for (let i = 0; i < survey.length; i++) {\n const categories = survey[i];\n\n if (choices[i] < 4) {\n pointBoard[categories[0]] += points[choices[i] - 1];\n } else if (choices[i] > 4) {\n pointBoard[categories[1]] += points[choices[i] - 1];\n }\n }\n\n const pointBoardEntries = Object.entries(pointBoard);\n\n // 지표에 맞게 결과 값 도출\n for (let i = 0; i < pointBoardEntries.length; i += 2) {\n const [curCategory, curValue] = pointBoardEntries[i];\n const [nextCategory, nextValue] = pointBoardEntries[i + 1];\n\n if (curValue < nextValue) {\n result += nextCategory;\n } else {\n result += curCategory;\n }\n }\n\n return result;\n}", + "probId": "118666" }, { - "id": "SGLRODXkXIQVqcw8l1Z2W", - "author": "prove-ability", - "code": "function solution(s) {\n return parseInt(s, 10);\n}\n\n\n", - "probId": "12925" + "id": "gdUf_Jv4tbVVoSAxLASPS", + "author": "codeisneverodd", + "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {});\n survey.forEach((key, i) => {\n const point = points[choices[i] - 1];\n Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point);\n });\n return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join('');\n}", + "probId": "118666" }, { - "id": "79mXSFGf6TR38WTa8S8yJ", - "author": "jaewon1676", - "code": "function solution(s) {\n return parseInt(s);\n}\n", - "probId": "12925" + "id": "SNdoQ8Qv9dEeLfLK-anbF", + "author": "codisneverodd", + "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = survey.reduce((a, key, i) => {\n if (types.includes(key)) {\n a[key] = (a[key] || 0) + points[choices[i] - 1];\n return a;\n }\n const rKey = key[1] + key[0];\n a[rKey] = (a[rKey] || 0) - points[choices[i] - 1];\n return a;\n }, {});\n return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join('');\n}", + "probId": "118666" }, { - "id": "tR7xq9YVzWPwNVkoFYo4z", - "author": "jaewon1676", - "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((el) => {\n if (el == \" \") return el;\n let tmp = el.charCodeAt();\n return el.toLowerCase().charCodeAt() + n > 122\n ? String.fromCharCode(tmp + n - 26)\n : String.fromCharCode(tmp + n);\n })\n .join(\"\");\n}\n\n/* 문자열 -> 아스키코드 : s.charCodeAt()\n아스키코드 -> 문자열 : String.fromCharCode() \n풀이과정 \n1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다.\n2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. \n 대문자 아스키코드는 65가 A, 90이 Z이다.\n 소문자 아스키코드는 97이 a, 122가 z이다.\n3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고\n 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다.\n*/\n\n", - "probId": "12926" + "id": "XyOCnoh_VlUDGSpg85iyg", + "author": "codeisneverodd", + "code": "function solution(nums) {\n let answer = 0;\n const length = nums.length;\n for (let i = 0; i < length; i++) {\n for (let j = i + 1; j < length; j++) {\n for (let k = j + 1; k < length; k++) {\n const sum = nums[i] + nums[j] + nums[k];\n if (isPrime(sum)) answer += 1;\n }\n }\n }\n\n return answer;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}", + "probId": "12977" }, { - "id": "c7VpakEqr5buM11x3s75J", - "author": "chaerin-dev", - "code": "function solution(s, n) {\n let result = \"\";\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") result += \" \";\n else {\n let charCode = s.charCodeAt(i);\n // 원래 대문자였는데\n if (charCode <= 90) {\n charCode += n;\n // 변경 후 아스키코드값이 90보다 크다면\n if (charCode > 90) charCode -= 26;\n }\n // 원래 소문자였는데\n else {\n charCode += n;\n // 변경 후 아스키코드값이 122보다 크다면\n if (charCode > 122) charCode -= 26;\n }\n result += String.fromCharCode(charCode);\n }\n }\n return result;\n}\n\n\n", - "probId": "12926" + "id": "0Y_IqC7PEiVWAJcr2duZH", + "author": "jaewon1676", + "code": "// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript\n\nfunction solution(nums) {\n let len = nums.length, answer = 0;\n\n for (let i = 0; i < len - 2; i++) {\n for (let j = i + 1; j < len - 1; j++) {\n for (let k = j + 1; k < len; k++) {\n if (isPrime(nums[i] + nums[j] + nums[k])) {\n answer++;\n }\n }\n }\n }\n return answer;\n}\n\nconst isPrime = (n) => {\n for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회\n if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다.\n return false;\n }\n }\n return true;\n}\n// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다.", + "probId": "12977" }, { - "id": "f3dvHuJpacjdHNuujpQgW", - "author": "prove-ability", - "code": "function solution(s, n) {\n var answer = '';\n for(let i = 0, len = s.length; i < len; i++) {\n if(s[i] === \" \") {\n answer += \" \";\n continue;\n }\n let index = s[i].charCodeAt();\n // 65 - 90\n // 97 - 122\n if(index <= 90 && index + n > 90) index -= 26; \n else if (index + n > 122) index -= 26;\n \n answer += String.fromCharCode(index + n)\n }\n return answer;\n}\n\n", - "probId": "12926" + "id": "AZXA7k-ElkZZLut4wG3KN", + "author": "chaerin-dev", + "code": "// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수\nconst getCombinations = function (arr, selectNumber) {\n const results = [];\n if (selectNumber === 1) return arr.map((el) => [el]);\n arr.forEach((fixed, index, origin) => {\n const rest = origin.slice(index + 1);\n const combinations = getCombinations(rest, selectNumber - 1);\n const attached = combinations.map((el) => [fixed, ...el]);\n results.push(...attached);\n });\n return results;\n};\n\n// num이 소수인지 여부를 반환하는 함수\nfunction isPrime(num) {\n if (num === 1) return false;\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(nums) {\n const combinationResult = getCombinations(nums, 3);\n let answer = 0;\n combinationResult.forEach((e) => {\n const sum = e[0] + e[1] + e[2];\n if (isPrime(sum)) answer++;\n });\n return answer;\n}", + "probId": "12977" }, { - "id": "8uj33ICqXtS5oC2VYr9Xa", - "author": "yongchanson", - "code": "function solution(n) {\n var answer = 0;\n let i;\n for (i = 1; i <= Math.sqrt(n); i++) {\n if (n % i == 0) {\n if (i * i == n) {\n //i의 제곱이 n인경우 처리\n answer += i;\n } else {\n answer += i;\n answer += n / i;\n }\n }\n }\n\n return answer;\n}\n\n", - "probId": "12928" + "id": "WdPutYJKYWwobpw3iHgTs", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n let answer = 0;\n const numArr = numbers.split(\"\");\n const permutationAll = [];\n for (let r = 1; r <= numbers.length; r++) {\n const permutationR = Permutation(numArr, r).map((arr) =>\n parseInt(arr.join(\"\"))\n );\n for (let i = 0; i < permutationR.length; i++)\n permutationAll.push(permutationR[i]);\n }\n const permutationSet = [...new Set(permutationAll)];\n for (const number of permutationSet) {\n if (isPrime(number)) answer += 1;\n }\n return answer;\n}\n\nfunction Permutation(arr, r) {\n const result = [];\n if (r === 1) return arr.map((num) => [num]);\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)];\n const permutation = Permutation(rest, r - 1);\n const attached = permutation.map((numbers) => [fixed, ...numbers]);\n result.push(...attached);\n });\n return result;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}", + "probId": "42839" }, { - "id": "H_zo_RmBDQiotfVUUeXm2", + "id": "OLNhvIEzDa8VDxOEZYrAe", "author": "chaerin-dev", - "code": "function solution(n) {\n let result = 0;\n let sqrtN = Math.sqrt(n);\n // 효율성을 위해 1부터 n의 제곱근-1까지만 순회\n for (let i = 1; i < sqrtN; i++) {\n if (n % i === 0) result += i + n / i;\n }\n // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌\n if (Number.isInteger(sqrtN)) result += sqrtN;\n return result;\n}\n\n", - "probId": "12928" + "code": "// 소수인지 판별하는 함수\nfunction isPrime(x) {\n for (let i = 2; i <= Math.sqrt(x); i++) {\n if (x % i === 0) return false;\n }\n return true;\n}\nfunction solution(n) {\n // 소수의 개수를 저장할 변수\n let answer = 0;\n // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해\n for (let i = 2; i <= n; i++) {\n // 소수이면 소수의 개수에 1 추가\n if (isPrime(i)) answer++;\n }\n return answer;\n}", + "probId": "42839" }, { - "id": "b91LAYxGJUMcZ3D5l0Snc", - "author": "jaewon1676", - "code": "function solution(n) {\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n if (n % i == 0) {\n // n으로 i를 나눴을 때, 나머지가 0이면 약수이다.\n answer += i;\n }\n }\n return answer;\n}\n\n// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다.\n// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다.\n// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다.\n\n\n", - "probId": "12928" + "id": "GjmTbgvxQwThs5ZSSlu57", + "author": "prove-ability", + "code": "// 소수 판별 로직\nfunction isPrime(n) {\n // n 제곱근 후 올림\n for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) {\n if (n % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(n) {\n let count = 0;\n // 1부터 n까지 반복적으로 접근 - i\n for(let i = 1; i <= n; i++) {\n // i 가 소수인지 확인 후 count++\n if(isPrime(i)) count++;\n }\n \n return count;\n}", + "probId": "42839" }, { - "id": "cjq9T0uje_9RbBqYXuzzd", - "author": "prove-ability", - "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n if(n % i === 0) answer += i;\n }\n return answer;\n}\n\n", - "probId": "12928" + "id": "Q1xifF9kpxsX8VQ9MO2tf", + "author": "jaewon1676", + "code": "function solution(n) {\n let arr = [];\n \n // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다.\n for(let i=2; i<=n; i++) {\n arr[i] = i;\n }\n for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다.\n if (arr[i] === 0) continue;\n \n for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다.\n arr[j] = 0;\n }\n }\n \n // filter를 이용해 0이아닌 수들의 개수를 return합니다.\n return arr.filter(v => v!==0).length;\n}", + "probId": "42839" }, { - "id": "5I_O9JdJC11CH-2KU5XMQ", - "author": "cg10036", - "code": "function solution(n) {\n const fact = n => n ? BigInt(n) * fact(n - 1) : 1n;\n return fact(n * 2) / (fact(n) * fact(n + 1));\n}\n", - "probId": "12929" + "id": "QOF52m3MtLWnpsPMNKXFq", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = '';\n for (let i = 0; i < n; i++) {\n answer += i % 2 === 0 ? '수' : '박';\n }\n return answer;\n}", + "probId": "12922" }, { - "id": "jVtc0DUhInoFpUVUb_WzY", + "id": "xOlxwtmGiP8gpAtX9Pmib", "author": "chaerin-dev", - "code": "// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..!\nfunction solution(s) {\n let result = \"\";\n let flag = true;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") {\n flag = false;\n result += s[i];\n } else if (flag) {\n result += s[i].toUpperCase();\n } else {\n result += s[i].toLowerCase();\n }\n flag = !flag;\n }\n return result;\n}\n\n", - "probId": "12930" + "code": "function solution(n) {\n // \"수박\"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환\n return '수박'.repeat(n).substr(0, n);\n}", + "probId": "12922" }, { - "id": "xFGW2_s2zBNK4y64Q9P6U", + "id": "9vmmj9sEOyC5yP6s7Zlmy", "author": "jaewon1676", - "code": "function solution(s) {\n return s\n .split(\" \")\n .map((el) =>\n el\n .split(\"\")\n .map((el, index) =>\n index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}\n\n/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ]\n \n.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 \n[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]]\n \n.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase())\n//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다!\n//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다.\n[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]]\n \n.join('') 작은 배열들을 합쳐줍니다.\n['TrY', 'HeLlO', 'WoRlD']\n \n.join(' ') 큰 배열들을 합쳐줍니다.\n\"TrY HeLlO WoRlD\"\n\n대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 \n문자열을 연습하는데 좋은 문제입니다.\n*/\n\n\n", - "probId": "12930" + "code": "function solution(n) {\n let str = '';\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + '수') : (str = str + '박');\n }\n return str;\n}", + "probId": "12922" }, { - "id": "7Lgvjev5o-vRW-cm9oNpN", + "id": "A09IQBDRCEQUKyJ8CzA5B", "author": "prove-ability", - "code": "function solution(s) {\n let answer = '';\n s.split(\" \").forEach((word) => {\n for(let i = 0, len = word.length; i < len; i++) {\n if(i % 2 === 0) answer+=word[i].toUpperCase();\n else answer+=word[i].toLowerCase();\n }\n answer += \" \";\n })\n answer = answer.slice(0, answer.length - 1)\n return answer;\n}\n", - "probId": "12930" + "code": "function solution(n) {\n let answer = '';\n answer = '수박'.repeat(n / 2);\n if (n % 2 !== 0) answer += '수';\n return answer;\n}", + "probId": "12922" }, { - "id": "c-MBCmwbGyU7_m5_XSUk4", - "author": "chaerin-dev", - "code": "function solution(n) {\n // 숫자 -> 문자열 -> 배열 -> 각 요소를 정수로 변환한 후 더한 누적 결과값 반환\n return String(n)\n .split(\"\")\n .reduce((acc, item) => (acc += parseInt(item)), 0);\n}\n\n", - "probId": "12931" + "id": "LoyVegy_UkD2gDWIgfKpp", + "author": "yongchanson", + "code": "function solution(n) {\n return '수박'.repeat(n / 2) + '수'.repeat(n % 2);\n}", + "probId": "12922" }, { - "id": "Xg_M1lnW05J7roeOl7Cjq", - "author": "chaerin-dev", - "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 10;\n n = Math.floor(n / 10);\n }\n return result;\n}\n\n", - "probId": "12931" + "id": "BoOyjfNuDV4C8MS9ly_nQ", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = 0;\n let answerString = s;\n const stringToNum = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n for (let i = 0; i < 10; i++) {\n const regex = new RegExp(stringToNum[i], \"g\");\n answerString = answerString.replace(regex, i);\n }\n answer = Number(answerString);\n return answer;\n}", + "probId": "81301" }, { - "id": "DAEk87tBtwi8_yANBQpHx", - "author": "prove-ability", - "code": "function solution(n) {\n var answer = 0;\n n.toString()\n .split(\"\")\n .forEach((v) => {\n answer += parseInt(v);\n });\n return answer;\n}\n", - "probId": "12931" + "id": "Vy5CLKCPikelKFvcoMVIR", + "author": "jaewon1676", + "code": "function solution(s) {\n let answer = 0;\n\n s = s.replace(/zero/g, 0);\n s = s.replace(/one/g, 1);\n s = s.replace(/two/g, 2);\n s = s.replace(/three/g, 3);\n s = s.replace(/four/g, 4);\n s = s.replace(/five/g, 5);\n s = s.replace(/six/g, 6);\n s = s.replace(/seven/g, 7);\n s = s.replace(/eight/g, 8);\n s = s.replace(/nine/g, 9);\n\n answer = Number(s);\n return answer;\n}", + "probId": "81301" }, { - "id": "YsbMTj12Zrh5tmcsPOoIi", + "id": "5LyTD1YgWMMQWNwVetWEz", "author": "chaerin-dev", - "code": "function solution(n) {\n // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환\n return String(n)\n .split(\"\")\n .reverse()\n .map((item) => parseInt(item));\n}\n\n", - "probId": "12932" + "code": "function solution(s) {\n s = s\n .replace(/zero/g, 0)\n .replace(/one/g, 1)\n .replace(/two/g, 2)\n .replace(/three/g, 3)\n .replace(/four/g, 4)\n .replace(/five/g, 5)\n .replace(/six/g, 6)\n .replace(/seven/g, 7)\n .replace(/eight/g, 8)\n .replace(/nine/g, 9);\n return parseInt(s);\n}", + "probId": "81301" }, { - "id": "hLuxIviWQvTScf7r0eiJL", - "author": "jaewon1676", - "code": "function solution(n) {\n var answer = [];\n // 정수형 => 문자형 => 하나씩 잘라서 뒤집어서 모아준다.\n n = n.toString().split(\"\").reverse().join(\"\");\n for (let i = 0; i < n.length; i++) {\n answer.push(parseInt(n[i])); // n은 지금 문자형이기때문에 Push 하기전에 정수형으로 바꿔줌\n // answer.push(n[i]) 로 해주면 현재 n[i]는 문자형이기때문에 결과는 [\"5\",\"4\",\"3\",\"2\",\"1\"] 가 됩니다.\n // answer(parseInt(n[i])) 로 해준다면 n[i]는 문자형 => 정수형으로 변하기 때문에 결과는 [5, 4, 3, 2, 1] 가 됩니다.\n // 문자형과 정수형의 차이는 숫자에 큰 따옴표가 있느냐 없느냐의 차이입니다.\n }\n return answer;\n}\n\n", - "probId": "12932" + "id": "ESsEfG25v4htTMfsWv6GX", + "author": "yongchanson", + "code": "function solution(s) {\n let en = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n\n for (let i = 0; i < s.length * 2; i++) {\n let p = i % en.length;\n s = s.replace(en[p], p);\n }\n return Number(s);\n}", + "probId": "81301" }, { - "id": "Ow0tzdcVMVj49HWgNCmjF", - "author": "jaewon1676", - "code": "function solution(n) {\n return (n = n\n .toString()\n .split(\"\")\n .reverse()\n .map((o) => (o = parseInt(o))));\n}\n\n", - "probId": "12932" + "id": "Qz0Q4RxbD0ag_v-SZSnam", + "author": "ssi02014", + "code": "/**\n * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화\n * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 \n * (테스트 케이스 11 ~ 15 100ms~200ms 차이)\n */\nfunction solution(X, Y) {\n const commons = [];\n const obj = {};\n\n for (const el of X) {\n obj[el] = (obj[el] || 0) + 1;\n }\n\n for (const el of Y) {\n if (obj[el]) {\n commons.push(el);\n obj[el]--;\n }\n }\n\n commons.sort((a, b) => b - a);\n\n if (!commons.length) return \"-1\";\n else if (commons[0] === \"0\") return \"0\";\n return commons.join(\"\");\n}", + "probId": "131128" }, { - "id": "Ab5UdnFUnzQEoHyT-qXGn", - "author": "prove-ability", - "code": "function solution(n) {\n // 1. 문자열 변환\n // 2. 배열로 변환\n // 3. 배열 반전\n // 4. 정수로 변환\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((v) => parseInt(v));\n}\n\n", - "probId": "12932" + "id": "BDzXjTTuWa38KvnMviYyT", + "author": "codeisneverodd", + "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((element) => {\n if (element === \" \") return \" \";\n const code = element.charCodeAt(0);\n if ((code + n > 90 && code <= 90) || code + n > 122) {\n return String.fromCharCode(code + n - 26);\n } else {\n return String.fromCharCode(code + n);\n }\n })\n .join(\"\");\n}", + "probId": "12926" }, { - "id": "ZmfKcJxTtJ9zsDtUM8k7_", - "author": "yongchanson", - "code": "function solution(n) {\n let answer = [];\n let string = n.toString();\n for (let i = string.length - 1; i >= 0; i--) {\n let slice = string.substr(i, 1) * 1;\n answer.push(slice);\n }\n return answer;\n}\n", - "probId": "12932" + "id": "-oLnMXLaSmkk5goDvoMio", + "author": "jaewon1676", + "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((el) => {\n if (el == \" \") return el;\n let tmp = el.charCodeAt();\n return el.toLowerCase().charCodeAt() + n > 122\n ? String.fromCharCode(tmp + n - 26)\n : String.fromCharCode(tmp + n);\n })\n .join(\"\");\n}\n\n/* 문자열 -> 아스키코드 : s.charCodeAt()\n아스키코드 -> 문자열 : String.fromCharCode() \n풀이과정 \n1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다.\n2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. \n 대문자 아스키코드는 65가 A, 90이 Z이다.\n 소문자 아스키코드는 97이 a, 122가 z이다.\n3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고\n 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다.\n*/", + "probId": "12926" }, { - "id": "LuHX48oVJdF4I5R73WNok", + "id": "aAt0_J8gPPDdzILK3hinK", "author": "chaerin-dev", - "code": "function solution(n) {\n // 정수 -> 문자열 -> 배열\n let arrN = String(n).split(\"\");\n // 배열 내림차순 정렬\n arrN.sort((a, b) => b - a);\n // 배열 -> 문자열 -> 정수\n return parseInt(arrN.join(\"\"));\n}\n\n", - "probId": "12933" + "code": "function solution(s, n) {\n let result = \"\";\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") result += \" \";\n else {\n let charCode = s.charCodeAt(i);\n // 원래 대문자였는데\n if (charCode <= 90) {\n charCode += n;\n // 변경 후 아스키코드값이 90보다 크다면\n if (charCode > 90) charCode -= 26;\n }\n // 원래 소문자였는데\n else {\n charCode += n;\n // 변경 후 아스키코드값이 122보다 크다면\n if (charCode > 122) charCode -= 26;\n }\n result += String.fromCharCode(charCode);\n }\n }\n return result;\n}", + "probId": "12926" }, { - "id": "YtcGtpNEHBHbpYoCh3e6a", + "id": "42ZMqrfDapgsuTtfl5Cwk", "author": "prove-ability", - "code": "function solution(n) {\n return parseInt(n.toString().split(\"\").sort((a, b) => b - a).join(\"\"), 10);\n}\n\n", - "probId": "12933" + "code": "function solution(s, n) {\n var answer = '';\n for(let i = 0, len = s.length; i < len; i++) {\n if(s[i] === \" \") {\n answer += \" \";\n continue;\n }\n let index = s[i].charCodeAt();\n // 65 - 90\n // 97 - 122\n if(index <= 90 && index + n > 90) index -= 26; \n else if (index + n > 122) index -= 26;\n \n answer += String.fromCharCode(index + n)\n }\n return answer;\n}", + "probId": "12926" }, { - "id": "z4zbV21cECNIBlvxh_bgu", - "author": "chaerin-dev", - "code": "function solution(n) {\n // n의 제곱근값을 x에 저장\n let x = Math.sqrt(n);\n // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환\n return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1;\n}\n\n", - "probId": "12934" - }, - { - "id": "qcPEVIQ0MFFnsdN2-21jG", - "author": "prove-ability", - "code": "function solution(n) {\n // n의 제곱근을 x 초기화\n const x = Math.sqrt(n);\n // 양의 정수라면 x + 1 제곱 반환\n if(Number.isInteger(x)) return Math.pow(x + 1, 2)\n // 아니라면 -1 반환\n return -1;\n}\n\n", - "probId": "12934" + "id": "_yXWsJOpZC1ik98YSVuJn", + "author": "jaewon1676", + "code": "function solution(id_list, report, k) {\n let answer = new Array(id_list.length).fill(0);\n let report_list = {}; // 신고당한 ID\n\n // key, value 형식의 report_list 객체를 만든다.\n id_list.map(user => {\n report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체\n });\n // report_list { muzi: [], frodo: [], apeach: [], neo: [] }\n\n // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다.\n report.map(user => {\n const [user_id, report_id] = user.split(' ');\n // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다.\n if (!report_list[report_id].includes(user_id)) {\n report_list[report_id].push(user_id);\n // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다.\n }\n });\n for (const key in report_list) {\n // report_list의 index 순회\n if (report_list[key].length >= k) {\n report_list[key].map(user => {\n answer[id_list.indexOf(user)] += 1;\n });\n }\n }\n return answer;\n}", + "probId": "92334" }, { - "id": "byquzQ2V5rVp9wpHX3oPI", - "author": "jaewon1676", - "code": "function solution(n) {\n let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인\n if (s ** 2 === n) return ((s+1) ** 2)\n \n return -1;\n}\n\n", - "probId": "12934" + "id": "lhGPDTCRYBPDF1CqjNwlA", + "author": "prove-ability", + "code": "function solution(id_list, report, k) {\n // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기\n var answer = Array.from({ length: id_list.length }).fill(0);\n // 신고 내용 객체 초기화 - 신고된 내용 정리\n const reportObj = {};\n // 신고건 반복문으로 하나씩 접근\n for (let i = 0, len = report.length; i < len; i++) {\n const [userId, reportUserId] = report[i].split(' ');\n // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가\n if (reportObj[reportUserId]) {\n if (!reportObj[reportUserId].includes(userId)) {\n reportObj[reportUserId] = [...reportObj[reportUserId], userId];\n }\n // 신고 내용 객체에 신고당한 사람이 없다면 추가\n } else reportObj[reportUserId] = [userId];\n }\n // 만들어진 신고 내용 객체로 반복적으로 접근\n for (const item of Object.values(reportObj)\n .filter(v => v.length >= k)\n .flatMap(v => v)) {\n // 인덱스로 접근해 메일 카운트 증가\n const index = id_list.findIndex(v => v === item);\n answer[index]++;\n }\n\n return answer;\n}", + "probId": "92334" }, { - "id": "_S0PcFuUCdpkZWWYrfdGN", - "author": "yongchanson", - "code": "function solution(n) {\n const sqrt = Math.sqrt(n);\n //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수\n return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1;\n}\n", - "probId": "12934" + "id": "XsnehvD59CuxJGJpkkWCv", + "author": "chaerin-dev", + "code": "function solution(id_list, report, k) {\n // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리\n let set = new Set(report);\n report = Array.from(set);\n\n // 1. report를 2차원배열로 변형\n // 2. 각 유저가 신고당한 횟수 cnt에 저장\n // 3. 각 유저를 신고한 유저 who에 저장\n let cnt = Array.from({ length: id_list.length }, i => 0);\n let who = Array.from({ length: id_list.length }, i => []);\n for (let i = 0; i < report.length; i++) {\n report[i] = report[i].split(' ');\n cnt[id_list.indexOf(report[i][1])]++;\n who[id_list.indexOf(report[i][1])].push(report[i][0]);\n }\n\n // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장\n let mail = Array.from({ length: id_list.length }, i => 0);\n for (let i = 0; i < cnt.length; i++) {\n if (cnt[i] < k) continue;\n for (let j = 0; j < who[i].length; j++) {\n mail[id_list.indexOf(who[i][j])]++;\n }\n }\n return mail;\n}", + "probId": "92334" }, { - "id": "J5LsXXBRGRvFx-4OK-04J", - "author": "jaewon1676", - "code": "function solution(arr) {\n var answer = [];\n\n let min = Math.min(...arr);\n while (1) {\n for (let i = 0; i < arr.length; i++) {\n if (min == arr[i]) {\n arr.splice(i, 1);\n if (arr.length == 0) {\n return [-1];\n } else {\n return arr;\n }\n }\n }\n }\n return -1;\n}\n\n/* 풀이과정\n1. 배열의 최솟값을 min 변수에 담아줍니다.\n2. 배열을 순회하며 최솟값을 찾아 splice 메서드를 사용해 최솟값의 자리만 제거해줍니다.\n3. 최솟값 제거 후 배열 크기가 0이면 -1, 그렇지 않으면 배열 그대로 반환합니다. */\n\n", - "probId": "12935" + "id": "knELcZfUST9z1eYKpIttU", + "author": "codeisneverodd", + "code": "function solution(id_list, report, k) {\n //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장,\n //각 id를 신고한 사람 array를 reportedBy에 저장,\n //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장\n //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장.\n const reportSet = new Set(report);\n const reportedCount = {}; //{\"id\": Number(count)}\n const reportedBy = {}; //{\"id\":[]}\n const mailCount = {}; //{\"id\":Number(count)}\n\n id_list.forEach(element => {\n reportedCount[element] = 0;\n mailCount[element] = 0;\n reportedBy[element] = [];\n });\n\n reportSet.forEach(element => {\n const [id, reported] = element.split(' ');\n reportedCount[reported] += 1;\n reportedBy[reported].push(id);\n });\n\n for (const reportedId in reportedCount) {\n if (reportedCount[reportedId] >= k) {\n reportedBy[reportedId].forEach(reporter => {\n mailCount[reporter] += 1;\n });\n }\n }\n return id_list.map(id => mailCount[id]);\n}", + "probId": "92334" }, { - "id": "yTA8JRHYusqgkyfujzEIm", + "id": "_SiX4wl7bHj68YYVp_Phb", "author": "jaewon1676", - "code": "function solution(arr) {\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n if (arr.length < 1) return [-1];\n return arr;\n}\n\n/* 풀이과정 arr [4,3,2,1] 일경우\nMath.min(...arr)은 1\narr.indexOf(1), 1이 있는 index가 3이므로 3 반환.\narr.splice(3, 1) arr의 3번째 index만 제거 해준다.\narr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */\n\n", - "probId": "12935" + "code": "function solution(new_id) {\n // 1 소문자로 치환\n let answer = new_id\n .toLowerCase()\n\n // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거.\n .replace(/[^a-z0-9-_.]/gi, '')\n\n // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환\n .replace(/[.]{2,}/gi, '.')\n\n // 4 마침표(.)가 처음이나 끝에 위치하면 제거\n .replace(/^[.]|[.]$/gi, '');\n\n // 5 빈 문자열이면 a 대입\n if (answer === '') answer = 'a';\n\n // 6 length > 15이면 그 뒤의 문자들은 제거\n if (answer.length > 15) {\n answer = answer.substring(0, 15);\n // 마침표(.)가 끝에 위치하면 마침표(.)제거\n answer = answer.replace(/[.]$/gi, '');\n }\n\n // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임\n while (answer.length < 3) {\n answer += answer[answer.length - 1];\n }\n return answer;\n}", + "probId": "72410" }, { - "id": "eDfvsoJHW4CQiCUzPveb0", + "id": "AMOMEz2Bz_Pt5jgvmesYA", "author": "chaerin-dev", - "code": "function solution(arr) {\n // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환\n return arr.length ? arr : [-1];\n}\n\n", - "probId": "12935" + "code": "function solution(new_id) {\n // 1단계: 모든 대문자를 소문자로\n new_id = new_id.toLowerCase();\n\n // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거\n new_id = new_id.replace(/[^\\w\\-\\.]/g, '');\n\n // 3단계: 연속되는 마침표는 마침표 하나로\n new_id = new_id.replace(/\\.{2,}/g, '.');\n\n // 4단계: 처음이나 끝에 마침표가 있으면 제거\n new_id = new_id.replace(/^\\.|\\.$/, '');\n\n // 5단계: new_id가 빈 문자열이면 \"a\" 대입\n if (new_id.length === 0) new_id = 'a';\n\n // 6단계: new_id의 길이가 16자 이상이면,\n // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거\n // 제거 후 끝에 마침표가 있으면 제거\n if (new_id.length >= 16) new_id = new_id.slice(0, 15);\n new_id = new_id.replace(/\\.$/, '');\n\n // 7단계: new_id의 길이가 2자 이하이면,\n // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임\n let len = new_id.length;\n if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len);\n\n return new_id;\n}", + "probId": "72410" }, { - "id": "pBdH5UbBwKo9pOwWkT5YO", - "author": "prove-ability", - "code": "function solution(arr) {\n // 최솟값 찾기\n const min = Math.min(...arr);\n // arr 중 min 과 같은 요소의 인덱스 제거\n arr.splice(\n arr.findIndex((num) => num === min),\n 1\n );\n // 만약 arr 가 비어있다면 [-1] 반환\n if (arr.length === 0) return [-1];\n return arr;\n}\n", - "probId": "12935" + "id": "jegWLXnzaexxLDEtxqlR-", + "author": "codeisneverodd", + "code": "function solution(new_id) {\n let answer = new_id\n .toLowerCase() //step 1\n .replace(/[^0-9a-z._-]/g, '') // step 2\n .replace(/\\.+/g, '.') //step 3\n .replace(/^\\.|\\.$/g, '') //step 4\n .replace(/^$/, 'a') //step 5\n .slice(0, 15)\n .replace(/\\.$/, ''); //step 6\n // step7\n if (answer.length === 1) answer = answer[0].repeat(3);\n if (answer.length === 2) answer = answer + answer[1];\n\n return answer;\n}", + "probId": "72410" }, { - "id": "Lh_xnC3OjWp482MUGunbq", + "id": "VboAgE1t6rbLqLDBcavKA", "author": "codeisneverodd", - "code": "function solution(n, k) {\n const getFactorial = n => {\n const result = [1, 1, 2, ...Array(n - 2)];\n result.forEach((_, i) => {\n if (i > 2) result[i] = result[i - 1] * i;\n });\n return result;\n };\n\n const getDivision = (dividend, divisor) => {\n const quotient = Math.floor(dividend / divisor);\n const remainder = dividend % divisor;\n return [quotient, remainder];\n };\n\n const stepCount = getFactorial(n).reverse();\n\n const generateSteps = (k, step) => {\n const [q, r] = getDivision(k, stepCount[step]);\n if (r === 0) return [q];\n return [q, ...generateSteps(r, step + 1)];\n };\n\n const answer = [];\n\n const steps = generateSteps(k - 1, 0);\n\n const notUsedNums = Array.from({ length: n }, (_, i) => i + 1);\n\n steps.slice(1).forEach(q => {\n answer.push(notUsedNums[q]);\n notUsedNums.splice(q, 1);\n });\n\n return [...answer, ...notUsedNums];\n}\n", - "probId": "12936" + "code": "function solution(N, stages) {\n var answer = [];\n let failRate = new Array(N + 2).fill(0);\n let playerChallenging = new Array(N + 2).fill(0);\n let playerReached = new Array(N + 2).fill(0);\n\n for (const stage of stages) {\n for (let i = 1; i <= stage; i++) playerReached[i] += 1;\n playerChallenging[stage] += 1;\n }\n for (let i = 1; i <= N + 1; i++)\n failRate[i] =\n playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i];\n const rateNIndex = failRate\n .slice(1, N + 1)\n .map((rate, stage) => [rate, stage + 1]);\n const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]);\n answer = sortedRate.map((stage) => stage[1]);\n return answer;\n}", + "probId": "42889" }, { - "id": "ucLC626sfcrXE8mHyTQd0", - "author": "chaerin-dev", - "code": "function solution(num) {\n return num % 2 == 0 ? \"Even\" : \"Odd\";\n}\n\n", - "probId": "12937" + "id": "3u-cQ1Lt_RmNzog8GKI8O", + "author": "jaewon1676", + "code": "function solution(N, stages) {\n let map = Array.from(Array(N), () => Array(2).fill(0));\n let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수\n let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율\n let count = 0;\n\n stages.sort(function (a, b) {\n return a - b;\n }); // 난이도 오름차순 정렬\n for (let i = 1; i <= N; i++) {\n while (1) {\n // i 스테이지의 실패율 계산\n if (stages[0] == i) {\n answer[i - 1] += 1;\n count += 1;\n stages.shift();\n } else break;\n }\n rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산\n\n count = 0;\n\n map[i - 1][0] = i;\n map[i - 1][1] = rate[i - 1];\n }\n map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬\n let stack = []; // 답\n for (let i = 0; i < map.length; i++) {\n stack.push(map[i][0]);\n }\n\n return stack;\n}\n\n/* 풀이 과정\n1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다.\n2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다.\n3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서.\n4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다.\n*/", + "probId": "42889" }, { - "id": "9w7tm6SwrGPyojQ2itapa", - "author": "jaewon1676", - "code": "function solution(num) {\n let answer;\n num % 2 == 0 ? (answer = \"Even\") : (answer = \"Odd\");\n // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환.\n return answer;\n}\n\n", - "probId": "12937" + "id": "Av6X7HBEZTken-98C8aB2", + "author": "codeisneverodd", + "code": "function solution(left, right) {\n var answer = 0;\n for (let num = left; num <= right; num++) {\n divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num);\n }\n return answer;\n}\n\nconst divisorCounter = (num) => {\n let count = 0;\n const sqrt = Math.sqrt(num);\n for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1;\n return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2;\n};", + "probId": "77884" }, { - "id": "eSf1rhr-2aUpt-9E0iMdL", - "author": "prove-ability", - "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}\n\n", - "probId": "12937" + "id": "GI7q65ilfJZ8ur-KW253Z", + "author": "jaewon1676", + "code": "function solution(left, right) {\n var answer = 0;\n\n for (left; left <= right; left++) {\n // left의 제곱근이 정수면 약수의 개수는 홀수\n if (Number.isInteger(Math.sqrt(left))) {\n answer -= left;\n } else {\n answer += left;\n }\n }\n return answer;\n}", + "probId": "77884" }, { - "id": "cOrwN92E2nBY-8cD4GcZf", - "author": "yongchanson", - "code": "function solution(num) {\n return num % 2 ? \"Odd\" : \"Even\";\n}\n", - "probId": "12937" + "id": "WuWuhvRMVKJvMcnEbwQ8_", + "author": "prove-bility", + "code": "function getDivisorCount(i) {\n let count = 0;\n for(let j = 1; j <= i; j++) {\n if(i % j === 0) count++;\n }\n return count;\n}\n\nfunction solution(left, right) {\n let answer = 0;\n for(let i = left; i <= right; i++) {\n let count = getDivisorCount(i);\n if(count % 2 === 0) answer += i;\n else answer -= i;\n }\n return answer;\n}", + "probId": "77884" }, { - "id": "b4Tgq0zJO99r-0YwOmyes", + "id": "yObJuA3KwklreVRYLDiiu", "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = '';\n const arr = s.split(' ')\n answer = Math.min(...arr) + ' ' + Math.max(...arr)\n return answer;\n}\n\n", - "probId": "12939" + "code": "function solution(n) {\n let answer = 0;\n for (let divisor = 1; divisor <= n; divisor++) {\n if (n % divisor === 0) answer += divisor;\n }\n return answer;\n}", + "probId": "12928" }, { - "id": "ebWdd4TIADFPtdK1kJ0cP", - "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = '';\n const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b)\n answer = arr[0] + ' ' + arr[arr.length - 1]\n return answer;\n}\n\n", - "probId": "12939" + "id": "9z7gNX26mVynww375frEd", + "author": "yongchanson", + "code": "function solution(n) {\n var answer = 0;\n let i;\n for (i = 1; i <= Math.sqrt(n); i++) {\n if (n % i == 0) {\n if (i * i == n) {\n //i의 제곱이 n인경우 처리\n answer += i;\n } else {\n answer += i;\n answer += n / i;\n }\n }\n }\n\n return answer;\n}", + "probId": "12928" + }, + { + "id": "Kb-Ud8hRFj3VntSJaRD_k", + "author": "chaerin-dev", + "code": "function solution(n) {\n let result = 0;\n let sqrtN = Math.sqrt(n);\n // 효율성을 위해 1부터 n의 제곱근-1까지만 순회\n for (let i = 1; i < sqrtN; i++) {\n if (n % i === 0) result += i + n / i;\n }\n // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌\n if (Number.isInteger(sqrtN)) result += sqrtN;\n return result;\n}", + "probId": "12928" }, { - "id": "MynbcwoO_vGvZZ4cLrLkd", + "id": "2hHCkl2LHLmbNCTMwzQvw", "author": "jaewon1676", - "code": "function solution(s) {\n s = s.split(' ')\n s.sort((a, b) => {return a - b}) // 오름차순 정렬\n let small = s[0] // s의 최솟값\n let large = s[s.length - 1] // s의 최댓값\n return (small + ' ' + large)\n}\n\n", - "probId": "12939" + "code": "function solution(n) {\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n if (n % i == 0) {\n // n으로 i를 나눴을 때, 나머지가 0이면 약수이다.\n answer += i;\n }\n }\n return answer;\n}\n\n// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다.\n// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다.\n// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다.", + "probId": "12928" }, { - "id": "fBHsotRLVVcqI6hD11lXK", + "id": "Wzs2YemubD5fFV8975Cl3", "author": "prove-ability", - "code": "function solution(s) {\n s = s.split(\" \").map((v) => parseInt(v, 10))\n return `${Math.min(...s)} ${Math.max(...s)}`;\n}\n\n", - "probId": "12939" + "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n if(n % i === 0) answer += i;\n }\n return answer;\n}", + "probId": "12928" + }, + { + "id": "qQLomQYYyEENnJPItTH7h", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n var answer = 0;\n for (let i = 0; i < 10; i++) {\n answer += numbers.includes(i) ? 0 : i;\n }\n return answer;\n}", + "probId": "86051" }, { - "id": "drk_qLQEGbYtOpyzByQjg", + "id": "abMRRy_N5Od0L1J1Fk2cH", "author": "yongchanson", - "code": "function solution(s) {\n let arr = s.split(\" \").sort((a, b) => a - b);\n arr.splice(1, arr.length - 2, \" \");\n let result = arr.join(\"\");\n return result;\n}\n", - "probId": "12939" + "code": "function solution(numbers) {\n var answer = -1;\n\n let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let arr_sum = 0;\n let numbers_sum = 0;\n\n for (i = 0; i < arr.length / 2; i++) {\n if (arr[i] == arr[arr.length - 1 - i]) {\n arr_sum += arr[i];\n } else {\n arr_sum += arr[i] + arr[arr.length - 1 - i];\n }\n }\n\n for (i = 0; i < numbers.length; i++) {\n numbers_sum += numbers[i];\n }\n\n answer = arr_sum - numbers_sum;\n return answer;\n}", + "probId": "86051" }, { - "id": "v-P3znPWhBzvOFWjeGPFF", - "author": "chaerin-dev", - "code": "function solution(n, m) {\n // 최대공약수 구하기\n let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m));\n // 최소공배수 구하기\n let lcm = (n, m) => (n * m) / gcd(n, m);\n // 결과 출력\n return [gcd(n, m), lcm(n, m)];\n}\n\n", - "probId": "12940" + "id": "7PooMLPnF3FELewxRVqp9", + "author": "prove-ability", + "code": "function solution(numbers) {\n var answer = 0;\n\n for (let i = 0; i < 10; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n\n return answer;\n}", + "probId": "86051" }, { - "id": "FfUlzwdEgnrJonPT00RCE", - "author": "yongchanson", - "code": "function solution(a, b) {\n let gcd = 0;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if ((a % i) + (b % i) === 0) {\n gcd = i;\n }\n }\n return [gcd, (a / gcd) * b];\n}\n", - "probId": "12940" + "id": "yMhu_QGJsXeqlaCo1qG5K", + "author": "chaerin-dev", + "code": "function solution(numbers) {\n let answer = 0;\n for (let i = 0; i <= 9; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n return answer;\n}", + "probId": "86051" }, { - "id": "WbRge6Cq11rHjjMWrSr2f", + "id": "lVSmCdDTM8cUCindwlS8g", "author": "codeisneverodd", - "code": "function solution(A, B) {\n var answer = 0;\n A = A.sort((a, b) => a - b)\n B = B.sort((a, b) => b - a)\n for (let i = 0; i < A.length; i++) answer += A[i] * B[i]\n return answer;\n}\n\n", - "probId": "12941" + "code": "function solution(d, budget) {\n let answer = 0;\n d.sort((a, b) => a - b);\n for (const department of d) {\n if (budget < department) break;\n answer += 1;\n budget -= department;\n }\n return answer;\n}", + "probId": "12982" }, { - "id": "_YWjIOhQzgAVyJHHuiVSK", + "id": "qXusM8NX60lzwocrZm8pZ", "author": "prove-ability", - "code": "function solution(A,B){\n let sum = 0;\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n \n for(let i = 0, len = A.length; i < len; i++) {\n sum += A[i] * B[i];\n }\n\n return sum;\n}\n\n", - "probId": "12941" + "code": "function solution(d, budget) {\n let sum = 0;\n let count = 0;\n // 오름차순 정렬\n d.sort((a, b) => a - b);\n for(let i = 0, len = d.length; i < len; i++) {\n // 작은 수 부터 하나씩 더해준다\n sum += d[i];\n // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환\n if(sum > budget) return count;\n count++;\n }\n \n return count;\n}", + "probId": "12982" }, { - "id": "jFBfSOnzXZVzb88BtR6a6", - "author": "yongchanson", - "code": "function solution(A, B) {\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n return A.reduce((t, n, i) => t + n * B[i], 0);\n}\n", - "probId": "12941" + "id": "wGoMl70jO-ZfwphOxu9il", + "author": "jaewon1676", + "code": "function solution(d, budget) {\n let count = 0; // 최대 물품 지원 할 수 있는 부서 수 \n d.sort((a, b) => a - b) // 오름차순 정렬\n for (let i=0; i 1) {\n // 작업을 500번 반복해도 1이 되지 않으면 -1 반환\n if (cnt == 500) return -1;\n // 작업 반복 횟수 증가\n cnt++;\n // 입력된 수가 짝수이면 2로 나누기\n if (num % 2 == 0) num /= 2;\n // 입력된 수가 홀수이면 3을 곱하고 1을 더하기\n else {\n num *= 3;\n num++;\n }\n }\n // 작업을 반복한 횟수 반환\n return cnt;\n}\n\n", - "probId": "12943" + "id": "Jx_ocYhwanFn0y_D7Oao6", + "author": "codeisneverodd", + "code": "function solution(participant, completion) {\n participant = participant.sort();\n completion = completion.sort();\n for (let i = 0; i < completion.length; i++) {\n if (participant[i] !== completion[i]) return participant[i];\n }\n return participant[participant.length - 1];\n}", + "probId": "42576" }, { - "id": "FR78rQlCHVgFdFjUq4Y4X", + "id": "G05zJlLjP6r1qpF5UmB0Q", "author": "jaewon1676", - "code": "function solution(num) {\n var answer = 0;\n // num이 1이 아니고, answer이 500이 아니면 진행.\n // 두 가지 조건중 하나라도 맞지 않으면 while문 종료.\n while (num != 1 && answer != 500) {\n //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다.\n num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1);\n answer++;\n }\n return num == 1 ? answer : -1;\n}\n\n", - "probId": "12943" + "code": "function solution(participant, completion) {\n var answer = \"\";\n for (let i = 0; i < participant.length; i++) {\n for (let j = 0; j < completion.length; j++) {\n if (participant[i] === completion[j]) {\n console.log(participant, completion);\n participant.splice(i, 1);\n completion.splice(j, 1);\n i--;\n j--;\n console.log(participant, completion);\n break;\n }\n }\n }\n\n return participant[0];\n}\n\n//완벽한 정답이 아닙니다.", + "probId": "42576" }, { - "id": "duNaIZmcnCVBqJ_MOQdhh", - "author": "prove-ability", - "code": "function solution(num) {\n let count = 0;\n\n // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.\n while (num !== 1) {\n // 입력된 수가 짝수라면 2로 나눕니다.\n if (num % 2 === 0) num /= 2;\n // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.\n else num = num * 3 + 1;\n count++;\n // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요\n if (count > 500) return -1;\n }\n\n return count;\n}\n\n", - "probId": "12943" + "id": "fXV66RdeKYEkNxeyOWzzf", + "author": "hyosung", + "code": "function solution(participant, completion) {\n let answer = \"\";\n // 2개 이상을 가진 특정값의 갯수 기록용 변수\n let max = 0;\n // 반복문 내부에서 set.has 를 사용하기 위해 Set 선언 (처음에는 Array.findIndex 를 사용)\n const set = new Set([...completion]);\n // 반복문 최적화 - 반복되던 연산 제거 (값 비교, length)\n const length = participant.length;\n for (let i = length; i--; ) {\n // 완주자 명단에 없다면 완주하지 못한 참가자 이므로 바로 종료\n if (!set.has(participant[i])) {\n answer = participant[i];\n break;\n }\n // 배열안에 특정값 갯수 확인\n let count = participant.reduce(\n (a, v) => (v === participant[i] ? a + 1 : a),\n 0\n );\n // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면\n // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다\n if (count > 1 && max < count) {\n answer = participant[i];\n // 조건에 맞는 동명이인 수 저장\n max = count;\n }\n }\n return answer;\n}\n\n//완벽한 정답이 아닙니다.", + "probId": "42576" }, { - "id": "HImmGfrde41_gRkR3T_g3", - "author": "yongchanson", - "code": "function solution(num) {\n let count = 0;\n while (num !== 1) {\n if (count++ === 500) return -1;\n num = num % 2 ? num * 3 + 1 : num / 2;\n }\n return count;\n}\n", - "probId": "12943" + "id": "iYWX53fSR9dGhM_f2iKhP", + "author": "chaerin-dev", + "code": "function solution(participant, completion) {\n var answer = \"\";\n // 두 배열을 정렬한다!\n participant.sort();\n completion.sort();\n // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!!\n // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로\n // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만\n // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음!\n for (let i = 0; i < participant.length; i++) {\n if (participant[i] != completion[i]) {\n answer = participant[i];\n break;\n }\n }\n return answer;\n}", + "probId": "42576" }, { - "id": "XBB2evbbGbzHZ_4GxKu0S", - "author": "jaewon1676", - "code": "function solution(arr) {\n var answer = 0;\n for (var i = 0; i < arr.length; i++) {\n answer += arr[i];\n }\n return answer / arr.length;\n}\n\n", - "probId": "12944" + "id": "mK5dnWttxK4bzZaDoen7x", + "author": "codeisneverodd", + "code": "function solution(absolutes, signs) {\n return absolutes.reduce(\n (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1),\n 0\n );\n}", + "probId": "76501" }, { - "id": "sk0DiO2oU5Hv3Ad-dOfOm", - "author": "chaerin-dev", - "code": "function solution(arr) {\n // arr의 모든 요소를 sum에 더힘\n let sum = arr.reduce((sum, e) => sum + e);\n // sum을 arr의 요소의 갯수로 나눈 후 반환\n return sum / arr.length;\n}\n\n", - "probId": "12944" + "id": "oafF4T4y5vl4OcYBuzMlM", + "author": "codeisneverod", + "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (let i = 0; i < absolutes.length; i++) {\n answer += signs[i] ? absolutes[i] : -1 * absolutes[i];\n }\n return answer;\n}", + "probId": "76501" }, { - "id": "loNDFENEfVUlrJ2Zbqday", - "author": "prove-ability", - "code": "function solution(arr) {\n var answer = 0;\n arr.forEach((num) => {\n answer += num;\n });\n return answer / arr.length;\n}\n", - "probId": "12944" + "id": "PHxsJEC41hkuqLR9jZfLB", + "author": "jaewon1676", + "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (var i = 0; i < absolutes.length; i++) {\n if (signs[i] === false) {\n answer = answer - absolutes[i];\n } else {\n answer = answer + absolutes[i];\n }\n }\n\n return answer;\n}", + "probId": "76501" }, { - "id": "PE-vTlQEaX-w3zurq_sxJ", - "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = 0;\n answer = fibonacci1234567(n)\n return answer;\n}\n\nfunction fibonacci1234567(n) { //재귀적으로 하면 시간초과\n let fiboArr = new Array(n + 1).fill(0)\n fiboArr[0] = 0\n fiboArr[1] = 1\n for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과\n return fiboArr[n]\n}\n\n", - "probId": "12945" + "id": "VavYZ0Yo3L_kfJjz4Imum", + "author": "prove-ability", + "code": "function solution(absolutes, signs) {\n let answer = 0;\n absolutes.forEach((absolute, i) => {\n if(!signs[i]) absolute *= -1;\n answer += absolute;\n })\n return answer;\n}", + "probId": "76501" }, { - "id": "Rirk4klKISsZ8HQafNdPv", - "author": "jaewon1676", - "code": "function solution(n) {\n let f_1 = 0;\n let f_2 = 1;\n \n for (let i=2; i<=n; i++) {\n let temp = (f_1 + f_2) % 1234567;\n f_1 = f_2;\n f_2 = temp;\n }\n \n return f_2;\n}", - "probId": "12945" + "id": "xoDbdrm9SYhSQjb_f4FPY", + "author": "chaerin-dev", + "code": "function solution(absolutes, signs) {\n // 연산 결과를 저장할 변수\n let result = 0;\n // signs의 각 요소에 대해\n signs.forEach((e, i) => {\n // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌\n if (e) result += absolutes[i];\n // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌\n else result -= absolutes[i];\n });\n // result 반환\n return result;\n}", + "probId": "76501" }, { - "id": "O0VjxGojQ7qMztFspF30o", + "id": "klP9xJHjOoo88wPJGPL_U", "author": "codeisneverodd", - "code": "function solution(n) {\n return move(1, 3, 2, n);\n}\nconst move = (departure, destination, waypoint, numberOfPlate) => {\n if (numberOfPlate === 1) return [[departure, destination]];\n return [\n ...move(departure, waypoint, destination, numberOfPlate - 1),\n ...move(departure, destination, waypoint, 1),\n ...move(waypoint, destination, departure, numberOfPlate - 1),\n ];\n};\n//재귀를 생각해보기에 좋은 문제입니다.\n//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi\n/*\nn개가 있다면\n1. 1->2로 n-1개를 옮김\n2. 1->3으로 가장 큰 1개를 옮김\n3. 2->1로 n-2개를 옮김\n4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김\n의 반복\n\n결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨.\na->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 \n함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음.\n*/\n", - "probId": "12946" + "code": "function solution(s) {\n return s\n .split(\" \")\n .map((word) =>\n word\n .split(\"\")\n .map((char, index) =>\n index % 2 === 0\n ? word[index].toUpperCase()\n : word[index].toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}", + "probId": "12930" }, { - "id": "wtTNr-bhCwnjiauq7Nod5", + "id": "ghWDHDJDoQyhuF6qDhi7i", "author": "chaerin-dev", - "code": "function solution(x) {\n // x의 각 자리에 접근하기 위해 x를 문자열로 변환\n let x_str = x.toString();\n // 각 자릿수의 합을 저장할 변수\n let sum_of_digits = 0;\n // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌\n for (let i = 0; i < x_str.length; i++) {\n sum_of_digits += Number(x_str[i]);\n }\n // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환\n return x % sum_of_digits == 0;\n}\n\n", - "probId": "12947" + "code": "// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..!\nfunction solution(s) {\n let result = \"\";\n let flag = true;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") {\n flag = false;\n result += s[i];\n } else if (flag) {\n result += s[i].toUpperCase();\n } else {\n result += s[i].toLowerCase();\n }\n flag = !flag;\n }\n return result;\n}", + "probId": "12930" }, { - "id": "wKcC80GK_X-_2azLojpwR", + "id": "l3wUBAT9KqGlEv-l3000E", "author": "jaewon1676", - "code": "function solution(x) {\n let sum = 0;\n let arr = String(x).split(\"\"); // 숫자를 하나씩 분리한다.\n\n for (var i = 0; i < arr.length; i++) {\n sum += Number(arr[i]); // 각 숫자를 더해준다.\n }\n\n return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수\n}\n\n", - "probId": "12947" + "code": "function solution(s) {\n return s\n .split(\" \")\n .map((el) =>\n el\n .split(\"\")\n .map((el, index) =>\n index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}\n\n/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ]\n \n.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 \n[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]]\n \n.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase())\n//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다!\n//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다.\n[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]]\n \n.join('') 작은 배열들을 합쳐줍니다.\n['TrY', 'HeLlO', 'WoRlD']\n \n.join(' ') 큰 배열들을 합쳐줍니다.\n\"TrY HeLlO WoRlD\"\n\n대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 \n문자열을 연습하는데 좋은 문제입니다.\n*/", + "probId": "12930" }, { - "id": "135eM2uZnEMcD48QkGH_E", + "id": "7pKivSXqs3zO0lOkISP4s", "author": "prove-ability", - "code": "function solution(x) {\n var answer = true;\n // 모든 자릿수의 합을 구한다\n const sum = x\n .toString()\n .split(\"\")\n .reduce((acc, cur) => acc + parseInt(cur, 10), 0);\n // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환\n if (x % sum !== 0) return false;\n return answer;\n}\n", - "probId": "12947" + "code": "function solution(s) {\n let answer = '';\n s.split(\" \").forEach((word) => {\n for(let i = 0, len = word.length; i < len; i++) {\n if(i % 2 === 0) answer+=word[i].toUpperCase();\n else answer+=word[i].toLowerCase();\n }\n answer += \" \";\n })\n answer = answer.slice(0, answer.length - 1)\n return answer;\n}", + "probId": "12930" + }, + { + "id": "KsHkHFSHZ5_q5H0lT4TCm", + "author": "codeisneverodd", + "code": "function solution(n) {\n return n\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr, 0);\n}", + "probId": "12931" }, { - "id": "5XvrtFCRq-0BStvHZO94h", + "id": "rcCmcnK9rWAurCQbV9EBf", "author": "chaerin-dev", - "code": "function solution(phone_number) {\n // \"*\"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과\n // phone_number의 -4인덱스부터 끝까지 추출한 문자열을\n // 이어붙인 후 반환\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}\n\n", - "probId": "12948" + "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 10;\n n = Math.floor(n / 10);\n }\n return result;\n}", + "probId": "12931" }, { - "id": "tefPhDO06WwgTAkLRo0X2", + "id": "OMq9nGAGm11PY-z4EsQ4s", "author": "prove-ability", - "code": "function solution(phone_number) {\n var answer = \"\";\n answer += \"*\".repeat(phone_number.length - 4);\n answer += phone_number.slice(phone_number.length - 4, phone_number.length);\n return answer;\n}\n", - "probId": "12948" + "code": "function solution(n) {\n var answer = 0;\n n.toString()\n .split(\"\")\n .forEach((v) => {\n answer += parseInt(v);\n });\n return answer;\n}", + "probId": "12931" }, { - "id": "USWePps9_hgqruqOG7QPU", + "id": "lsVTnwM-8e4pB_oCBzF0q", "author": "codeisneverodd", - "code": "function solution(arr1, arr2) {\n const [row, col] = [arr1.length, arr2[0].length]\n let answer = new Array(row);\n for (let i = 0; i < row; i++) answer[i] = new Array(col)\n //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값\n for (let i = 0; i < row; i++) {\n for (let j = 0; j < col; j++) {\n answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0)\n }\n }\n return answer;\n}\n\n", - "probId": "12949" + "code": "function solution(n) {\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((x) => parseInt(x));\n}", + "probId": "12932" + }, + { + "id": "8RRpcAtRB1unJ874JhZuI", + "author": "chaerin-dev", + "code": "function solution(n) {\n // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환\n return String(n)\n .split(\"\")\n .reverse()\n .map((item) => parseInt(item));\n}", + "probId": "12932" + }, + { + "id": "U6O8TExlKPNEPgeSKe6g9", + "author": "jaewon1676", + "code": "function solution(n) {\n return (n = n\n .toString()\n .split(\"\")\n .reverse()\n .map((o) => (o = parseInt(o))));\n}", + "probId": "12932" }, { - "id": "Q2hQefh7e2imjcK5nhmy7", + "id": "LUf4Zhl2TFK5I7HJzrOH8", "author": "prove-ability", - "code": "function solution(arr1, arr2) {\n var answer = [];\n // 행만큼 반복\n for(let i = 0, len = arr1.length; i < len; i++) {\n const arr = []\n // 열만큼 반복\n for(let j = 0, len = arr1[i].length; j < len; j++) {\n // 각의 배열에서 행을 더해서 arr push\n arr.push(arr1[i][j] + arr2[i][j])\n }\n // 열 만큼 추가된 arr 를 answer 가 추가\n answer.push(arr)\n }\n \n return answer;\n}", - "probId": "12949" + "code": "function solution(n) {\n // 1. 문자열 변환\n // 2. 배열로 변환\n // 3. 배열 반전\n // 4. 정수로 변환\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((v) => parseInt(v));\n}", + "probId": "12932" + }, + { + "id": "DeTwAbPzJQTYHfFSYeyQo", + "author": "yongchanson", + "code": "function solution(n) {\n let answer = [];\n let string = n.toString();\n for (let i = string.length - 1; i >= 0; i--) {\n let slice = string.substr(i, 1) * 1;\n answer.push(slice);\n }\n return answer;\n}", + "probId": "12932" }, { - "id": "RugH3epvTcCTKdmBYwJ_1", + "id": "AaKhktbCwYIvuLdqtVkNd", "author": "codeisneverodd", - "code": "function solution(arr1, arr2) {\n var answer = new Array(arr1.length);\n for (let i = 0; i < arr1.length; i++) {\n answer[i] = new Array(arr1[0].length);\n }\n for (let row = 0; row < answer.length; row++) {\n for (let col = 0; col < answer[0].length; col++) {\n answer[row][col] = arr1[row][col] + arr2[row][col];\n }\n }\n return answer;\n}\n\n", - "probId": "12950" + "code": "function solution(n) {\n return parseInt(\n n\n .toString()\n .split(\"\")\n .sort((a, b) => b - a)\n .join(\"\")\n );\n}", + "probId": "12933" }, { - "id": "7bF-r07E-I_olId-ExYkS", + "id": "Dv63J0O2GNbleNOxMz2Xt", "author": "chaerin-dev", - "code": "function solution(arr1, arr2) {\n var answer = [];\n for (let i = 0; i < arr1.length; i++) {\n let ans_row = [];\n for (let j = 0; j < arr1[0].length; j++) {\n ans_row.push(arr1[i][j] + arr2[i][j]);\n }\n answer.push(ans_row);\n }\n return answer;\n}\n\n", - "probId": "12950" + "code": "function solution(n) {\n // 정수 -> 문자열 -> 배열\n let arrN = String(n).split(\"\");\n // 배열 내림차순 정렬\n arrN.sort((a, b) => b - a);\n // 배열 -> 문자열 -> 정수\n return parseInt(arrN.join(\"\"));\n}", + "probId": "12933" }, { - "id": "Ct8NgJdTl0aMzC4vurbQX", - "author": "yongchanson", - "code": "function solution(A, B) {\n let answer = [];\n\n for (let i = 0; i < A.length; i++) {\n answer[i] = [];\n for (let j = 0; j < A[0].length; j++) {\n answer[i][j] = A[i][j] + B[i][j];\n }\n }\n return answer;\n}\n", - "probId": "12950" + "id": "qfpLTD851pQJuKNfQzp2t", + "author": "prove-ability", + "code": "function solution(n) {\n return parseInt(n.toString().split(\"\").sort((a, b) => b - a).join(\"\"), 10);\n}", + "probId": "12933" }, { - "id": "M-dqxY4ZP9oMfEHXhuASa", + "id": "6QJtzbbAPWi0dYskBUOY5", "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = ''\n answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')\n //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다.\n return answer;\n}\n\n", - "probId": "12951" + "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1;\n}", + "probId": "12934" }, { - "id": "DYQUE5qTA2Uw89TyGHbhL", - "author": "jaewon1676", - "code": "function solution(s) {\n s = s.split(' ').map(el => el.split('').map((el, index) => \n index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ')\n return s;\n}\n// 문자열을 연습하기에 좋은 문제입니다.\n \n// s.split(' ') // 띄어쓰기를 기준으로 나눕니다.\n// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 \n// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase())\n// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. \n// .join('') 작은 배열들을 합쳐줍니다.\n// .join(' ') 큰 배열들을 합쳐줍니다.\n\n", - "probId": "12951" + "id": "60u_rYRNkIfmgaN_kHfcK", + "author": "chaerin-dev", + "code": "function solution(n) {\n // n의 제곱근값을 x에 저장\n let x = Math.sqrt(n);\n // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환\n return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1;\n}", + "probId": "12934" }, { - "id": "KfwHOc5Ihfa3hPdCVYxae", - "author": "yongchanson", - "code": "function solution(s) {\n let answer = [];\n s = s.split(\" \");\n\n for (let i = 0; i < s.length; i++) {\n answer.push(\n s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase()\n );\n }\n return answer.join(\" \");\n}\n\n", - "probId": "12951" + "id": "xcml0sXpJFts_rH6YPv9T", + "author": "prove-ability", + "code": "function solution(n) {\n // n의 제곱근을 x 초기화\n const x = Math.sqrt(n);\n // 양의 정수라면 x + 1 제곱 반환\n if(Number.isInteger(x)) return Math.pow(x + 1, 2)\n // 아니라면 -1 반환\n return -1;\n}", + "probId": "12934" }, { - "id": "apDgqzmFEDMAUGSn6g6Tq", - "author": "RyanDeclan", - "code": "\nfunction solution(s) {\n return s.toLowerCase().split(\" \").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : \"\").join(\" \");\n}\n\n// 이 문제에서 제일 핵심은 \"공백문자가 연속해서 나올 수 있습니다.\" 입니다. 이 부분을 꼭 고려하셔야합니다. \n// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다.\n// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. \n//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다.\n", - "probId": "12951" + "id": "RW2uCQ6hMfNMAoXTJZkEB", + "author": "jaewon1676", + "code": "function solution(n) {\n let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인\n if (s ** 2 === n) return ((s+1) ** 2)\n \n return -1;\n}", + "probId": "12934" }, { - "id": "cff6cJwqQA2w7oIeA802v", - "author": "codeisneverodd", - "code": "function solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", - "probId": "12952" + "id": "LdOofECKfNCcPD_77jFrO", + "author": "yongchanson", + "code": "function solution(n) {\n const sqrt = Math.sqrt(n);\n //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수\n return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1;\n}", + "probId": "12934" }, { - "id": "lOznNSDUcC_bzpXe1H65z", + "id": "B9slrixZJciwmd952NdVz", "author": "codeisneverodd", - "code": "function solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", - "probId": "12952" + "code": "function solution(arr) {\n const index = arr.indexOf(Math.min(...arr));\n arr.splice(index, 1);\n return arr.length === 0 ? [-1] : arr;\n}", + "probId": "12935" }, { - "id": "EWEXMIQZ_zUORJ_OGzM5l", - "author": "codeisneverodd", - "code": "function solution(arr) {\n var answer = 0;\n answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1)\n return answer;\n}\n\nfunction leastCommonMultiple(a, b) {\n return a * b / greatestCommonDivisor(a, b)\n}\n\nfunction greatestCommonDivisor(a, b) {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", - "probId": "12953" + "id": "LoSHgCe7ylxHusDVr2-zX", + "author": "jaewon1676", + "code": "function solution(arr) {\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n if (arr.length < 1) return [-1];\n return arr;\n}\n\n/* 풀이과정 arr [4,3,2,1] 일경우\nMath.min(...arr)은 1\narr.indexOf(1), 1이 있는 index가 3이므로 3 반환.\narr.splice(3, 1) arr의 3번째 index만 제거 해준다.\narr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */", + "probId": "12935" }, { - "id": "A_uwuQj1ePrpyNpqiMlPx", + "id": "iaE7QvR9yOJqvB5MoSqiw", "author": "chaerin-dev", - "code": "function solution(x, n) {\n var answer = [];\n let add_gap = x;\n // n번 반복\n for (let i = 0; i < n; i++) {\n answer.push(x); // 처음 배열에 넣을 x\n x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가\n }\n return answer;\n}\n\n", - "probId": "12954" - }, - { - "id": "lIWQ-juInog00niS7o_HE", - "author": "jaewon1676", - "code": "function solution(n) {\n let str = \"\";\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + \"수\") : (str = str + \"박\");\n }\n return str;\n}\n\n", - "probId": "12954" + "code": "function solution(arr) {\n // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환\n return arr.length ? arr : [-1];\n}", + "probId": "12935" }, { - "id": "UR-2RgTlrfVyRUQJTRTw7", + "id": "Fo72LEa6RrJ9yvfb4xd_j", "author": "prove-ability", - "code": "function solution(x, n) {\n var answer = [];\n let i = 1;\n // n개 지니는 리스트를 리턴해야 합니다\n while (answer.length !== n) {\n // x부터 시작해 x씩 증가하는 숫자\n answer.push(x * i);\n i++;\n }\n return answer;\n}\n", - "probId": "12954" + "code": "function solution(arr) {\n // 최솟값 찾기\n const min = Math.min(...arr);\n // arr 중 min 과 같은 요소의 인덱스 제거\n arr.splice(\n arr.findIndex((num) => num === min),\n 1\n );\n // 만약 arr 가 비어있다면 [-1] 반환\n if (arr.length === 0) return [-1];\n return arr;\n}", + "probId": "12935" }, { - "id": "MsAMDtAG1mRp-elG-Fb43", + "id": "LjNarjFhD8SKHsKs3UTF2", "author": "chaerin-dev", - "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n // 정답을 저장할 문자열 answer\n answer = \"\";\n // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복\n for (let i = 0; i < b; i++) {\n // 가로 길이만큼 문자열에 별 더해주기\n for (let j = 0; j < a; j++) answer += \"*\";\n // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기\n answer += \"\\n\";\n }\n // 정답 출력\n console.log(answer);\n});\n\n", + "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n // 정답을 저장할 문자열 answer\n answer = \"\";\n // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복\n for (let i = 0; i < b; i++) {\n // 가로 길이만큼 문자열에 별 더해주기\n for (let j = 0; j < a; j++) answer += \"*\";\n // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기\n answer += \"\\n\";\n }\n // 정답 출력\n console.log(answer);\n});", "probId": "12969" }, { - "id": "1KsgNKD8b55Dz7H3YWdur", + "id": "6EejGKp__RPMVZw1Jg5Lh", "author": "prove-ability", - "code": "process.stdin.setEncoding('utf8');\nprocess.stdin.on('data', data => {\n const nums = data.split(\" \");\n const n = Number(nums[0]), m = Number(nums[1]);\n \n let result = \"\";\n // 2차원으로 접근\n // 세로 길이만큼 반복\n for(let i = 0; i < m; i++) {\n // 가로 길이만큼 별 더하기\n for(let j = 0; j < n; j++) {\n result += \"*\";\n }\n // 가로가 끝나면 줄내림\n result += \"\\n\";\n }\n console.log(result)\n});\n\n", + "code": "process.stdin.setEncoding('utf8');\nprocess.stdin.on('data', data => {\n const nums = data.split(\" \");\n const n = Number(nums[0]), m = Number(nums[1]);\n \n let result = \"\";\n // 2차원으로 접근\n // 세로 길이만큼 반복\n for(let i = 0; i < m; i++) {\n // 가로 길이만큼 별 더하기\n for(let j = 0; j < n; j++) {\n result += \"*\";\n }\n // 가로가 끝나면 줄내림\n result += \"\\n\";\n }\n console.log(result)\n});", "probId": "12969" }, { - "id": "ahTyH79aaDpsQ17nfjeYz", + "id": "24VCY_CYJhFP96mVIvqwh", "author": "yongchanson", - "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n console.log((\"*\".repeat(a) + `\\n`).repeat(b));\n});\n/*\n<풀이과정>\nrepeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count);\n'*'.repeat(a) : *를 a만큼 반복한다.\n*/\n", + "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n console.log((\"*\".repeat(a) + `\\n`).repeat(b));\n});\n/*\n<풀이과정>\nrepeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count);\n'*'.repeat(a) : *를 a만큼 반복한다.\n*/", "probId": "12969" }, { - "id": "MaUQmia3Usgq-vpq7uLDM", + "id": "Wv-MBFA5NHmUW8uTwXrei", "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = -1;\n let notPairStack = []\n for (let i = 0; i < s.length; i++) notPairStack[notPairStack.length - 1] === s[i] ? notPairStack.pop() : notPairStack.push(s[i])\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}\n\n", - "probId": "12973" - }, - { - "id": "vjfxzgywaYrJAvC-R80MI", - "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = -1;\n let notPairStack = []\n notPairStack.push(s[0])\n for (let i = 1; i < s.length; i++) {\n if (notPairStack[notPairStack.length - 1] === s[i]) {\n notPairStack.pop()\n } else {\n notPairStack.push(s[i])\n }\n }\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}\n\n", - "probId": "12973" - }, - { - "id": "JXHhsAGX3AJMiCgAzRFj0", - "author": "jaewon1676", - "code": "\nfunction solution(s){\n let cnt = 0; // 빼준 부분을 카운트 해줍니다\n let answer;\n let stack = []\n for (let i of s){\n if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다\n stack.pop();\n cnt++;; \n } else {\n stack.push(i)\n }\n }\n \n (s.length / 2 == cnt ? answer = 1 : answer = 0 ) \n // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다\n return answer;\n }\n // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다", - "probId": "12973" - }, - { - "id": "eiSH9i1gu4HxUt3vXCVkf", - "author": "jaewon1676", - "code": "// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript\n\nfunction solution(nums) {\n let len = nums.length, answer = 0;\n\n for (let i = 0; i < len - 2; i++) {\n for (let j = i + 1; j < len - 1; j++) {\n for (let k = j + 1; k < len; k++) {\n if (isPrime(nums[i] + nums[j] + nums[k])) {\n answer++;\n }\n }\n }\n }\n return answer;\n}\n\nconst isPrime = (n) => {\n for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회\n if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다.\n return false;\n }\n }\n return true;\n}\n// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다.\n\n", - "probId": "12977" + "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}", + "probId": "12937" }, { - "id": "U0YBoRETv2oY4MCvBKZAG", + "id": "27S6lHdgIBoq9T6OqNMSt", "author": "chaerin-dev", - "code": "// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수\nconst getCombinations = function (arr, selectNumber) {\n const results = [];\n if (selectNumber === 1) return arr.map((el) => [el]);\n arr.forEach((fixed, index, origin) => {\n const rest = origin.slice(index + 1);\n const combinations = getCombinations(rest, selectNumber - 1);\n const attached = combinations.map((el) => [fixed, ...el]);\n results.push(...attached);\n });\n return results;\n};\n\n// num이 소수인지 여부를 반환하는 함수\nfunction isPrime(num) {\n if (num === 1) return false;\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(nums) {\n const combinationResult = getCombinations(nums, 3);\n let answer = 0;\n combinationResult.forEach((e) => {\n const sum = e[0] + e[1] + e[2];\n if (isPrime(sum)) answer++;\n });\n return answer;\n}\n", - "probId": "12977" - }, - { - "id": "QkBrXKV0bkEF-7cNspKuK", - "author": "pereng11", - "code": "// 다익스트라 + 최소힙 O( N * logN ) \n // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 \nclass MinHeap{\n constructor ()\n {\n this.heap = [ null ];\n }\n // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬\n push ( val )\n {\n this.heap.push(val);\n let childIdx = this.heap.length-1;\n let parentIdx = Math.floor(childIdx / 2);\n while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){\n this.swap( childIdx, parentIdx );\n childIdx = parentIdx;\n parentIdx = Math.floor(childIdx / 2);\n }\n }\n pop ()\n {\n if ( this.heap.length === 1 )\n {\n return undefined;\n }\n // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬\n const minNode = this.heap[ 1 ];\n this.heap[ 1 ] = this.heap[ this.heap.length - 1 ];\n this.heap.pop();\n let parentIdx = 1;\n let leftChildIdx = 2;\n let rightChildIdx = 3;\n while ( parentIdx < this.heap.length )\n {\n // 자식이 없는 경우 \n if ( !this.heap[ leftChildIdx ] )\n {\n break;\n } // 왼쪽 자식만 있는 경우\n else if ( !this.heap[ rightChildIdx ] )\n {\n if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] )\n {\n this.swap( parentIdx, leftChildIdx );\n }\n break;\n // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬\n } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] )\n {\n const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx;\n this.swap( parentIdx, minChildIdx );\n parentIdx = minChildIdx;\n leftChildIdx = parentIdx * 2\n rightChildIdx = parentIdx * 2 + 1;\n } else\n {\n // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지\n break;\n }\n }\n return minNode;\n }\n swap ( idx1, idx2 )\n {\n [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ];\n }\n length ()\n {\n return this.heap.length;\n }\n}\n \nfunction solution ( N, road, K )\n{\n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const heap = new MinHeap();\n\n //시작점 삽입\n heap.push( [sp, 0] );\n\n // 가장 가까운 목적지부터 순서대로 방문\n while ( heap.length() > 1 )\n {\n //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리]\n const [ ep, val ] = heap.pop();\n //아직 방문하지 않은 곳만 처리\n if ( !visited[ ep ] )\n {\n //방문처리, 거리 저장\n visited[ ep ] = true;\n dist[ ep ] = val;\n //방문 지점을 거쳐서 가는 다른 목적지 구하기\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n {\n heap.push( [ nextEp, val + nextVal ] );\n }\n })\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}\n\n", - "probId": "12978" + "code": "function solution(num) {\n return num % 2 == 0 ? \"Even\" : \"Odd\";\n}", + "probId": "12937" }, { - "id": "AeLUQ3svTVceuW-fQCaP-", - "author": "pereng11 O(N * N);", - "code": "//다익스트라 + 선형탐색\nfunction solution ( N, road, K )\n{ \n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const queue = [];\n\n queue.push( [sp, 0] );\n\n while ( queue.length > 0 )\n {\n const [ ep, val ] = queue.shift();\n if ( dist[ ep ] > val )\n {\n dist[ ep ] = val;\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n if ( dist[ nextEp ] > val + nextVal )\n {\n queue.push( [ nextEp, val + nextVal ] );\n }\n } );\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", - "probId": "12978" + "id": "iP9qldlsLGaQ6zSbDN0f5", + "author": "jaewon1676", + "code": "function solution(num) {\n let answer;\n num % 2 == 0 ? (answer = \"Even\") : (answer = \"Odd\");\n // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환.\n return answer;\n}", + "probId": "12937" }, { - "id": "xnPAKJdm4aa-JntJ8SXcR", - "author": "codeisneverodd", - "code": "function solution(n) {\n var ans = 0;\n while (n > 0) {\n if (n % 2 !== 0) {\n n = (n - 1) / 2\n ans++\n } else {\n n = n / 2\n }\n }\n return ans;\n}\n\n", - "probId": "12980" + "id": "U726lfDR_pckQ93HTvQTL", + "author": "prove-ability", + "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}", + "probId": "12937" }, { - "id": "HWd5jAk_1KvMTxe-wQ_J5", + "id": "NCUk0-GHkrAvIwcvfBjRX", "author": "yongchanson", - "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 2;\n n = Math.floor(n / 2);\n }\n return result;\n}\n", - "probId": "12980" + "code": "function solution(num) {\n return num % 2 ? \"Odd\" : \"Even\";\n}", + "probId": "12937" }, { - "id": "9bX9YCA_Q1h-USDue0jpz", + "id": "A-7EsySAVrBLbzbRxj41q", "author": "codeisneverodd", - "code": "function solution(n, words) {\n var answer = [];\n let turn = 1\n for (let i = 1; i < words.length; i++) {\n let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i]))\n if (i % n === 0) turn++\n if (!pass) return [i % n + 1, turn]\n }\n return [0, 0];\n}", - "probId": "12981" + "code": "function solution(n, lost, reserve) {\n let answer = 0;\n let studentClothes = new Array(n + 2).fill(1);\n for (const student of reserve) studentClothes[student] += 1;\n for (const student of lost) studentClothes[student] -= 1;\n for (let i = 1; i < n + 1; i++) {\n if (studentClothes[i] === 0) {\n if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) {\n if (studentClothes[i - 1] === 2) {\n studentClothes[i - 1] -= 1;\n studentClothes[i] += 1;\n } else {\n studentClothes[i + 1] -= 1;\n studentClothes[i] += 1;\n }\n }\n }\n }\n for (const student of studentClothes) {\n answer += student > 0 ? 1 : 0;\n }\n answer -= 2;\n return answer;\n}", + "probId": "42862" }, { - "id": "kR5WdueW66IsAwPc-n5DA", + "id": "Jp_bARhodqdiX76BskYEU", "author": "prove-ability", - "code": "function solution(d, budget) {\n let sum = 0;\n let count = 0;\n // 오름차순 정렬\n d.sort((a, b) => a - b);\n for(let i = 0, len = d.length; i < len; i++) {\n // 작은 수 부터 하나씩 더해준다\n sum += d[i];\n // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환\n if(sum > budget) return count;\n count++;\n }\n \n return count;\n}\n\n", - "probId": "12982" + "code": "function solution(n, lost, reserve) {\n // students 초기화 - 학생들은 체육복 개수 1로 초기화\n let students = Array.from({ length: n }).fill(1);\n\n // 읽어버린 학생 개수 반영\n lost.forEach((target) => {\n students[target - 1]--;\n });\n\n // 여별 체육복 개수 반영\n reserve.forEach((target) => {\n students[target - 1]++;\n });\n\n // 학생들 순차적으로 접근\n for (let i = 0, len = students.length; i < len; i++) {\n // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue\n if (students[i] === 0 || students[i] === 1) continue;\n // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (i !== 0 && students[i - 1] === 0) {\n // 이전 학생 증가\n students[i - 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) {\n // 다음 학생 증가\n students[i + 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n }\n // 체육복 1개 이상을 가진 학생들의 수 반환\n return students.filter((v) => v >= 1).length;\n}", + "probId": "42862" }, { - "id": "xzqkjhnkoPWKPhdb8zO1Z", + "id": "rBOyp_uZuvqujFMkrXKh8", "author": "jaewon1676", - "code": "function solution(d, budget) {\n let count = 0; // 최대 물품 지원 할 수 있는 부서 수 \n d.sort((a, b) => a - b) // 오름차순 정렬\n for (let i=0; i= 1 ? cnt += 1 : null)\n }\n return cnt\n }\n //그리디\n // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다.\n // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다.", + "probId": "42862" }, { - "id": "2nnUU1fVMCqNDpGGz4at2", - "author": "codeisneverodd", - "code": "//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90\nfunction solution(strs, t) {\n const tLength = t.length; //자주 쓰는 값 미리 계산\n //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다.\n const minCountToIndex = new Array(tLength).fill(Infinity);\n for (let currentIndex = 0; currentIndex < tLength; currentIndex++) {\n //내가 검사할 부분은 t의 0~currentIndex 영역\n const currentSlice = t.slice(0, currentIndex + 1);\n for (const str of strs) {\n //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면\n if (currentSlice.endsWith(str)) {\n //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이\n const frontLength = currentIndex - str.length + 1;\n if (frontLength === 0) {\n //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각\n minCountToIndex[currentIndex] = 1;\n } else {\n //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값\n minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1);\n }\n }\n }\n }\n //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴\n return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1];\n}\n\n//리드미 테스트용 코멘트\n", - "probId": "12983" + "id": "4mh35T96w0o_dN-4qMn3P", + "author": "chaerin-dev", + "code": "function solution(n, lost, reserve) {\n // 학생들의 체육복 개수를 저장할 배열 students\n // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정\n // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음\n const students = Array.from({ length: n + 1 }, () => 1);\n\n // 체육복 분실/여분 정보 students 배열에 반영\n lost.forEach((lostStudent) => students[lostStudent]--);\n reserve.forEach((reserveStudent) => students[reserveStudent]++);\n\n // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt\n let cnt = 0;\n students.forEach((student, i) => {\n // 현재 인덱스의 학생이 체육복이 없다면\n if (student === 0) {\n // 바로 앞 학생이 체육복 여분이 있다면\n if (students[i - 1] === 2) {\n // 바로 앞 학생에게 체육복 빌리기\n students[i - 1]--;\n student++;\n }\n // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면\n else if (students[i + 1] === 2) {\n // 바로 뒤 학생에게 체육복 빌리기\n students[i + 1]--;\n student++;\n }\n // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음\n else cnt++;\n }\n });\n\n // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수\n return n - cnt;\n}", + "probId": "42862" }, { - "id": "qmH1FZ0amR5WCdpo-pFph", + "id": "9Q0lkYcedv8SgcgtzudB0", "author": "codeisneverodd", - "code": "\nfunction solution(n, a, b) {\n let currentRound = 1;\n const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호\n while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다.\n if (myNextNumber(a) === myNextNumber(b)) break\n a = myNextNumber(a)\n b = myNextNumber(b)\n currentRound++\n }\n return currentRound\n}\n\n", - "probId": "12985" + "code": "function solution(n, m) {\n const gcd = greatestCommonDivisor(n, m);\n return [gcd, (n * m) / gcd];\n}\n\nconst greatestCommonDivisor = (a, b) => {\n if (b === 0) return a;\n else return greatestCommonDivisor(b, a % b);\n};", + "probId": "12940" }, { - "id": "OYSlsxTmSALOkL01lS_IT", - "author": "le2sky", - "code": "function solution(n, a, b) {\n let arr = Array.from({ length: n }, () => 0)\n arr[b - 1] = \"B\"\n arr[a - 1] = \"A\"\n\n const isDiff = () => {\n return (\n (arr.indexOf(\"A\") + 1 > arr.length / 2 && arr.indexOf(\"B\") + 1 <= arr.length / 2) ||\n (arr.indexOf(\"A\") + 1 <= arr.length / 2 && arr.indexOf(\"B\") + 1 > arr.length / 2)) ? true : false\n };\n const isLeft = () => {\n return (arr.indexOf(\"A\") + 1 > arr.length / 2) ? false : true\n };\n\n //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴\n while (!isDiff()) {\n if (isLeft()) {\n arr.splice(arr.length / 2)\n } else {\n arr.splice(0, arr.length / 2)\n }\n }\n return Math.log2(arr.length)\n}\n ", - "probId": "12985" + "id": "ewsZ9r3rqM2clbYhxTpQY", + "author": "chaerin-dev", + "code": "function solution(n, m) {\n // 최대공약수 구하기\n let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m));\n // 최소공배수 구하기\n let lcm = (n, m) => (n * m) / gcd(n, m);\n // 결과 출력\n return [gcd(n, m), lcm(n, m)];\n}", + "probId": "12940" }, { - "id": "rhKhtmaIbK4IlbLPqzs8D", - "author": "ssi02014", - "code": "\n/**\n * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화\n * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 \n * (테스트 케이스 11 ~ 15 100ms~200ms 차이)\n */\nfunction solution(X, Y) {\n const commons = [];\n const obj = {};\n\n for (const el of X) {\n obj[el] = (obj[el] || 0) + 1;\n }\n\n for (const el of Y) {\n if (obj[el]) {\n commons.push(el);\n obj[el]--;\n }\n }\n\n commons.sort((a, b) => b - a);\n\n if (!commons.length) return \"-1\";\n else if (commons[0] === \"0\") return \"0\";\n return commons.join(\"\");\n}", - "probId": "131128" + "id": "Jr7B5dlwFDqEXbETHep2j", + "author": "yongchanson", + "code": "function solution(a, b) {\n let gcd = 0;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if ((a % i) + (b % i) === 0) {\n gcd = i;\n }\n }\n return [gcd, (a / gcd) * b];\n}", + "probId": "12940" }, { - "id": "duFz7ZI1jdV5kkzo7rRSH", - "author": "codeisneverodd", - "code": "function solution(str1, str2) {\n var answer = 0;\n let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2)\n const union = new Set([...compare1, ...compare2])\n let multiIntersectionLen = 0, multiUnionLen = 0\n for (const slice of union) {\n const compare1Count = compare1.filter(x => x === slice).length,\n compare2Count = compare2.filter(x => x === slice).length\n multiIntersectionLen += Math.min(compare1Count, compare2Count)\n multiUnionLen += Math.max(compare1Count, compare2Count)\n }\n answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536)\n return answer;\n}\n\nfunction verifiedSlices(str) {\n const onlyAlphabet = /[a-zA-Z]{2}/\n let result = []\n for (let i = 0; i < str.length - 1; i++) {\n const slice = str.slice(i, i + 2)\n if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase())\n }\n return result\n}\n\n", - "probId": "17677" + "id": "MXwkymbFd1kz6TIgqL_fK", + "author": "prove-ability", + "code": "function solution(sizes) {\n // 가로, 세로 중 큰 값을 가로 길이로 변경(스압)\n sizes.forEach(([width, height], index) => {\n if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]];\n });\n\n // 가로, 세로 각각 큰 값 추출\n const widthMax = Math.max(...sizes.map(v => v[0]));\n const widthHeight = Math.max(...sizes.map(v => v[1]));\n\n return widthMax * widthHeight;\n}", + "probId": "86491" }, { - "id": "7o_h_eZ1UNpjfK2Hm09AM", - "author": "jaewon1676", - "code": "function solution(str1, str2) {\n\n str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌.\n str2 = str2.toUpperCase();\n let arr1 = new Array() // 빈 객체를 만들어줌.\n let arr2 = new Array()\n \n for (var i = 0; i < str1.length - 1; i++) {\n let tmp = str1.substr(i, 2) // i부터 2개 ( i, i+1 )\n if (tmp.search(/[^A-Z]/g) >= 0) {\n // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) \n // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환.\n continue\n }\n arr1.push(tmp)\n }\n \n for (var i = 0; i < str2.length - 1; i++) {\n let tmp = str2.substr(i, 2)\n if (tmp.search(/[^A-Z]/g) >= 0) {\n continue\n }\n arr2.push(tmp)\n }\n arr1.sort()\n arr2.sort()\n var a = [] // 중복포함, 교집합 배열\n var b = [] // 중복포함, 합집합 배열\n \n for (var i = 0; i < arr2.length; i++) {\n if (arr1.indexOf(arr2[i]) >= 0) { \n // arr1 객체에 arr2[i]과 같은 값이 있는지 확인.\n // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. \n a.push(arr1.splice(arr1.indexOf(arr2[i]), 1))\n }\n // 교집합이 성립되지 않으면 실행.\n b.push(arr2[i])\n }\n\n for (var i = 0; i < arr1.length; i++) {\n b.push(arr1[i])\n }\n\n // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함\n if (b.length === 0) return 65536\n if (a.length === 0) return 0\n\n return Math.floor((a.length / b.length) * 65536)\n}\n", - "probId": "17677" + "id": "zTwUH1w_o_TSBqvU8Ui72", + "author": "codeisneverodd", + "code": "function solution(sizes) {\n for (let card of sizes) {\n if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]];\n }\n\n const maxWidth = Math.max(...sizes.map(card => card[0]));\n const maxHeight = Math.max(...sizes.map(card => card[1]));\n return maxWidth * maxHeight;\n}", + "probId": "86491" }, { - "id": "7M4jDh3oqulLesOJMxF_S", + "id": "94qlDqEmbjX9Yz8rrbh1O", "author": "codeisneverodd", - "code": "function solution(m, n, board) {\n board = board.map(r => r.split(''));\n const getSquare = ([r, c]) => [\n [r, c],\n [r, c + 1],\n [r + 1, c],\n [r + 1, c + 1],\n ];\n\n const isSquare = ([r, c]) => {\n if (board[r][c] === '@') return false;\n return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1;\n };\n\n const remove = () => {\n const removeArr = [];\n for (let r = 0; r < m - 1; r++) {\n for (let c = 0; c < n - 1; c++) {\n if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v));\n }\n }\n removeArr.forEach(([r, c]) => {\n board[r][c] = '@';\n });\n return removeArr.length !== 0;\n };\n\n const pull = () => {\n for (let c = 0; c < n; c++) {\n const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@');\n const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn];\n resultColumn.forEach((v, r) => {\n board[r][c] = v;\n });\n }\n return board;\n };\n\n while (remove()) {\n pull();\n }\n\n return board.flat().filter(v => v === '@').length;\n}\n", - "probId": "17679" + "code": "function solution(num) {\n let answer = 0;\n while (answer <= 500) {\n if (num === 1) return answer;\n num = num % 2 === 0 ? num / 2 : num * 3 + 1;\n answer += 1;\n }\n return -1;\n}", + "probId": "12943" }, { - "id": "LtaDzHn9fU4_8XV9fhrHJ", - "author": "codeisneverodd", - "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = []\n if (cacheSize === 0) return 5 * cities.length\n for (const city of cities) {\n const cityLC = city.toLowerCase()\n if (cache.includes(cityLC)) {\n cache.splice(cache.indexOf(cityLC), 1)\n cache.unshift(cityLC)\n answer += 1\n } else {\n if (cache.length >= cacheSize) cache.pop()\n cache.unshift(cityLC)\n answer += 5\n }\n }\n return answer;\n}\n\n", - "probId": "17680" + "id": "Dm96pBci7mCGP2WUd4bXY", + "author": "chaerin-dev", + "code": "function solution(num) {\n // 작업을 반복한 횟수를 저장할 변수\n let cnt = 0;\n // num이 1이 되면 반복 종료\n while (num > 1) {\n // 작업을 500번 반복해도 1이 되지 않으면 -1 반환\n if (cnt == 500) return -1;\n // 작업 반복 횟수 증가\n cnt++;\n // 입력된 수가 짝수이면 2로 나누기\n if (num % 2 == 0) num /= 2;\n // 입력된 수가 홀수이면 3을 곱하고 1을 더하기\n else {\n num *= 3;\n num++;\n }\n }\n // 작업을 반복한 횟수 반환\n return cnt;\n}", + "probId": "12943" }, { - "id": "Re9Ug1pjgpGt9jkgd-PqY", + "id": "6Pz55YxSqwfiwool34rmC", "author": "jaewon1676", - "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = [];\n \n //캐시 크기가 0인 경우는 따로 처리\n if (cacheSize === 0) return cities.length * 5;\n \n while (cities.length != 0) {\n // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다.\n const city = cities.shift().toLowerCase(); \n // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss)\n if (cache.includes(city)) { \n // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고,\n cache.splice(cache.indexOf(city), 1);\n // 맨 뒤로 push 해준다.\n cache.push(city);\n // cache hit\n answer += 1;\n } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다.\n if (cache.length === cacheSize) {\n cache.shift();\n }\n // 새로운 캐시 맨 뒤로 push\n cache.push(city);\n // cache miss\n answer += 5;\n }\n }\n return answer;\n }\n /* LRU 알고리즘\n n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다.\n n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면\n 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */\n ", - "probId": "17680" + "code": "function solution(num) {\n var answer = 0;\n // num이 1이 아니고, answer이 500이 아니면 진행.\n // 두 가지 조건중 하나라도 맞지 않으면 while문 종료.\n while (num != 1 && answer != 500) {\n //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다.\n num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1);\n answer++;\n }\n return num == 1 ? answer : -1;\n}", + "probId": "12943" }, { - "id": "kXNw9dB18q8-sbaNbQbZ6", - "author": "codeisneverodd", - "code": "function solution(n, arr1, arr2) {\n var answer = [];\n let mapA = [];\n let mapB = [];\n for (let i = 0; i < n; i++) {\n let rowArrA = arr1[i].toString(2).split(\"\");\n let rowArrB = arr2[i].toString(2).split(\"\");\n for (let j = 0, len = rowArrA.length; j < n - len; j++)\n rowArrA.unshift(\"0\");\n for (let j = 0, len = rowArrB.length; j < n - len; j++)\n rowArrB.unshift(\"0\");\n mapA.push(rowArrA);\n mapB.push(rowArrB);\n }\n let answer2D = mapA.slice();\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n answer2D[i][j] = mapA[i][j] === \"0\" && mapB[i][j] === \"0\" ? \" \" : \"#\";\n }\n }\n answer = answer2D.map((row) => row.join(\"\"));\n return answer;\n}\n\n", - "probId": "17681" + "id": "UzH0LHREY5CZkFDEx6SnK", + "author": "prove-ability", + "code": "function solution(num) {\n let count = 0;\n\n // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.\n while (num !== 1) {\n // 입력된 수가 짝수라면 2로 나눕니다.\n if (num % 2 === 0) num /= 2;\n // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.\n else num = num * 3 + 1;\n count++;\n // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요\n if (count > 500) return -1;\n }\n\n return count;\n}", + "probId": "12943" }, { - "id": "gtu1jLXU3hbqVsM0QSlzz", - "author": "jaewon1676", - "code": "function solution(n, arr1, arr2) {\n let answer = [];\n for (let i = 0; i < n; i++) {\n let temp = (arr1[i] | arr2[i]).toString(2);\n let line = []; // 한 행의 모든 2진수 보관\n\n for (let j = temp.length - n; j < temp.length; j++) {\n if (temp[j] == 1) {\n line.push(\"#\");\n } else {\n line.push(\" \");\n }\n }\n answer.push(line.join(\"\"));\n }\n return answer;\n}\n\n/* 풀이 과정\n1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다.\n2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다.\n3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/\n", - "probId": "17681" + "id": "7hfenXvttHxJdStgWjkFM", + "author": "yongchanson", + "code": "function solution(num) {\n let count = 0;\n while (num !== 1) {\n if (count++ === 500) return -1;\n num = num % 2 ? num * 3 + 1 : num / 2;\n }\n return count;\n}", + "probId": "12943" }, { - "id": "mHMHFPhv11i3PZOKKm7vS", - "author": "jaewon1676", - "code": "function solution(dartResult) {\n var answer = 0;\n let score = 0;\n let cnt = [];\n\n for (let i = 0; i < dartResult.length; i++) {\n //점수가 주어질때\n if (!isNaN(dartResult[i])) {\n // i가 1인 경우는 10점, 그외에는 점수\n score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]);\n //보너스 S일때\n } else if (dartResult[i] === \"S\") {\n cnt.push(score);\n //보너스 D일때\n } else if (dartResult[i] === \"D\") {\n cnt.push(Math.pow(score, 2));\n //보너스 T일때\n } else if (dartResult[i] === \"T\") {\n cnt.push(Math.pow(score, 3));\n //옵션 *일떄\n } else if (dartResult[i] === \"*\") {\n cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2;\n cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2;\n //옵션 #일때\n } else if (dartResult[i] === \"#\") {\n cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1];\n }\n }\n //3개의 점수 합산\n answer = cnt.reduce((acc, cur) => acc + cur, 0);\n return answer;\n}\n", - "probId": "17682" + "id": "iPMEN0ayXeCq9KiQBcBKJ", + "author": "codeisneverodd", + "code": "function solution(board, moves) {\n let answer = 0;\n const length = board.length\n let basket = []\n moves.forEach(move => {\n for (let i = 0; i < length; i++) {\n const item = board[i][move - 1]\n if (item !== 0) {\n if (basket[basket.length - 1] !== item) {\n basket.push(item)\n } else {\n basket.pop()\n answer += 2\n }\n board[i][move - 1] = 0\n break\n }\n }\n })\n\n return answer;\n}", + "probId": "64061" }, { - "id": "qzO7OtG_eo0UIl-p59RGU", - "author": "minjongbaek", - "code": "function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수\n return m\n .replace(/C#/g, 'c')\n .replace(/D#/g, 'd')\n .replace(/F#/g, 'f')\n .replace(/G#/g, 'g')\n .replace(/A#/g, 'a');\n}\n\nfunction solution(m, musicinfos) {\n\n // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다.\n // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다.\n // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다.\n\n const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다.\n \n const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다.\n for (const info of musicinfos) {\n const [start, finish, title, _score] = info.split(',');\n // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다.\n const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5))));\n \n const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다.\n\n // 재생된 멜로디를 구합니다.\n // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다.\n // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다.\n const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration);\n if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다.\n map.set(title, {score, playScore});\n }\n }\n \n // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다.\n // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다.\n const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length);\n return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다.\n}", - "probId": "17683" + "id": "S52gfdXl4Vf3G1iqQsGZk", + "author": "jaewon1676", + "code": "function solution(board, moves) {\n var answer = 0; // 인형을 터뜨린 횟수\n let basket = []; // 바구니\n let crane = 0; // 크레인의 행의 위치\n for (let i = 0; i < moves.length; i++) {\n crane = moves[i] - 1; // crane = 0\n for (let j = 0; j < board.length; j++) {\n if (board[j][crane] == 0)\n else if (board[j][crane] != 0) {\n basket.push(board[j][crane])\n board[j][crane] = 0\n if (basket[basket.length - 1] == basket[basket.length - 2]) {\n basket.pop();\n basket.pop();\n answer += 2;\n }\n break;\n }\n }\n }\n\n return answer;\n}\n\n/* 풀이 과정\n1. 입력받은 moves의 length만큼 for문을 돌린다.\n2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다.\n3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다.\n4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */", + "probId": "64061" }, { - "id": "3LKcL8nFJi6eAdg8B1-8I", - "author": "codeisneverodd", - "code": "function solution(msg) {\n const outputs = [];\n const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))];\n let [start, end] = [0, 1];\n\n const doesDictHave = (start, end) => dict.includes(msg.substring(start, end));\n\n const getInput = (start, end) => {\n if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end];\n return getInput(start, end + 1);\n };\n\n const addToDict = (start, end) => {\n if (doesDictHave(start, end)) return;\n dict.push(msg.substring(start, end));\n };\n\n const addToOutputs = (start, end) => {\n if (!doesDictHave(start, end)) return;\n outputs.push(dict.indexOf(msg.substring(start, end)));\n };\n\n while (start < msg.length) {\n [start, end] = getInput(start, end);\n addToDict(start, end + 1);\n addToOutputs(start, end);\n start = end;\n }\n return outputs;\n}\n\n", - "probId": "17684" + "id": "pfHtfsZVkkHiayrYTOHoG", + "author": "chaerin-dev", + "code": "function solution(board, moves) {\n let n = board.length;\n\n // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경\n board = board.flat();\n let rotatedBoard = Array.from({ length: n }, (i) => []);\n for (let i = 0; i < board.length; i++) {\n if (board[i]) rotatedBoard[i % n].push(board[i]);\n }\n\n // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기\n let stack = [];\n let cnt = 0;\n for (let move of moves) {\n let doll = rotatedBoard[move - 1].shift();\n if (doll === undefined) continue;\n if (stack[stack.length - 1] === doll) {\n stack.pop();\n cnt += 2;\n } else {\n stack.push(doll);\n }\n }\n\n return cnt;\n}", + "probId": "64061" }, { - "id": "CnRaYPttgdAv_6iyFDK-o", - "author": "ssi02014", - "code": "function solution(msg) {\n const result = [];\n const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i))\n\n // 시간 복잡도 O(N^2)\n const lastWordAndCompression = msg.split(\"\").reduce((acc, cur) => {\n const nextWord = acc + cur;\n const nextWordIdx = dict.indexOf(nextWord);\n const prevWordIdx = dict.indexOf(acc);\n\n if (nextWordIdx !== -1) return acc + cur;\n dict.push(nextWord);\n\n if (prevWordIdx !== -1) result.push(prevWordIdx + 1);\n return cur;\n }, \"\");\n\n result.push(dict.indexOf(lastWordAndCompression) + 1);\n return result;\n}\n", - "probId": "17684" + "id": "ZCxqB6BbJUzqxD9zJ5HfP", + "author": "chaerin-dev", + "code": "function solution(numbers, hand) {\n // 키패드를 4행 3열의 이차원 배열이라고 생각\n\n // leftRow, leftCol: 왼손의 현재 위치\n let [leftRow, leftCol] = [3, 0];\n // rightRow, rightCol: 오른손의 현재 위치\n let [rightRow, rightCol] = [3, 2];\n // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열\n let result = '';\n\n // 눌러야할 각 번호가\n numbers.forEach(e => {\n // 1/4/7이면 왼손으로 눌러야하므로\n if (e === 1 || e === 4 || e === 7) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 3/6/9이면 오른손으로 눌러야하므로\n else if (e === 3 || e === 6 || e === 9) {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2];\n // result 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n\n // 2/5/8/0이면\n else {\n // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌\n if (e === 0) e = 11;\n\n // leftRow, leftCol: 다음에 눌러야 할 번호의 위치\n let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1];\n // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol);\n // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol);\n\n // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로\n if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [nextRow, nextCol];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로\n else {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [nextRow, nextCol];\n // reuslt 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n }\n });\n\n // result 문자열 반환\n return result;\n}", + "probId": "67256" }, { - "id": "7X9KWlXYfznTT-GVNSKqw", + "id": "68jNGoyytzcOlAS5SyGFJ", "author": "codeisneverodd", - "code": "function solution(files) {\n var answer = [];\n const numberRegex = /[0-9]+/\n answer = files.sort((a, b) => {\n const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)]\n const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()]\n const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])]\n return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0\n })\n return answer;\n}", - "probId": "17686" + "code": "function solution(numbers, hand) {\n let leftNum = 10;\n let rightNum = 12;\n return numbers\n .map(num => {\n if (num === 0) {\n num = 11;\n }\n if (num % 3 === 1) {\n return leftTo(num);\n } else if (num % 3 === 0) {\n return rightTo(num);\n } else {\n const numLocation = numToLocation(num);\n const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation);\n const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation);\n if (leftDistance === rightDistance) {\n return hand === 'left' ? leftTo(num) : rightTo(num);\n } else if (leftDistance < rightDistance) {\n return leftTo(num);\n } else {\n return rightTo(num);\n }\n }\n })\n .join('');\n\n function leftTo(num) {\n leftNum = num;\n return 'L';\n }\n\n function rightTo(num) {\n rightNum = num;\n return 'R';\n }\n}", + "probId": "67256" }, { - "id": "zTD6BXf5pWMerh8tTiTEc", + "id": "4MhQup3fXXKL9MmSX8T8n", "author": "codeisneverodd", - "code": "function solution(n, t, m, p) {\n let queue = [], result = [], currentNumDecimal = -1, turn = 0\n while (result.length < t) {\n if (queue.length === 0) {\n currentNumDecimal++\n currentNumDecimal.toString(n).split('').forEach(x => queue.push(x))\n }\n const currentChar = queue.shift()\n if (turn % m === p - 1) result.push(currentChar)\n turn++\n }\n return result.join('').toUpperCase()\n}", - "probId": "17687" + "code": "function solution(arr) {\n return arr.reduce((acc, curr) => acc + curr) / arr.length;\n}", + "probId": "12944" }, { - "id": "qmwju0x9ffIeWB72tvWUX", - "author": "prove-ability", - "code": "function solution(maps) {\n // BFS 활용\n const row = maps.length - 1, col = maps[0].length - 1;\n \n // 큐 - 시작 위치 y, x, 이동 거리\n const queue = [[0, 0, 1]];\n \n while(queue.length) {\n // 큐 추출\n let [y, x, count] = queue.shift();\n // 상대 팀 진영이라면\n if(y === row && x === col) return count;\n // 동서남북 확인\n for(let i = 0; i < 4; i++) {\n const [dy, dx] = DIRECTION[i];\n // 다음 길 위치\n const nextY = dy + y, nextX = dx + x;\n // 맵 밖으로 나간다면\n if(isOut(nextY, nextX, row, col)) continue;\n // 도착한 곳이 벽이라면\n if(maps[nextY][nextX] === 0) continue;\n // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지\n maps[nextY][nextX] = 0;\n // 다음에 확인해야하는 곳 큐에 추가\n // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 \n queue.push([nextY, nextX, count + 1]);\n // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음..\n }\n }\n \n return -1;\n}\n\n// 상 우 하 좌\nconst DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]];\n\n// 사용이 가능한 길인지 확인하는 함수\nconst isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col;", - "probId": "1844" + "id": "hj6e3dHd8OFlm9FdM7EjK", + "author": "jaewon1676", + "code": "function solution(arr) {\n var answer = 0;\n for (var i = 0; i < arr.length; i++) {\n answer += arr[i];\n }\n return answer / arr.length;\n}", + "probId": "12944" }, { - "id": "hdgHVEJt3d36OpPvA8mLx", - "author": "jaewon1676", - "code": "function solution(nums) {\n let max = nums.length / 2; // N / 2\n let set = [...new Set(nums)]; // 중복을 없앤다.\n return set.length > max ? max : set.length;\n}\n\n/* 풀이 과정\n1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다.\n2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다.\n3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 \n 두가지 경우의 수로 좁혀진다. */\n\n", - "probId": "1845" + "id": "HAOzveHmR3uEuIw0sngUX", + "author": "chaerin-dev", + "code": "function solution(arr) {\n // arr의 모든 요소를 sum에 더힘\n let sum = arr.reduce((sum, e) => sum + e);\n // sum을 arr의 요소의 갯수로 나눈 후 반환\n return sum / arr.length;\n}", + "probId": "12944" }, { - "id": "fbxEGFJKAA8jKcAc-RCBG", + "id": "gm7pLWLd9DyjvgskAV2FJ", "author": "prove-ability", - "code": "function solution(nums) {\n var answer = 0;\n // set 을 사용해 중복 제거\n const set = new Set();\n nums.forEach((num) => {\n set.add(num);\n });\n // set 의 사이즈가 N/2 보다 크다면 N/2 반환\n // 그렇지 않다면 set size 반환\n if (set.size > nums.length / 2) answer = nums.length / 2;\n else answer = set.size;\n\n return answer;\n}\n\n", - "probId": "1845" + "code": "function solution(arr) {\n var answer = 0;\n arr.forEach((num) => {\n answer += num;\n });\n return answer / arr.length;\n}", + "probId": "12944" }, { - "id": "BBtETRTECdLHgxaoTde5B", - "author": "yongchanson", - "code": "function solution(nums) {\n const unique = nums.filter((element, index) => {\n return nums.indexOf(element) === index;\n });\n\n return unique.length > nums.length / 2 ? nums.length / 2 : unique.length;\n}\n\n", + "id": "MmmrvwJ7lrAf31EdIDPfg", + "author": "codeisneverodd", + "code": "function solution(nums) {\n const numLen = nums.length;\n const setLen = [...new Set(nums)].length;\n return numLen / 2 >= setLen ? setLen : numLen / 2;\n}", "probId": "1845" }, { - "id": "1iWanVxWW5uAekOwJzY2H", - "author": "chaerin-dev", - "code": "function solution(nums) {\n // 가질 수 있는 폰켓몬의 수\n const getCnt = nums.length / 2;\n // 폰켓몬 종류의 수\n const setSize = new Set(nums).size;\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면\n // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면\n // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수\n return setSize > getCnt ? getCnt : setSize;\n}\n", + "id": "yhtVkzIR36dqONCwB25S2", + "author": "jaewon1676", + "code": "function solution(nums) {\n let max = nums.length / 2; // N / 2\n let set = [...new Set(nums)]; // 중복을 없앤다.\n return set.length > max ? max : set.length;\n}\n\n/* 풀이 과정\n1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다.\n2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다.\n3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 \n 두가지 경우의 수로 좁혀진다. */", "probId": "1845" }, { - "id": "bAaCGsM5iCuC7mGMmoTCy", - "author": "jaewon1676", - "code": "function solution(participant, completion) {\n var answer = \"\";\n for (let i = 0; i < participant.length; i++) {\n for (let j = 0; j < completion.length; j++) {\n if (participant[i] === completion[j]) {\n console.log(participant, completion);\n participant.splice(i, 1);\n completion.splice(j, 1);\n i--;\n j--;\n console.log(participant, completion);\n break;\n }\n }\n }\n\n return participant[0];\n}\n\n//완벽한 정답이 아닙니다.\n", - "probId": "42576" + "id": "4TV8GYuTck0WnYo6CflGw", + "author": "prove-ability", + "code": "function solution(nums) {\n var answer = 0;\n // set 을 사용해 중복 제거\n const set = new Set();\n nums.forEach((num) => {\n set.add(num);\n });\n // set 의 사이즈가 N/2 보다 크다면 N/2 반환\n // 그렇지 않다면 set size 반환\n if (set.size > nums.length / 2) answer = nums.length / 2;\n else answer = set.size;\n\n return answer;\n}", + "probId": "1845" }, { - "id": "MRelW4KkwG2E6xq1rsk2j", - "author": "hyosung", - "code": "function solution(participant, completion) {\n let answer = \"\";\n // 2개 이상을 가진 특정값의 갯수 기록용 변수\n let max = 0;\n // 반복문 내부에서 set.has 를 사용하기 위해 Set 선언 (처음에는 Array.findIndex 를 사용)\n const set = new Set([...completion]);\n // 반복문 최적화 - 반복되던 연산 제거 (값 비교, length)\n const length = participant.length;\n for (let i = length; i--; ) {\n // 완주자 명단에 없다면 완주하지 못한 참가자 이므로 바로 종료\n if (!set.has(participant[i])) {\n answer = participant[i];\n break;\n }\n // 배열안에 특정값 갯수 확인\n let count = participant.reduce(\n (a, v) => (v === participant[i] ? a + 1 : a),\n 0\n );\n // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면\n // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다\n if (count > 1 && max < count) {\n answer = participant[i];\n // 조건에 맞는 동명이인 수 저장\n max = count;\n }\n }\n return answer;\n}\n\n//완벽한 정답이 아닙니다.\n", - "probId": "42576" + "id": "mYSk3xSypHHsW1bV15ymJ", + "author": "yongchanson", + "code": "function solution(nums) {\n const unique = nums.filter((element, index) => {\n return nums.indexOf(element) === index;\n });\n\n return unique.length > nums.length / 2 ? nums.length / 2 : unique.length;\n}", + "probId": "1845" }, { - "id": "ptZh9FvcxZrBY1JrrMXrP", + "id": "1buPydN5hvSMYxiJWJhWk", "author": "chaerin-dev", - "code": "function solution(participant, completion) {\n var answer = \"\";\n // 두 배열을 정렬한다!\n participant.sort();\n completion.sort();\n // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!!\n // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로\n // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만\n // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음!\n for (let i = 0; i < participant.length; i++) {\n if (participant[i] != completion[i]) {\n answer = participant[i];\n break;\n }\n }\n return answer;\n}\n", - "probId": "42576" - }, - { - "id": "apqELrA9EyeBOnc0P8Qh4", - "author": "codeisneverodd", - "code": "function solution(clothes) {\n\tvar answer = 1;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes)\n\t\tspyWear[clothNPart[1]] = (spyWear[clothNPart[1]] || 0) + 1;\n\tfor (const part in spyWear) answer *= spyWear[part] + 1;\n\treturn answer - 1;\n}\n\n", - "probId": "42578" + "code": "function solution(nums) {\n // 가질 수 있는 폰켓몬의 수\n const getCnt = nums.length / 2;\n // 폰켓몬 종류의 수\n const setSize = new Set(nums).size;\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면\n // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면\n // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수\n return setSize > getCnt ? getCnt : setSize;\n}", + "probId": "1845" }, { - "id": "SCSNZR6z1-YDPMnvJEyj9", + "id": "1gdqtkUhXrhHbYE9Duzvi", "author": "codeisneverodd", - "code": "function solution(clothes) {\n\tvar answer = 0;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes) {\n\t\tif (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = [];\n\t\tspyWear[clothNPart[1]].push(clothNPart[0]);\n\t}\n\tconst clothesCount = [];\n\tfor (const part in spyWear) clothesCount.push(spyWear[part].length + 1);\n\tanswer =\n\t\tclothesCount.reduce((previous, current) => previous * current, 1) - 1;\n\treturn answer;\n}\n", - "probId": "42578" + "code": "function solution(x) {\n const sum = x\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr);\n return x % sum === 0;\n}", + "probId": "12947" }, { - "id": "J8oQ-NtfQLtuQ0mJjzWiB", - "author": "hyosung", - "code": "function solution(clothes) {\n\tlet answer = 1;\n\t// 옷 종류\n\tconst types = {};\n\t// 반복문 최적화 - length, 비교연산 제거\n\tconst length = clothes.length;\n\tfor (let i = length; i--; ) {\n\t\t// 해당 옷의 종류가 없다면 종류 1\n\t\tif (!types[clothes[i][1]]) types[clothes[i][1]] = 1;\n\t\t// 해당 옷의 종류가 있다면 종류 증가\n\t\telse types[clothes[i][1]] += 1;\n\t}\n\t// (종류 별 값 + 1 ) 을 다 곱셈\n\tObject.values(types).forEach((v) => {\n\t\tanswer *= v + 1;\n\t});\n\n\treturn answer - 1;\n}\n\n", - "probId": "42578" + "id": "KzMzxIkslLO020nqk83NZ", + "author": "chaerin-dev", + "code": "function solution(x) {\n // x의 각 자리에 접근하기 위해 x를 문자열로 변환\n let x_str = x.toString();\n // 각 자릿수의 합을 저장할 변수\n let sum_of_digits = 0;\n // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌\n for (let i = 0; i < x_str.length; i++) {\n sum_of_digits += Number(x_str[i]);\n }\n // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환\n return x % sum_of_digits == 0;\n}", + "probId": "12947" }, { - "id": "gG88eNSpS3vQuYezshN7w", + "id": "wofD5Hv4OpVm-o9uHmILl", "author": "jaewon1676", - "code": "function solution(clothes) {\n var answer = 1;\n var obj={};\n for(var i=0;i\n clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1)\n );\n\n // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐\n // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나)\n // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨\n let answer = 1;\n for (let key of Object.keys(clothsObj)) {\n answer *= clothsObj[key] + 1;\n }\n\n // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기\n return answer - 1;\n}", - "probId": "42578" + "id": "DyuxxksmPktyA4cq5Lqum", + "author": "prove-ability", + "code": "function solution(x) {\n var answer = true;\n // 모든 자릿수의 합을 구한다\n const sum = x\n .toString()\n .split(\"\")\n .reduce((acc, cur) => acc + parseInt(cur, 10), 0);\n // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환\n if (x % sum !== 0) return false;\n return answer;\n}", + "probId": "12947" }, { - "id": "CJkvJQRfEnwXHhoC_9dy0", + "id": "Y5u7p4htZYqblMzR79zHj", "author": "codeisneverodd", - "code": "function solution(genres, plays) {\n var answer = [];\n const songs = []\n const genreSumHash = {}\n const genreSumArr = []\n\n //고유번호, 장르, 플레이수를 담은 songs\n genres.forEach((genre, id) => {\n songs.push({id: id, genre: genre, play: plays[id]})\n genreSumHash[genre] = genreSumHash[genre] === undefined ? plays[id] : genreSumHash[genre] + plays[id]\n })\n\n //장르별 플레이수 합으로 정렬하기 위해 생성한 배열 genreSumArr\n for (const genre in genreSumHash) genreSumArr.push([genre, genreSumHash[genre]])\n genreSumArr.sort((a, b) => b[1] - a[1])\n\n //각 장르안에서 각 노래의 play수가 높은 순으로 정렬하고 앞에서부터 2개까지 정답에 고유번호를 push\n for (const genre of genreSumArr) {\n const sorted = songs.filter(song => song.genre === genre[0]).sort((a, b) => b.play - a.play)\n for (let i = 0; i < 2 && i < sorted.length; i++) answer.push(sorted[i].id)\n }\n return answer;\n}\n\n", - "probId": "42579" + "code": "function solution(phone_number) {\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}", + "probId": "12948" }, { - "id": "K5IetySp3sN_bOp6YnHXa", - "author": "codeisneverodd", - "code": "//Map과 고차함수를 적극적으로 이용한 풀이\nfunction solution(genres, plays) {\n const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]}\n genres\n .map((genre, id) => [genre, plays[id]])\n .forEach(([genre, play], id) => {\n const data = genreMap.get(genre) || {totalPlay: 0, songs: []}\n genreMap.set(genre, {\n totalPlay: data.totalPlay + play,\n songs: [...data.songs, {play: play, id: id}]\n .sort((a, b) => b.play - a.play)\n .slice(0, 2)\n })\n })\n\n return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...]\n .sort((a, b) => b[1].totalPlay - a[1].totalPlay)\n .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs]\n .map(song => song.id)\n}", - "probId": "42579" + "id": "RegkLLoeWx_PnVUz6Qs1L", + "author": "chaerin-dev", + "code": "function solution(phone_number) {\n // \"*\"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과\n // phone_number의 -4인덱스부터 끝까지 추출한 문자열을\n // 이어붙인 후 반환\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}", + "probId": "12948" }, { - "id": "zqi_qiQ3Z5vy39dtx6GOw", - "author": "codeisneverodd", - "code": "function solution(bridge_length, weight, truck_weights) {\n let [tick, onBridge, weightOnBridge] = [0, [{weight: 0, timeToOut: 0}], 0]\n while (onBridge.length > 0 || truck_weights.length > 0) {\n if (onBridge[0].timeToOut === tick) weightOnBridge -= onBridge.shift().weight\n if (weightOnBridge + truck_weights[0] <= weight) {\n weightOnBridge += truck_weights[0]\n onBridge.push({weight: truck_weights.shift(), timeToOut: tick + bridge_length})\n } else {\n if (onBridge[0]) tick = onBridge[0].timeToOut - 1 // 시간을 줄이는 포인트\n }\n tick++\n }\n return tick\n}\n\n", - "probId": "42583" + "id": "2-xaBZIgoE2krNO-WwgBd", + "author": "prove-ability", + "code": "function solution(phone_number) {\n var answer = \"\";\n answer += \"*\".repeat(phone_number.length - 4);\n answer += phone_number.slice(phone_number.length - 4, phone_number.length);\n return answer;\n}", + "probId": "12948" }, { - "id": "CnSL50H__xArEZDs1LvSx", + "id": "6h5JI_CTavzPJH7MtISGv", "author": "codeisneverodd", - "code": "function solution(bridge_length, weight, truck_weights) {\n const bridge = new Array(bridge_length).fill(0)\n let tick = 0\n do {\n tick++\n bridge.pop()\n bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ?\n bridge.unshift(truck_weights.shift()) : bridge.unshift(0)\n } while (bridge.reduce((a, b) => a + b) !== 0)\n return tick;\n}\n\n", - "probId": "42583" + "code": "function solution(arr1, arr2) {\n var answer = new Array(arr1.length);\n for (let i = 0; i < arr1.length; i++) {\n answer[i] = new Array(arr1[0].length);\n }\n for (let row = 0; row < answer.length; row++) {\n for (let col = 0; col < answer[0].length; col++) {\n answer[row][col] = arr1[row][col] + arr2[row][col];\n }\n }\n return answer;\n}", + "probId": "12950" }, { - "id": "Gn2vGVxg1BZ9FnORZO7fJ", - "author": "jaewon1676", - "code": "function solution(bridge_length, weight, truck_weights) {\n var answer = 0; // 총 걸리는 시간\n let bridge = []; // 다리를 건너는 트럭\n let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게\n \n while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다.\n answer++; // 1초 추가\n if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다.\n bridge_weight -= bridge.shift();\n }\n if (bridge_weight + truck_weights[0] > weight) { \n bridge.push(0);\n continue;\n }\n let truck_weight = truck_weights.shift();\n bridge.push(truck_weight);\n bridge_weight += truck_weight;\n }\n \n answer += bridge_length;\n \n return answer;\n }", - "probId": "42583" + "id": "TWduPWGleuME_CJQCTSPk", + "author": "chaerin-dev", + "code": "function solution(arr1, arr2) {\n var answer = [];\n for (let i = 0; i < arr1.length; i++) {\n let ans_row = [];\n for (let j = 0; j < arr1[0].length; j++) {\n ans_row.push(arr1[i][j] + arr2[i][j]);\n }\n answer.push(ans_row);\n }\n return answer;\n}", + "probId": "12950" }, { - "id": "05x5834hVrhNdZ_jMoU5p", - "author": "codeisneverodd - 시간복잡도 감소", - "code": "function solution(progresses, speeds) {\n var answer = [];\n const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index]))\n console.log(remainDays)\n let maxDay = remainDays[0]\n answer.push(0)\n for (let i = 0; i < remainDays.length; i++) {\n if (remainDays[i] <= maxDay) {\n answer[answer.length - 1] += 1\n } else {\n answer.push(1)\n maxDay = remainDays[i]\n }\n }\n return answer;\n}\n\n", - "probId": "42586" + "id": "QC1oG84-d4QJwG15v-Ti7", + "author": "yongchanson", + "code": "function solution(A, B) {\n let answer = [];\n\n for (let i = 0; i < A.length; i++) {\n answer[i] = [];\n for (let j = 0; j < A[0].length; j++) {\n answer[i][j] = A[i][j] + B[i][j];\n }\n }\n return answer;\n}", + "probId": "12950" }, { - "id": "hX5vc8r5EfQf0aVts3kTC", + "id": "VjakovEpxyPzA5dcN2rzZ", "author": "codeisneverodd", - "code": "function solution(progresses, speeds) {\n var answer = [];\n while (progresses.length > 0) {\n let done = 0\n progresses = progresses.map((prog, index) => prog + speeds[index])\n const length = progresses.length\n for (let i = 0; i < length; i++) {\n if (progresses[0] >= 100) {\n progresses.shift()\n speeds.shift()\n done += 1\n } else {\n break\n }\n }\n if (done > 0) answer.push(done)\n }\n return answer;\n}\n\n", - "probId": "42586" + "code": "function solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n if (remainder === 0) {\n n = Math.floor((n - 1) / 3)\n } else {\n n = Math.floor(n / 3)\n }\n }\n return answer;\n}", + "probId": "12899" }, { - "id": "OMXNlD-ip71QBwoB25Wzp", + "id": "7LgMYX1DApNTOR0a8CSTp", "author": "jaewon1676", - "code": "function solution(progresses, speeds) {\n let answer = [];\n \n while(speeds.length > 0) { \n for(let i=0;i= 100) { \n progresses.shift();\n speeds.shift();\n count++;\n }\n if(count > 0) { // 결과 배열에 넣어주기\n answer.push(count);\n }\n }\n return answer;\n}\n\n", - "probId": "42586" + "code": "function solution(n) {\n const number = [ 4, 1, 2];\n let answer = \"\";\n \n while(n){ // \n answer = number[n%3] + answer;\n n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3);\n }\n\n return answer\n}", + "probId": "12899" }, { - "id": "hLFxa_7Z_qn2pox1PUZkT", - "author": "createhb21", - "code": "function solution(progresses, speeds) {\n // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열\n var answer = [];\n // 각각의 기능이 몇 일 소요되는지 담은 큐\n let queue = [];\n \n for (let i = 0; i < speeds.length; i++) {\n // 각각의 기능이 몇 일 걸리는지 계산\n let task = Math.ceil((100 - progresses[i]) / speeds[i]);\n // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다.\n queue.push(task);\n \n // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push()\n // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화\n if(task > queue[0]) {\n answer.push(queue.length-1);\n // 큐 초기화\n queue = [task];\n }\n }\n \n answer.push(queue.length);\n return answer;\n }\n\n", - "probId": "42586" + "id": "9W6tETWU0iM4iM27P11Mr", + "author": "RyanDeclan", + "code": "// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용\n// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드\nlet result = \"\";\nfunction solution(n) {\n let remainder = n % 3;\n let quotient = Math.floor(n / 3)\n if(!remainder){\n quotient = Math.floor(n / 3) - 1;\n remainder = 3\n }\n result += remainder;\n if( quotient <= 3){\n if(quotient)result += quotient\n result = result.replace(/[\"3\"]/g,\"4\")\n return result.split(\"\").reverse().join(\"\")\n } \n return solution(quotient);\n}", + "probId": "12899" }, { - "id": "bi0wcQp16m-7OtazfuCz_", - "author": "chaerin-dev", - "code": "function solution(progresses, speeds) {\n // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장\n const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i]));\n\n // 최초 배포날은 daysLeftArr의 첫 번째 요소\n let deployDay = daysLeftArr[0];\n // 각 배포에 몇 개의 기능이 배포될지 셀 변수\n let cnt = 0;\n // 각 배포에 몇 개의 기능이 배포될지 저장할 배열\n const answer = [];\n\n // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포\n daysLeftArr.forEach((daysLeft) => {\n if (deployDay < daysLeft) {\n deployDay = daysLeft;\n answer.push(cnt);\n cnt = 0;\n }\n cnt++;\n });\n answer.push(cnt);\n\n // 정답 반환\n return answer;\n}\n\n", - "probId": "42586" + "id": "nKaTjadaguUkLwT6umotE", + "author": "jaewon1676", + "code": "function solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", + "probId": "12900" }, { - "id": "51AL98Mpzj2dePMaHhx3i", - "author": "RyanDeclan", - "code": "// 예제1) 입력값 : [93, 30, 55], [1, 30, 5]\nfunction solution(progresses, speeds) {\n // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열\n let countBox = [];\n let completeBox = [];\n for(k=1; k<100; k++){\n let complete = []\n for(i=0; i= 100){\n complete.push([i,k]);\n progresses.splice(i,1,\"end\")\n } \n }\n if(complete[0] != null)completeBox.push(...complete)\n } \n completeBox.sort((a,b) => a[0] - b[0])\n \n //여기까지 한다면 console.log(completeBox) \t[ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. \n // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 \n \n // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 \n let count = 0;\n completeBox.reduce((acc, cur, i) => {\n if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 \n if(i) countBox.push(count)\n acc[0] = cur[1];\n count = 0;\n count++\n }else{count++}\n if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. \n return acc\n } ,[0])\n return countBox;\n}\n", - "probId": "42586" + "id": "AOPsrD2ijP3-40z3nFgW1", + "author": "le2sky", + "code": "function solution(numbers) {\n const answer = [];\n numbers.forEach((num) => {\n if (num % 2 == 0) answer.push(num + 1);\n else {\n let binary = [\"0\", ...num.toString(2)];\n let last = binary.lastIndexOf(\"0\");\n binary[last] = \"1\";\n binary[last + 1] = \"0\";\n answer.push(parseInt(binary.join(\"\"), 2));\n }\n });\n return answer;\n}", + "probId": "77885" }, { - "id": "G4YhqR1GeSdlQV1FX2AeM", + "id": "zlZcsNzLVWdMwgVIPU8I2", "author": "codeisneverodd", - "code": "function solution(priorities, location) {\n var answer = 0;\n let documents = priorities.map((priority, index) => ({location: index, priority: priority}))\n let locationPrinted = false\n while (!locationPrinted) {\n const shifted = documents.shift()\n let printAvailable = true\n if (documents.some((document) => shifted.priority < document.priority)) printAvailable = false\n if (printAvailable) {\n answer += 1\n if (shifted.location === location) locationPrinted = true\n } else {\n documents.push(shifted)\n }\n }\n return answer;\n}\n\n", - "probId": "42587" + "code": "function solution(n) {\n if (n % 2 !== 0) return 0;\n\n const getCount = n => {\n const k = n / 2;\n const count = [3, 11, ...Array(k - 2)];\n const divider = 1000000007;\n for (let i = 2; i < k; i++) {\n count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider;\n }\n return count[count.length - 1];\n };\n\n return getCount(n);\n}", + "probId": "12902" }, { - "id": "0j0Rr-sjlpofMav0oK0vJ", + "id": "28P5BaMjEWq4UWKkmwqQz", "author": "codeisneverodd", - "code": "function solution(priorities, location) {\n var answer = 0;\n let documents = priorities.map((priority, documentLocation) => [documentLocation, priority])\n let locationPrinted = false\n while (!locationPrinted) {\n const shifted = documents.shift()\n let printAvailable = true\n for (let i = 0; i < documents.length; i++) {\n if (shifted[1] < documents[i][1]) {\n printAvailable = false\n break\n }\n }\n if (printAvailable) {\n answer += 1\n if (shifted[0] === location) locationPrinted = true\n } else {\n documents.push(shifted)\n }\n }\n return answer;\n}\n\n", - "probId": "42587" + "code": "function solution(citations) {\n var answer = 0;\n let h = 0\n let length = 0\n while (length >= h) {\n h++\n length = citations.filter(citation => citation >= h).length\n }\n answer = h - 1\n return answer;\n}", + "probId": "42747" }, { - "id": "xnIbmYxHJ94OvD8MleCvq", + "id": "07_VeueyKdEDFDyNjPTao", "author": "jaewon1676", - "code": "function solution(priorities, location) {\n var answer = 0;\n while (true) {\n\n if (priorities[0] < Math.max(...priorities)) {\n if (location - 1 < 0) location = priorities.length\n priorities.push(priorities.shift())\n location--;\n } else {\n answer++;\n if (location - 1 < 0) {\n return answer;\n }\n priorities.shift()\n location--;\n }\n console.log(priorities, location, answer)\n\n }\n return answer\n}\n\n", - "probId": "42587" - }, - { - "id": "dTmRPDIjgu6eqAF1yS-Ys", - "author": "createhb21", - "code": "function solution(priorities, location) {\n var answer = priorities.map((priority, index) => {\n return {\n index,\n priority\n };\n });\n \n let queue = [];\n \n while(answer.length > 0){\n const first = answer.shift();\n const isPriority = answer.some((p) => p.priority > first.priority);\n isPriority ? answer.push(first) : queue.push(first);\n }\n const idx = queue.findIndex(p => p.index === location) + 1;\n return idx;\n } \n\n", - "probId": "42587" + "code": "function solution(citations) {\n var answer = 0;\n citations.sort((a,b)=>(b-a))\n\n for(var i=0; i {\n printer.enqueue([priority, index])\n })\n while (printer.size() > 0) {\n const check = printer.dequeue()\n const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length\n if (countHigherPriority > 0) {\n printer.enqueue(check)\n } else {\n answer += 1\n if (check[1] === location) break\n }\n\n }\n return answer;\n}\n\nclass Queue {\n constructor() {\n this.queue = []\n this.front = 0\n this.rear = 0\n }\n\n enqueue(value) {\n this.queue[this.rear++] = value\n }\n\n dequeue() {\n const value = this.queue[this.front]\n delete this.queue[this.front]\n this.front += 1\n return value\n }\n\n peek() {\n return this.queue(this.front)\n }\n\n size() {\n return this.rear - this.front\n }\n}\n", - "probId": "42587" + "code": "function solution(s) {\n var answer = ''\n answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')\n //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다.\n return answer;\n}", + "probId": "12951" }, { - "id": "FxuCUZF92-5Mq2XTHhJE6", + "id": "zJu4dHtoKmaZoeqGvYxO6", "author": "jaewon1676", - "code": "function solution(operations) {\n var answer = [];\n for (let i = 0; i < operations.length; i++) {\n // 숫자 삽입\n if (operations[i][0] == 'I') {\n let m = operations[i].substring(2, operations[i].length);\n answer.push(m);\n }\n // if 최댓값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) {\n answer.pop();\n }\n // if 최솟값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) {\n answer.shift();\n }\n\n answer.sort((a, b) => {\n return a - b;\n });\n }\n if (answer.length == 0) return [0, 0];\n else {\n return [parseInt(answer.pop()), parseInt(answer.shift())];\n }\n}\n/* 풀이 과정\n1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다.\n2. answer 배열을 정렬 해준다\n3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다.\n*/\n", - "probId": "42628" - }, - { - "id": "ZfJDGZCLUtKfOcnAxpkCy", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n var answer = '';\n numbers.sort(sortFunc)\n answer = numbers.join('')\n if (answer[0] === '0') return '0'\n return answer;\n}\n\nconst sortFunc = (a, b) => {\n const compareA = parseInt(a.toString() + b.toString())\n const compareB = parseInt(b.toString() + a.toString())\n return compareB - compareA\n}\n\n\n", - "probId": "42746" + "code": "function solution(s) {\n s = s.split(' ').map(el => el.split('').map((el, index) => \n index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ')\n return s;\n}\n// 문자열을 연습하기에 좋은 문제입니다.\n \n// s.split(' ') // 띄어쓰기를 기준으로 나눕니다.\n// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 \n// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase())\n// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. \n// .join('') 작은 배열들을 합쳐줍니다.\n// .join(' ') 큰 배열들을 합쳐줍니다.", + "probId": "12951" }, { - "id": "ZtF3kqFhmHjk00qGPQv6F", - "author": "createhb21", - "code": "function solution(numbers) {\n let stringNum = \n numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b));\n \n return stringNum[0] === '0' ? '0' : stringNum.join('');\n}\n\n", - "probId": "42746" + "id": "hK9f9ndQDE1sXaUinfKAe", + "author": "yongchanson", + "code": "function solution(s) {\n let answer = [];\n s = s.split(\" \");\n\n for (let i = 0; i < s.length; i++) {\n answer.push(\n s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase()\n );\n }\n return answer.join(\" \");\n}", + "probId": "12951" }, { - "id": "zDikFJkJp9HFOAXCSMJQI", - "author": "prove-ability", - "code": "function solution(numbers) {\n if(numbers.every(v => v === 0)) return \"0\";\n return numbers.sort((a, b) => {\n if(a === b) return 0;\n let stringA = a.toString(10), stringB = b.toString(10);\n if(stringA[0] === stringB[0]) {\n let aIndex = 1, bIndex = 1;\n while(true) {\n if(!stringA[aIndex]) --aIndex;\n if(!stringB[bIndex]) --bIndex;\n if(stringA[aIndex] === stringB[bIndex]) {\n aIndex++, bIndex++;\n continue;\n }\n if(stringA[aIndex] < stringB[bIndex]) return 1;\n else return -1;\n } \n } \n return stringB[0] - stringA[0]\n }).join(\"\");\n}\n\n", - "probId": "42746" + "id": "sPlDt5aiENmQJgvlQmebU", + "author": "RyanDeclan", + "code": "function solution(s) {\n return s.toLowerCase().split(\" \").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : \"\").join(\" \");\n}\n\n// 이 문제에서 제일 핵심은 \"공백문자가 연속해서 나올 수 있습니다.\" 입니다. 이 부분을 꼭 고려하셔야합니다. \n// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다.\n// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. \n//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다.", + "probId": "12951" }, { - "id": "BmT_xSFPSR0ASzmxEhFik", - "author": "prove-ability", - "code": "function solution(numbers) {\n return numbers.every(v => v === 0) ? \"0\" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(\"\");\n}\n", - "probId": "42746" + "id": "TBwaxd9mZyrzb-Durxs46", + "author": "codeisneverodd", + "code": "function solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", + "probId": "12952" }, { - "id": "MzaWhj9G5DFefCsefYyeN", + "id": "JL6PQjS1Ye6tolU8A_E6R", "author": "codeisneverodd", - "code": "function solution(citations) {\n var answer = 0;\n citations.sort((a, b) => b - a)\n let h = 0\n while (h + 1 <= citations[h]) h++\n answer = h\n return answer;\n}\n\n", - "probId": "42747" + "code": "function solution(arr) {\n var answer = 0;\n answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1)\n return answer;\n}\n\nfunction leastCommonMultiple(a, b) {\n return a * b / greatestCommonDivisor(a, b)\n}\n\nfunction greatestCommonDivisor(a, b) {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", + "probId": "12953" }, { - "id": "OQEjj6xeUZpg8ukIds5V7", + "id": "i8sYJBOLUeicvCcuIG3se", "author": "codeisneverodd", - "code": "function solution(citations) {\n var answer = 0;\n let h = 0\n let length = 0\n while (length >= h) {\n h++\n length = citations.filter(citation => citation >= h).length\n }\n answer = h - 1\n return answer;\n}\n\n", - "probId": "42747" + "code": "function solution(str1, str2) {\n var answer = 0;\n let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2)\n const union = new Set([...compare1, ...compare2])\n let multiIntersectionLen = 0, multiUnionLen = 0\n for (const slice of union) {\n const compare1Count = compare1.filter(x => x === slice).length,\n compare2Count = compare2.filter(x => x === slice).length\n multiIntersectionLen += Math.min(compare1Count, compare2Count)\n multiUnionLen += Math.max(compare1Count, compare2Count)\n }\n answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536)\n return answer;\n}\n\nfunction verifiedSlices(str) {\n const onlyAlphabet = /[a-zA-Z]{2}/\n let result = []\n for (let i = 0; i < str.length - 1; i++) {\n const slice = str.slice(i, i + 2)\n if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase())\n }\n return result\n}", + "probId": "17677" }, { - "id": "J3O4HWugASe-80GQ1CUJJ", + "id": "RBflJhaKTzyHXGsgMh8Tp", "author": "jaewon1676", - "code": "function solution(citations) {\n var answer = 0;\n citations.sort((a,b)=>(b-a))\n\n for(var i=0; i= 0) {\n // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) \n // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환.\n continue\n }\n arr1.push(tmp)\n }\n \n for (var i = 0; i < str2.length - 1; i++) {\n let tmp = str2.substr(i, 2)\n if (tmp.search(/[^A-Z]/g) >= 0) {\n continue\n }\n arr2.push(tmp)\n }\n arr1.sort()\n arr2.sort()\n var a = [] // 중복포함, 교집합 배열\n var b = [] // 중복포함, 합집합 배열\n \n for (var i = 0; i < arr2.length; i++) {\n if (arr1.indexOf(arr2[i]) >= 0) { \n // arr1 객체에 arr2[i]과 같은 값이 있는지 확인.\n // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. \n a.push(arr1.splice(arr1.indexOf(arr2[i]), 1))\n }\n // 교집합이 성립되지 않으면 실행.\n b.push(arr2[i])\n }\n\n for (var i = 0; i < arr1.length; i++) {\n b.push(arr1[i])\n }\n\n // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함\n if (b.length === 0) return 65536\n if (a.length === 0) return 0\n\n return Math.floor((a.length / b.length) * 65536)\n}", + "probId": "17677" }, { - "id": "51OhVjiU-bvg0pTvqyOx1", - "author": "jaewon1676", - "code": "function solution(array, commands) {\n var result = [];\n var temp = [];\n for (var i = 0; i < commands.length; i++) {\n temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => {\n return a - b;\n });\n console.log(temp);\n result.push(temp[commands[i][2] - 1]);\n }\n return result;\n}\n\n", - "probId": "42748" + "id": "AknDF5Bz9CpCYN5i9q76r", + "author": "codeisneverodd", + "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = []\n if (cacheSize === 0) return 5 * cities.length\n for (const city of cities) {\n const cityLC = city.toLowerCase()\n if (cache.includes(cityLC)) {\n cache.splice(cache.indexOf(cityLC), 1)\n cache.unshift(cityLC)\n answer += 1\n } else {\n if (cache.length >= cacheSize) cache.pop()\n cache.unshift(cityLC)\n answer += 5\n }\n }\n return answer;\n}", + "probId": "17680" }, { - "id": "gK2kxc__gguJbblrNtODL", - "author": "prove-ability", - "code": "function solution(array, commands) {\n var answer = [];\n commands.forEach(([i, j, k]) => {\n const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1];\n answer.push(su);\n });\n return answer;\n}\n\n", - "probId": "42748" + "id": "DWtHGPN_Hr99gIXXEB6Uo", + "author": "jaewon1676", + "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = [];\n \n //캐시 크기가 0인 경우는 따로 처리\n if (cacheSize === 0) return cities.length * 5;\n \n while (cities.length != 0) {\n // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다.\n const city = cities.shift().toLowerCase(); \n // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss)\n if (cache.includes(city)) { \n // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고,\n cache.splice(cache.indexOf(city), 1);\n // 맨 뒤로 push 해준다.\n cache.push(city);\n // cache hit\n answer += 1;\n } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다.\n if (cache.length === cacheSize) {\n cache.shift();\n }\n // 새로운 캐시 맨 뒤로 push\n cache.push(city);\n // cache miss\n answer += 5;\n }\n }\n return answer;\n }\n /* LRU 알고리즘\n n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다.\n n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면\n 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */", + "probId": "17680" }, { - "id": "bpmS34uQQ64yL4Q6kl2Ys", - "author": "createhb21", - "code": "\nfunction solution(array, commands) {\n let answer = [];\n for (let i = 0; i < commands.length; i++) {\n let eachCommand = commands[i];\n let slice = array.slice(eachCommand[0] - 1, eachCommand[1]);\n answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]);\n }\n return answer;\n}\n\n", - "probId": "42748" + "id": "hKVFCuqW6bqhwkd-G1poJ", + "author": "codeisneverodd", + "code": "function solution(m, n, board) {\n board = board.map(r => r.split(''));\n const getSquare = ([r, c]) => [\n [r, c],\n [r, c + 1],\n [r + 1, c],\n [r + 1, c + 1],\n ];\n\n const isSquare = ([r, c]) => {\n if (board[r][c] === '@') return false;\n return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1;\n };\n\n const remove = () => {\n const removeArr = [];\n for (let r = 0; r < m - 1; r++) {\n for (let c = 0; c < n - 1; c++) {\n if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v));\n }\n }\n removeArr.forEach(([r, c]) => {\n board[r][c] = '@';\n });\n return removeArr.length !== 0;\n };\n\n const pull = () => {\n for (let c = 0; c < n; c++) {\n const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@');\n const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn];\n resultColumn.forEach((v, r) => {\n board[r][c] = v;\n });\n }\n return board;\n };\n\n while (remove()) {\n pull();\n }\n\n return board.flat().filter(v => v === '@').length;\n}", + "probId": "17679" }, { - "id": "lJvurGBZL5dnCNOSRqLD5", - "author": "chaerin-dev", - "code": "function solution(array, commands) {\n let t = commands.length;\n let answer = [];\n while (t--) {\n let command = commands.shift();\n answer.push(\n array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[\n command[2] - 1\n ]\n );\n }\n return answer;\n}\n", - "probId": "42748" + "id": "zGjcAQnQZZy9HifTDSHMS", + "author": "codeisneverodd", + "code": "function solution(n, t, m, p) {\n let queue = [], result = [], currentNumDecimal = -1, turn = 0\n while (result.length < t) {\n if (queue.length === 0) {\n currentNumDecimal++\n currentNumDecimal.toString(n).split('').forEach(x => queue.push(x))\n }\n const currentChar = queue.shift()\n if (turn % m === p - 1) result.push(currentChar)\n turn++\n }\n return result.join('').toUpperCase()\n}", + "probId": "17687" }, { - "id": "BqWit-O_U9hF_K2CMj12o", - "author": "chaerin-dev", - "code": "// 소수인지 판별하는 함수\nfunction isPrime(x) {\n for (let i = 2; i <= Math.sqrt(x); i++) {\n if (x % i === 0) return false;\n }\n return true;\n}\nfunction solution(n) {\n // 소수의 개수를 저장할 변수\n let answer = 0;\n // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해\n for (let i = 2; i <= n; i++) {\n // 소수이면 소수의 개수에 1 추가\n if (isPrime(i)) answer++;\n }\n return answer;\n}\n\n", - "probId": "42839" + "id": "nWgDR9ot7FpFEI6isToMa", + "author": "minjongbaek", + "code": "function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수\n return m\n .replace(/C#/g, 'c')\n .replace(/D#/g, 'd')\n .replace(/F#/g, 'f')\n .replace(/G#/g, 'g')\n .replace(/A#/g, 'a');\n}\n\nfunction solution(m, musicinfos) {\n\n // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다.\n // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다.\n // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다.\n\n const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다.\n \n const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다.\n for (const info of musicinfos) {\n const [start, finish, title, _score] = info.split(',');\n // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다.\n const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5))));\n \n const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다.\n\n // 재생된 멜로디를 구합니다.\n // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다.\n // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다.\n const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration);\n if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다.\n map.set(title, {score, playScore});\n }\n }\n \n // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다.\n // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다.\n const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length);\n return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다.\n}", + "probId": "17683" }, { - "id": "xD8DeWfPAfYsU8JM10biT", - "author": "prove-ability", - "code": "// 소수 판별 로직\nfunction isPrime(n) {\n // n 제곱근 후 올림\n for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) {\n if (n % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(n) {\n let count = 0;\n // 1부터 n까지 반복적으로 접근 - i\n for(let i = 1; i <= n; i++) {\n // i 가 소수인지 확인 후 count++\n if(isPrime(i)) count++;\n }\n \n return count;\n}\n\n", - "probId": "42839" + "id": "Qxd8IoGaRi1uE89pRilU0", + "author": "codeisneverodd", + "code": "function solution(msg) {\n const outputs = [];\n const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))];\n let [start, end] = [0, 1];\n\n const doesDictHave = (start, end) => dict.includes(msg.substring(start, end));\n\n const getInput = (start, end) => {\n if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end];\n return getInput(start, end + 1);\n };\n\n const addToDict = (start, end) => {\n if (doesDictHave(start, end)) return;\n dict.push(msg.substring(start, end));\n };\n\n const addToOutputs = (start, end) => {\n if (!doesDictHave(start, end)) return;\n outputs.push(dict.indexOf(msg.substring(start, end)));\n };\n\n while (start < msg.length) {\n [start, end] = getInput(start, end);\n addToDict(start, end + 1);\n addToOutputs(start, end);\n start = end;\n }\n return outputs;\n}", + "probId": "17684" }, { - "id": "Vlk2V5aDNGsBMzTHYsAz2", - "author": "jaewon1676", - "code": "function solution(n) {\n let arr = [];\n \n // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다.\n for(let i=2; i<=n; i++) {\n arr[i] = i;\n }\n for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다.\n if (arr[i] === 0) continue;\n \n for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다.\n arr[j] = 0;\n }\n }\n \n // filter를 이용해 0이아닌 수들의 개수를 return합니다.\n return arr.filter(v => v!==0).length;\n}\n", - "probId": "42839" + "id": "z1cEapQw_vTaWCYmPzbhM", + "author": "ssi02014", + "code": "function solution(msg) {\n const result = [];\n const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i))\n\n // 시간 복잡도 O(N^2)\n const lastWordAndCompression = msg.split(\"\").reduce((acc, cur) => {\n const nextWord = acc + cur;\n const nextWordIdx = dict.indexOf(nextWord);\n const prevWordIdx = dict.indexOf(acc);\n\n if (nextWordIdx !== -1) return acc + cur;\n dict.push(nextWord);\n\n if (prevWordIdx !== -1) result.push(prevWordIdx + 1);\n return cur;\n }, \"\");\n\n result.push(dict.indexOf(lastWordAndCompression) + 1);\n return result;\n}", + "probId": "17684" }, { - "id": "8RxE9N-aPdvBHK3aU4Vna", + "id": "9Z-Irf_aJY5hilnChcmkF", "author": "codeisneverodd", - "code": "function solution(numbers) {\n var answer = 0;\n const numArr = numbers.split('')\n const permutationAll = []\n for (let r = 1; r <= numbers.length; r++) {\n const permutationR\n = Permutation(numArr, r).map((permuArr) =>\n parseInt(permuArr.join(''))\n )\n for (let i = 0; i < permutationR.length; i++) permutationAll.push(permutationR[i])\n }\n const permutationSet = [...new Set(permutationAll)]\n for (const number of permutationSet) answer += isPrime(number) ? 1 : 0\n return answer;\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) if (num % i === 0) return false\n return num >= 2\n}", - "probId": "42839" - }, - { - "id": "hsNbaQA9lwkJJCkmw9zhz", - "author": "prove-ability", - "code": "function solution(answers) {\n let result = [];\n\n let players = {\n 1: {\n pattern: [1, 2, 3, 4, 5],\n count: 0,\n },\n 2: {\n pattern: [2, 1, 2, 3, 2, 4, 2, 5],\n count: 0,\n },\n 3: {\n pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],\n count: 0,\n },\n };\n let max = 0;\n answers.forEach((answer, index) => {\n for (let [key, { pattern }] of Object.entries(players)) {\n // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가\n if (pattern[index % pattern.length] === answer) {\n players[key].count++;\n // 제일 높은 count 구하기\n if (max < players[key].count) max = players[key].count;\n }\n }\n });\n // players 중에 count 가 max 와 값이 같다면 result 추가\n for (let [key, { count }] of Object.entries(players)) {\n if (count === max) result.push(parseInt(key, 10));\n }\n\n return result;\n}\n\n", - "probId": "42840" + "code": "function solution(files) {\n var answer = [];\n const numberRegex = /[0-9]+/\n answer = files.sort((a, b) => {\n const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)]\n const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()]\n const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])]\n return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0\n })\n return answer;\n}", + "probId": "17686" }, { - "id": "hygi4H12alShMWuiCsYlW", - "author": "yongchanson", - "code": "function solution(answers) {\n let score = [];\n let answer = [];\n let a1 = [1, 2, 3, 4, 5];\n let a2 = [2, 1, 2, 3, 2, 4, 2, 5];\n let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n\n score.push(answers.filter((a, i) => a === a1[i % a1.length]).length);\n score.push(answers.filter((a, i) => a === a2[i % a2.length]).length);\n score.push(answers.filter((a, i) => a === a3[i % a3.length]).length);\n\n for (let i = 0; i < score.length; i++) {\n const max = Math.max(...score);\n if (score[i] === max) {\n answer.push(i + 1);\n }\n }\n\n return answer;\n}\n\n", - "probId": "42840" + "id": "c92OX1CC72SNkMj5AsE1y", + "author": "minjongbaek", + "code": "function isPrime(number) { // 소수를 판별하는 함수\n if (number < 2) return false;\n for (let i = 2; i * i <= number; i += 1) {\n if (number % i === 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction solution(n, k) {\n // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만,\n // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다.\n // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다.\n\n // (n).toString(k) // n을 k진수로 변환합니다.\n // .split('0') // 0을 기준으로 나눕니다.\n // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다.\n return (n).toString(k).split('0').filter((number) => isPrime(+number)).length;\n}", + "probId": "92335" }, { - "id": "V85SNu9mIFhp6Pew_272q", + "id": "27x71P9qSjKl6H067BaL5", "author": "jaewon1676", - "code": "function solution(answers) {\n let arr1 = [1,2,3,4,5]\n let arr2 = [2,1,2,3,2,4,2,5]\n let arr3 = [3,3,1,1,2,2,4,4,5,5]\n \n let score = [0, 0, 0]\n for (let i=0; i {\n for (let j = 0; j < pattern.length; j++) {\n const patternLength = pattern[j].length;\n if (answer === pattern[j][i % patternLength]) scores[j]++;\n }\n });\n\n const answer = [];\n const maxScore = Math.max(...scores);\n scores.forEach((score, i) => {\n if (score === maxScore) answer.push(i + 1);\n });\n return answer;\n}", - "probId": "42840" + "code": "function solution (n, left, right) {\n const answer = [];\n \n for (let i=left; i <= right; i++) { // left부터 right까지를 구한다.\n let row = parseInt(i/n);\t// 행(row)을 구한다.\n let column = i%n;\t// 열(column)을 구한다.\n answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다.\n }\n return answer\n}", + "probId": "87390" }, { - "id": "5LdBbGqctBYQLxKHLwgnK", + "id": "pRFDxEW6rpM6_8FS6eh6n", "author": "codeisneverodd", - "code": "function solution(brown, yellow) {\n var answer = [];\n const size = brown + yellow\n answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0]\n return answer;\n}\n\nfunction widthHeightPair(size) {\n let result = []\n for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i])\n return result\n}\n\n", - "probId": "42842" + "code": "function solution(numbers) {\n var answer = '';\n numbers.sort(sortFunc)\n answer = numbers.join('')\n if (answer[0] === '0') return '0'\n return answer;\n}\n\nconst sortFunc = (a, b) => {\n const compareA = parseInt(a.toString() + b.toString())\n const compareB = parseInt(b.toString() + a.toString())\n return compareB - compareA\n}", + "probId": "42746" }, { - "id": "nnsIDbgigYJWfDytOB9b7", - "author": "jaewon1676", - "code": "function solution(brown, yellow) {\n var answer = [];\n let sum = brown + yellow; \n \n //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색)\n for(let height=3; height el + '').sort((a,b) => (b+a) - (a+b));\n \n return stringNum[0] === '0' ? '0' : stringNum.join('');\n}", + "probId": "42746" }, { - "id": "zegjj3RgW9Ez2OAEwHtQR", - "author": "codeisneverodd", - "code": "function solution(name) {\n var answer = 0;\n const length = name.length;\n let upDownCount = 0\n let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때\n for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i])\n for (let startOfA = 0; startOfA < name.length; startOfA++) {\n let endOfA = startOfA + 1;\n while (endOfA < length && name[endOfA] === 'A') endOfA++;\n const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA]\n leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1\n leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A..\n }\n answer = upDownCount + Math.min(...leftRightCountList)\n return answer;\n}\n\nfunction minUpOrDownCount(destination) {\n const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const index = Alphabet.indexOf(destination)\n return Math.min(index, Alphabet.length - index)\n}", - "probId": "42860" + "id": "9ocRqeQxGL8vljoJt2EKG", + "author": "prove-ability", + "code": "function solution(numbers) {\n return numbers.every(v => v === 0) ? \"0\" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(\"\");\n}", + "probId": "42746" }, { - "id": "Ud7Y7hj77MsbAbo3j9jiB", - "author": "prove-ability", - "code": "function solution(n, lost, reserve) {\n // students 초기화 - 학생들은 체육복 개수 1로 초기화\n let students = Array.from({ length: n }).fill(1);\n\n // 읽어버린 학생 개수 반영\n lost.forEach((target) => {\n students[target - 1]--;\n });\n\n // 여별 체육복 개수 반영\n reserve.forEach((target) => {\n students[target - 1]++;\n });\n\n // 학생들 순차적으로 접근\n for (let i = 0, len = students.length; i < len; i++) {\n // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue\n if (students[i] === 0 || students[i] === 1) continue;\n // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (i !== 0 && students[i - 1] === 0) {\n // 이전 학생 증가\n students[i - 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) {\n // 다음 학생 증가\n students[i + 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n }\n // 체육복 1개 이상을 가진 학생들의 수 반환\n return students.filter((v) => v >= 1).length;\n}\n\n", - "probId": "42862" + "id": "7tq89XCXxHf6bAZ3N0QZq", + "author": "codeisneverodd", + "code": "function solution(board) {\n for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능\n for (let col = 0; col < board[0].length; col++) {\n if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined)))\n board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1;\n }\n }\n return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대\n}", + "probId": "12905" }, { - "id": "ELkq0aLnrkMlFcBxr0xfc", - "author": "jaewon1676", - "code": "function solution(n, lost, reserve) {\n let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다\n let cnt = 0;\n for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복\n answer[reserve[i]-1] += 1\n }\n for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1\n answer[lost[i]-1] -= 1\n }\n for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다.\n if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){\n answer[i] = 1\n answer[i+1] = 1\n }\n }\n for(let i = 0; i < answer.length; i++){\n (answer[i] >= 1 ? cnt += 1 : null)\n }\n return cnt\n }\n //그리디\n // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다.\n // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다.\n\n", - "probId": "42862" + "id": "OA4EV_bKkYpVL0WV_mOTj", + "author": "codeisneverodd", + "code": "function solution(places) {\n var answer = [];\n answer = places.map(place => {\n return place.some((row, rowIndex) =>\n row.split('').some((mark, colIndex, rowArr) => {\n if (mark === 'X') return false\n const countPeopleAround = [\n rowArr[colIndex - 1] || '',\n rowArr[colIndex + 1] || '',\n (place[rowIndex - 1] || '')[colIndex],\n (place[rowIndex + 1] || '')[colIndex],\n ].filter(mark => mark === 'P').length\n return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1)\n })\n ) ? 0 : 1\n })\n return answer;\n}", + "probId": "81302" }, { - "id": "fGch_Pm6IHnNOlqTZIfxA", - "author": "chaerin-dev", - "code": "function solution(n, lost, reserve) {\n // 학생들의 체육복 개수를 저장할 배열 students\n // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정\n // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음\n const students = Array.from({ length: n + 1 }, () => 1);\n\n // 체육복 분실/여분 정보 students 배열에 반영\n lost.forEach((lostStudent) => students[lostStudent]--);\n reserve.forEach((reserveStudent) => students[reserveStudent]++);\n\n // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt\n let cnt = 0;\n students.forEach((student, i) => {\n // 현재 인덱스의 학생이 체육복이 없다면\n if (student === 0) {\n // 바로 앞 학생이 체육복 여분이 있다면\n if (students[i - 1] === 2) {\n // 바로 앞 학생에게 체육복 빌리기\n students[i - 1]--;\n student++;\n }\n // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면\n else if (students[i + 1] === 2) {\n // 바로 뒤 학생에게 체육복 빌리기\n students[i + 1]--;\n student++;\n }\n // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음\n else cnt++;\n }\n });\n\n // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수\n return n - cnt;\n}", - "probId": "42862" + "id": "B2euqt_Oe9uzKkVn_4p2k", + "author": "prove-ability", + "code": "function solution(maps) {\n // BFS 활용\n const row = maps.length - 1, col = maps[0].length - 1;\n \n // 큐 - 시작 위치 y, x, 이동 거리\n const queue = [[0, 0, 1]];\n \n while(queue.length) {\n // 큐 추출\n let [y, x, count] = queue.shift();\n // 상대 팀 진영이라면\n if(y === row && x === col) return count;\n // 동서남북 확인\n for(let i = 0; i < 4; i++) {\n const [dy, dx] = DIRECTION[i];\n // 다음 길 위치\n const nextY = dy + y, nextX = dx + x;\n // 맵 밖으로 나간다면\n if(isOut(nextY, nextX, row, col)) continue;\n // 도착한 곳이 벽이라면\n if(maps[nextY][nextX] === 0) continue;\n // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지\n maps[nextY][nextX] = 0;\n // 다음에 확인해야하는 곳 큐에 추가\n // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 \n queue.push([nextY, nextX, count + 1]);\n // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음..\n }\n }\n \n return -1;\n}\n\n// 상 우 하 좌\nconst DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]];\n\n// 사용이 가능한 길인지 확인하는 함수\nconst isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col;", + "probId": "1844" }, { - "id": "P2U1vdDzmn3ki7Q1hDCNp", + "id": "tFgh55K9T3Fa-uPBaUKle", "author": "codeisneverodd", - "code": "function solution(number, k) {\n var answer = '';\n let answerStack = [0]\n let deleteCount = -1\n for (let i = 0; i < number.length; i++) {\n while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) {\n answerStack.pop()\n deleteCount++\n }\n if (answerStack.length < number.length - k) answerStack.push(number[i])\n }\n answer = answerStack.join('')\n return answer;\n}\n\n", - "probId": "42883" + "code": "function solution(p) {\n if (p.length === 0) {\n return p\n } else {\n const sliceIndex = balancedIndex(p)\n const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)]\n if (isRight(u)) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n}\n\nconst isRight = (str) => {\n if (str[0] === ')') return false\n let stack = 0\n for (let i = 0; i < str.length; i++) {\n stack = str[i] === '(' ? stack + 1 : stack - 1\n if (stack < 0) return false\n }\n return stack === 0\n}\nconst balancedIndex = (str) => {\n let count = 0\n for (let i = 0; i < str.length; i++) {\n count = str[i] === '(' ? count + 1 : count - 1\n if (count === 0) return i\n }\n}", + "probId": "60058" }, { - "id": "Wm74GNLW3oSOfnpE7mjSP", - "author": "jaewon1676", - "code": "function solution(number, k) {\n const stack = [];\n let answer = '';\n \n for(let i=0; i 0 && stack[stack.length-1] < el){\n stack.pop();\n k--;\n }\n stack.push(el);\n }\n stack.splice(stack.length-k, k);\n answer = stack.join(\"\");\n return answer;\n}\n ", - "probId": "42883" + "id": "9A8pSUiT7gTgf5i5_sc4S", + "author": "codeisneverodd", + "code": "function solution(s) {\n let answer = 0;\n let sArr = s.split('')\n if (isRight(sArr.join(''))) answer += 1\n for (let i = 0; i < sArr.length - 1; i++) {\n sArr.push(sArr.shift())\n if (isRight(sArr.join(''))) answer += 1\n }\n return answer;\n}\n\nfunction isRight(str) {\n const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')']\n let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}]\n for (let sIndex = 0; sIndex < str.length; sIndex++) {\n for (let bIndex = 0; bIndex < 3; bIndex++) {\n if (str[sIndex] === bracketOpen[bIndex]) {\n status[bIndex].open = true\n status[bIndex].openOrder.push(sIndex)\n }\n if (str[sIndex] === bracketClose[bIndex]) {\n if (status[bIndex].openOrder.length > 0) {\n if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0)\n return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘\n status[bIndex].openOrder.pop()\n status[bIndex].open = false\n } else {\n return false //열리기 전에 닫힘\n }\n }\n }\n }\n for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음\n return true\n}", + "probId": "76502" }, { - "id": "oDx7KSW-hgEPVWaZI_X-E", - "author": "jaewon1676", - "code": "function solution(routes) {\n let cctv = 1; // cctv의 개수는 최소 1개\n routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬\n // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]\n let out = routes[0][1]; // -15\n // 나간 시점(out)은 첫 차량의 나간시점으로 초기화\n \n for(let i = 1; i < routes.length; i++) {\n // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치\n if(out < routes[i][0]) {\n cctv++;\n out = routes[i][1]; // out 시점 업데이트\n }\n \n // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 \n if(out > routes[i][1]) {\n out = routes[i][1]; // out 시점 업데이트 \n }\n }\n \n return cctv;\n}\n// 그리디\n\n// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.\n// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 \n// 나간시점만 검사 해주면 됩니다.\n\n// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.\n// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)\n// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.", - "probId": "42884" + "id": "KrD3_BIcUBFqXxi-vQXC0", + "author": "codeisneverodd", + "code": "function solution(line) {\n const getCrossPoint = ([A, B, E], [C, D, F]) => {\n if (A * D - B * C === 0) return [Infinity, Infinity];\n return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)];\n }; //문제 설명 최하단 참조\n\n const crossPoints = line.flatMap((lineA, i) =>\n line\n .slice(i + 1)\n .map(lineB => getCrossPoint(lineA, lineB))\n .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y))\n );\n\n const generateCanvas = crossPoints => {\n const xPoints = [...crossPoints.map(([x, y]) => x)];\n const yPoints = [...crossPoints.map(([x, y]) => y)];\n const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)];\n const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)];\n const xLength = Math.abs(maxX - minX) + 1;\n const yLength = Math.abs(maxY - minY) + 1;\n\n return {\n canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')),\n draw([x, y], value) {\n this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value;\n },\n print() {\n return this.canvas.map(row => row.join(''));\n },\n };\n };\n\n const canvas = generateCanvas(crossPoints);\n\n crossPoints.forEach(point => {\n canvas.draw(point, '*');\n });\n\n return canvas.print();\n}", + "probId": "87377" }, { - "id": "Sxn1X5eCE8EwHlnbRf1DL", + "id": "GmyNKZ1InATO0-mX7t4j5", "author": "jaewon1676", - "code": "function solution(people, limit) {\n let cnt = 0;\n \n people.sort((a, b) => {return a - b}) // 몸무게 오름차순\n \n while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 \n if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기\n people.pop()\n people.shift()\n } else {\n people.pop() // 무거운사람을 뺴주자\n }\n cnt++;\n }\n return cnt;\n} // 4주차 2번 문제와 유사함\n\n", + "code": "function solution(people, limit) {\n let cnt = 0;\n \n people.sort((a, b) => {return a - b}) // 몸무게 오름차순\n \n while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 \n if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기\n people.pop()\n people.shift()\n } else {\n people.pop() // 무거운사람을 뺴주자\n }\n cnt++;\n }\n return cnt;\n} // 4주차 2번 문제와 유사함", "probId": "42885" }, { - "id": "Ja6NaEsDxGaaNg0-mPaXn", + "id": "rnxXpn50bj2uSIZOWgX1b", "author": "prove-ability", - "code": "function solution(people, limit) {\n let count = 0;\n // 오름차순 정렬\n people.sort((a, b) => a - b);\n \n // people 배열 요소가 있다면?\n while(people.length) {\n \n // 요소 중 가장 큰 수인 마지막 요소를 가져온다\n let sum = people.pop();\n \n // 요소 중 가장 작은 수를 더한다\n sum += people[0]\n \n // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거\n if(sum <= limit) people.shift();\n \n count++;\n }\n \n return count;\n}\n\n", + "code": "function solution(people, limit) {\n let count = 0;\n // 오름차순 정렬\n people.sort((a, b) => a - b);\n \n // people 배열 요소가 있다면?\n while(people.length) {\n \n // 요소 중 가장 큰 수인 마지막 요소를 가져온다\n let sum = people.pop();\n \n // 요소 중 가장 작은 수를 더한다\n sum += people[0]\n \n // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거\n if(sum <= limit) people.shift();\n \n count++;\n }\n \n return count;\n}", "probId": "42885" }, { - "id": "KV4eXKftErxLO7X6OMHy7", + "id": "GQgbNBSKI2JnPrJpE2HcO", "author": "iHoHyeon", "code": "function solution(people, limit) {\n people.sort((a, b) => a - b); // 오름차순 정렬\n\n let cnt = 0; // 구명보트 개수\n\n let front = 0; // 가장 몸무게가 작은 사람의 index\n let last = people.length; // 가장 몸무게가 큰 사람의 index\n\n while (last > front) {\n cnt++;\n\n const now = people.pop();\n last--;\n\n if (now + people[front] <= limit) {\n front++; // shift() 연산의 비효율로 인해 front 사용\n }\n }\n\n return cnt;\n}", "probId": "42885" }, { - "id": "tFDRvxSaC6b6JLdipTGIX", + "id": "hU3-XGy5Dh5NouMa-QYII", + "author": "codeisneverodd - 시간복잡도 감소", + "code": "function solution(progresses, speeds) {\n var answer = [];\n const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index]))\n console.log(remainDays)\n let maxDay = remainDays[0]\n answer.push(0)\n for (let i = 0; i < remainDays.length; i++) {\n if (remainDays[i] <= maxDay) {\n answer[answer.length - 1] += 1\n } else {\n answer.push(1)\n maxDay = remainDays[i]\n }\n }\n return answer;\n}", + "probId": "42586" + }, + { + "id": "MDAltVc9KeeEZgMIeeet4", "author": "codeisneverodd", - "code": "function solution(record) {\n var answer = [];\n const users = {}\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action !== 'Leave') users[id] = name\n })\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`)\n if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`)\n })\n return answer;\n}\n\n", - "probId": "42888" + "code": "function solution(progresses, speeds) {\n var answer = [];\n while (progresses.length > 0) {\n let done = 0\n progresses = progresses.map((prog, index) => prog + speeds[index])\n const length = progresses.length\n for (let i = 0; i < length; i++) {\n if (progresses[0] >= 100) {\n progresses.shift()\n speeds.shift()\n done += 1\n } else {\n break\n }\n }\n if (done > 0) answer.push(done)\n }\n return answer;\n}", + "probId": "42586" }, { - "id": "JPFztHteQt4pu6t82uPLf", + "id": "YQvnq0DpOo94g-ZmlgFfh", "author": "jaewon1676", - "code": "function solution(record) {\n let answer = [];\n const map = new Map();\n \n for (let i = 0; i < record.length; ++i) {\n const [state, uid, name] = record[i].split(' '); \n\n if (state == 'Leave') {\n answer.push([uid, '님이 나갔습니다.']);\n \n continue;\n }\n \n if (state == 'Enter') {\n answer.push([uid, '님이 들어왔습니다.']);\n }\n map.set(uid, name);\n }\n return answer.map(ele => map.get(ele[0]) + ele[1]);\n}\n\n", - "probId": "42888" + "code": "function solution(progresses, speeds) {\n let answer = [];\n \n while(speeds.length > 0) { \n for(let i=0;i= 100) { \n progresses.shift();\n speeds.shift();\n count++;\n }\n if(count > 0) { // 결과 배열에 넣어주기\n answer.push(count);\n }\n }\n return answer;\n}", + "probId": "42586" + }, + { + "id": "cvP9QQXeqFnvI8xgnwUQl", + "author": "createhb21", + "code": "function solution(progresses, speeds) {\n // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열\n var answer = [];\n // 각각의 기능이 몇 일 소요되는지 담은 큐\n let queue = [];\n \n for (let i = 0; i < speeds.length; i++) {\n // 각각의 기능이 몇 일 걸리는지 계산\n let task = Math.ceil((100 - progresses[i]) / speeds[i]);\n // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다.\n queue.push(task);\n \n // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push()\n // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화\n if(task > queue[0]) {\n answer.push(queue.length-1);\n // 큐 초기화\n queue = [task];\n }\n }\n \n answer.push(queue.length);\n return answer;\n }", + "probId": "42586" }, { - "id": "p4NaqOgrqSyAezdJvyYSk", + "id": "rAFFsDtNjHyvISgoZJAo-", "author": "chaerin-dev", - "code": "function solution(record) {\n // 최종 메시지를 저장할 배열\n let result = [];\n // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열\n let resultId = [];\n // 유저의 아이디: 닉네임 쌍을 저장할 Map\n let idNameMap = new Map();\n\n // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환\n record = record.map((e) => e.split(\" \"));\n\n // record의 각 요소에 대해\n record.forEach((e) => {\n // 각 요소의 첫 번째 요소(Enter/Leave/Change)가\n switch (e[0]) {\n // Enter이면\n case \"Enter\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 들어왔습니다.\");\n // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장\n idNameMap.set(e[1], e[2]);\n break;\n // Leave이면\n case \"Leave\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 나갔습니다.\");\n break;\n // Change이면\n case \"Change\":\n // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경\n idNameMap.set(e[1], e[2]);\n break;\n }\n });\n\n // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환\n return result.map((e, i) => idNameMap.get(resultId[i]) + e);\n}\n", - "probId": "42888" + "code": "function solution(progresses, speeds) {\n // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장\n const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i]));\n\n // 최초 배포날은 daysLeftArr의 첫 번째 요소\n let deployDay = daysLeftArr[0];\n // 각 배포에 몇 개의 기능이 배포될지 셀 변수\n let cnt = 0;\n // 각 배포에 몇 개의 기능이 배포될지 저장할 배열\n const answer = [];\n\n // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포\n daysLeftArr.forEach((daysLeft) => {\n if (deployDay < daysLeft) {\n deployDay = daysLeft;\n answer.push(cnt);\n cnt = 0;\n }\n cnt++;\n });\n answer.push(cnt);\n\n // 정답 반환\n return answer;\n}", + "probId": "42586" + }, + { + "id": "5egs3UUVQZKQu_4u4UAok", + "author": "RyanDeclan", + "code": "// 예제1) 입력값 : [93, 30, 55], [1, 30, 5]\nfunction solution(progresses, speeds) {\n // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열\n let countBox = [];\n let completeBox = [];\n for(k=1; k<100; k++){\n let complete = []\n for(i=0; i= 100){\n complete.push([i,k]);\n progresses.splice(i,1,\"end\")\n } \n }\n if(complete[0] != null)completeBox.push(...complete)\n } \n completeBox.sort((a,b) => a[0] - b[0])\n \n //여기까지 한다면 console.log(completeBox) \t[ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. \n // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 \n \n // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 \n let count = 0;\n completeBox.reduce((acc, cur, i) => {\n if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 \n if(i) countBox.push(count)\n acc[0] = cur[1];\n count = 0;\n count++\n }else{count++}\n if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. \n return acc\n } ,[0])\n return countBox;\n}", + "probId": "42586" }, { - "id": "x99vnLMYrMhIQuw2hQMWu", + "id": "I_BeTPeqYJu7WrkmGpgOY", "author": "codeisneverodd", - "code": "function solution(N, stages) {\n var answer = [];\n let failRate = new Array(N + 2).fill(0);\n let playerChallenging = new Array(N + 2).fill(0);\n let playerReached = new Array(N + 2).fill(0);\n\n for (const stage of stages) {\n for (let i = 1; i <= stage; i++) playerReached[i] += 1;\n playerChallenging[stage] += 1;\n }\n for (let i = 1; i <= N + 1; i++)\n failRate[i] =\n playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i];\n const rateNIndex = failRate\n .slice(1, N + 1)\n .map((rate, stage) => [rate, stage + 1]);\n const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]);\n answer = sortedRate.map((stage) => stage[1]);\n return answer;\n}\n\n", - "probId": "42889" + "code": "function solution(bridge_length, weight, truck_weights) {\n const bridge = new Array(bridge_length).fill(0)\n let tick = 0\n do {\n tick++\n bridge.pop()\n bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ?\n bridge.unshift(truck_weights.shift()) : bridge.unshift(0)\n } while (bridge.reduce((a, b) => a + b) !== 0)\n return tick;\n}", + "probId": "42583" }, { - "id": "2ekoYUKJzzlnD6tMzsl6A", + "id": "-cHOpUytMAnEUFlNx9D78", "author": "jaewon1676", - "code": "function solution(N, stages) {\n let map = Array.from(Array(N), () => Array(2).fill(0));\n let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수\n let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율\n let count = 0;\n\n stages.sort(function (a, b) {\n return a - b;\n }); // 난이도 오름차순 정렬\n for (let i = 1; i <= N; i++) {\n while (1) {\n // i 스테이지의 실패율 계산\n if (stages[0] == i) {\n answer[i - 1] += 1;\n count += 1;\n stages.shift();\n } else break;\n }\n rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산\n\n count = 0;\n\n map[i - 1][0] = i;\n map[i - 1][1] = rate[i - 1];\n }\n map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬\n let stack = []; // 답\n for (let i = 0; i < map.length; i++) {\n stack.push(map[i][0]);\n }\n\n return stack;\n}\n\n/* 풀이 과정\n1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다.\n2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다.\n3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서.\n4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다.\n*/\n", - "probId": "42889" + "code": "function solution(bridge_length, weight, truck_weights) {\n var answer = 0; // 총 걸리는 시간\n let bridge = []; // 다리를 건너는 트럭\n let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게\n \n while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다.\n answer++; // 1초 추가\n if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다.\n bridge_weight -= bridge.shift();\n }\n if (bridge_weight + truck_weights[0] > weight) { \n bridge.push(0);\n continue;\n }\n let truck_weight = truck_weights.shift();\n bridge.push(truck_weight);\n bridge_weight += truck_weight;\n }\n \n answer += bridge_length;\n \n return answer;\n }", + "probId": "42583" }, { - "id": "KqRczGou4V4FfLn6PewLc", + "id": "WOEHE3aeD1nT7kWkRw_ng", "author": "codeisneverodd", - "code": "function solution(relation) {\n //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다.\n //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다.\n //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다.\n const keys = []\n const totalAttrCount = relation[0].length\n const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1]\n\n //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수\n const isUnique = (relation, attrIndexComb) => {\n let result = Array.from(Array(relation.length), x => '')\n for (const attrIndex of attrIndexComb) {\n relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음.\n }\n return result.length === [...new Set(result)].length\n }\n\n //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다.\n const isMinimal = (attrComb) => {\n for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false\n return true\n }\n\n //가능한 모든 조합을 검사\n for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) {\n const combinations = getCombinations(indexList, attrCount)\n for (const attrComb of combinations) {\n if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb)\n }\n }\n\n return keys.length\n}\n\n//Fn for 1. 조합을 반환하는 함수\nconst getCombinations = (array, selectNumber) => {\n const result = [];\n if (selectNumber === 1) {\n return array.map((element) => [element]);\n }\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}\n", - "probId": "42890" + "code": "function solution(n) {\n var answer = 0;\n let find = false\n const nCountOne = countOne(n.toString(2))\n let counter = 1\n while (!find) {\n if (nCountOne === countOne((n + counter).toString(2))) {\n answer = n + counter\n find = true\n }\n counter++\n }\n return answer;\n}\n\nconst countOne = (str) => {\n return str.split('').reduce((sum, currentChar) =>\n currentChar === '1' ? sum += 1 : sum, 0)\n}", + "probId": "12911" }, { - "id": "a1zKAO5v5a6cSgJqzSWgs", - "author": "ryong9rrr", - "code": "function solution(food_times, k) {\n const total = food_times.reduce((a, b) => a + b)\n if (total <= k) {\n return -1\n }\n\n // stack으로 풀기\n const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA)\n\n let prev = 0\n while (stack.length > 0 && k >= 0) {\n const [time] = stack[stack.length - 1]\n const acc = (time - prev) * stack.length\n if (k < acc) {\n break\n }\n stack.pop()\n k -= acc\n prev = time\n }\n\n const result = stack\n .reverse()\n .map(([_, order]) => order)\n .sort((orderA, orderB) => orderA - orderB)\n return result[k % result.length]\n}", - "probId": "42891" + "id": "a3oIfmg9mz5ioPQMr21vu", + "author": "prove-ability", + "code": "function solution(n) {\n let i = n;\n n = n.toString(2).match(/1/g).length;\n while(true) {\n i++;\n const value = i.toString(2).match(/1/g).length;\n if(n === value) return i;\n }\n}", + "probId": "12911" }, { - "id": "TMwohTPFNdVp8sDLh0oPl", - "author": "codeisneverodd", - "code": "function solution(n, computers) {\n let answer = 0\n const visited = new Array(n).fill(false)\n const newNetwork = (startComputer) => {\n //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다.\n const toBeVisited = [startComputer]\n while (toBeVisited.length > 0) {\n //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다\n const currentComputer = toBeVisited.pop()\n visited[currentComputer] = true\n for (let nextComputer = 0; nextComputer < n; nextComputer++) {\n if (!visited[nextComputer] && computers[currentComputer][nextComputer]) {\n toBeVisited.push(nextComputer)\n }\n }\n }\n }\n\n for (let startComputer = 0; startComputer < n; startComputer++) {\n if (!visited[startComputer]) {\n newNetwork(startComputer)\n //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다.\n answer++\n }\n }\n return answer\n}", - "probId": "43162" + "id": "l95ho5Jwir614tOg5zY0m", + "author": "dia", + "code": "function solution(n) {\n const count = (num) => num.toString(2).match(/1/g).length;\n for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i\n}", + "probId": "12911" }, { - "id": "Zo4dG6G_do1oh_ab-0eJB", + "id": "Hw4Uvj4iiYalJiSxgHjUR", "author": "codeisneverodd", - "code": "function solution(tickets) {\n const routes = [] //최종 가능 루트들을 담을 배열\n const makeRoutes = (currentDepart, remainTickets, currentRoute) => {\n //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수\n if (remainTickets.length > 0) {\n remainTickets.forEach(([depart, nextDepart], index) => {\n if (depart === currentDepart)\n //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정\n makeRoutes(\n nextDepart,\n [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)],\n [...currentRoute, currentDepart])\n })\n } else {\n //티켓을 모두 사용하면 최종 가능 루트에 포함\n routes.push([...currentRoute, currentDepart])\n }\n }\n makeRoutes(\"ICN\", tickets, [])\n return routes.sort()[0]\n}", - "probId": "43164" + "code": "function solution(queue1, queue2) {\n const getSum = arr => arr.reduce((a, c) => a + c, 0);\n\n if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1;\n\n const queue = [...queue1, ...queue2, ...queue1, ...queue2];\n const maxCount = queue.length;\n const average = getSum(queue) / 4;\n let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length];\n\n const pop = () => {\n currentSum -= queue[start];\n start += 1;\n count += 1;\n };\n const insert = () => {\n currentSum += queue[end];\n end += 1;\n count += 1;\n };\n\n while (count <= maxCount) {\n if (currentSum < average) insert();\n if (currentSum > average) pop();\n if (currentSum === average) return count;\n }\n return -1;\n}", + "probId": "118667" }, { - "id": "amJdham1OZp3o0v5EtSe4", - "author": "ssi02014", - "code": "function solution(numbers, target) {\n let answer = 0;\n\n dfs(0, 0);\n return answer;\n\n function dfs(index, sum) {\n // 재귀 종료\n if (index === numbers.length) {\n if (sum === target) {\n answer++;\n }\n return;\n }\n\n dfs(index + 1, sum + numbers[index]);\n dfs(index + 1, sum - numbers[index]);\n }\n}\n\n", - "probId": "43165" + "id": "fTOq7pYYB9bscgn2zupAh", + "author": "jaewon1676", + "code": "function solution(land) {\n var answer = 0;\n \n for (i = 1; i < land.length; i++){\n land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3]));\n land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3]));\n land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3]));\n land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2]))\n }\n answer = land[land.length - 1]\n return Math.max(...answer)\n}\n/* 풀이 과정\n1. land의 행만큼 반복문을 돌린다.\n2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다.\n3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/", + "probId": "12913" }, { - "id": "HpUdTdOFinVeFrQkpJcrV", + "id": "HPyYrHXIrMycrG0bq4EQD", "author": "codeisneverodd", - "code": "function solution(numbers, target) {\n var answer = 0;\n const binaryLength = numbers.length;\n const binary = 2 ** binaryLength;\n for (let i = 0; i < binary; i++) {\n const numSlice = numbers.slice();\n const binaryString = i.toString(2).padStart(binaryLength, '0');\n for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null;\n const calculated = numSlice.reduce((prev, current) => prev + current);\n if (calculated === target) answer += 1;\n }\n return answer;\n}\n", - "probId": "43165" + "code": "function solution(land) {\n for (let rowIndex = 1; rowIndex < land.length; rowIndex++) {\n for (let colIndex = 0; colIndex < land[0].length; colIndex++) {\n land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1))\n }\n }\n return Math.max(...land[land.length - 1])\n}", + "probId": "12913" }, { - "id": "TFMuO8PrAC7tTv1RWtC9y", + "id": "ZZz7GQgS64dtdd3u9DJyV", "author": "codeisneverodd", - "code": "function solution(n, times) {\n //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right\n let [left, right] = [1, Math.max(...times) * n];\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0);\n //sum은 mid 시간 동안 처리 할 수 있는 사람의 수\n if (sum < n) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다.\n return left;\n}\n", - "probId": "43238" + "code": "function solution(n) {\n if (n < 2) return 1;\n const count = [0, 1, 2, ...Array(n - 2).fill(0)];\n count.forEach((_, i) => {\n if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567;\n });\n return count[n];\n}\n//재귀를 사용하면 콜스택 오버플로우가 발생합니다.", + "probId": "12914" }, { - "id": "_d98-RD0l3ev3jjOYmQYx", + "id": "Wu7paTcG7YzIMjk1uBSP7", "author": "codeisneverodd", - "code": "function solution(n, edge) {\n const graph = Array.from(Array(n + 1), () => [])\n for (const [src, dest] of edge) {\n graph[src].push(dest)\n graph[dest].push(src)\n }\n const distance = Array(n + 1).fill(0)\n distance[1] = 1\n const toBeSearched = [1]\n while (toBeSearched.length > 0) {\n const src = toBeSearched.shift()\n for (const dest of graph[src]) {\n if (distance[dest] === 0) {\n distance[dest] = distance[src] + 1\n toBeSearched.push(dest)\n }\n }\n }\n return distance.filter(x => x === Math.max(...distance)).length\n}", - "probId": "49189" + "code": "function solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor2(w, h)\n const erasedBoxInUnit = h / gcd + w / gcd - 1\n answer = w * h - erasedBoxInUnit * gcd\n return answer;\n}\n\nlet greatestCommonDivisor2 = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", + "probId": "62048" }, { - "id": "N_z1WyMHQRNs2rc3J-kBF", + "id": "rn6KK1xRT0IxHWmnGvOY4", + "author": "jaewon1676", + "code": "// 유클리드 호제법을 이용한 최대 공약수 구하기\nfunction gcd(w, h) { \n let mod = w % h; // w와 h의 나머지를 구합니다.\n\n if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다.\n return h;\n }\n // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다.\n return gcd(h, mod);\n}\nfunction solution(w, h) {\n const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다.\n return w * h - (w + h - gcdVal);\n}", + "probId": "62048" + }, + { + "id": "sj4JCFVuhirDTa3u5lH4y", + "author": "yongchanson", + "code": "function solution(w,h){\n const slope = h / w;\n let cnt = 0;\n //대각선 아래에 위치한 도형의 개수를 구합니다.\n //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다.\n for(let i = 1; i <= w; i++){\n cnt += Math.ceil(slope * i);\n }\n //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다.\n return ((w*h - cnt) * 2);\n}", + "probId": "62048" + }, + { + "id": "sDZT5JV-1nxnQsPC7kAoX", "author": "codeisneverodd", - "code": "function solution(skill, skill_trees) {\n var answer = 0;\n for (const tree of skill_trees) {\n let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x))\n if (checkOrder(check)) answer += 1\n }\n return answer;\n}\n\nfunction checkOrder(checkArr) {\n for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false\n return true\n}", - "probId": "49993" + "code": "function solution(orders, course) {\n var answer = [];\n for (const selectNum of course) {\n let combinations = []\n for (const order of orders) {\n getCombinations(Array.from(order), selectNum)\n .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다.\n .forEach(combString => combinations.push(combString))\n }\n const combCounts = combinations.reduce((counts, combination) => {\n counts[combination] = (counts[combination] || 0) + 1;\n return counts;\n }, {});\n let maxCount = 0, maxComb = []\n for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb]\n for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb)\n answer.push(...maxComb)\n }\n answer = answer.sort()\n return answer;\n}\n\nconst getCombinations = (array, selectNum) => {\n const result = [];\n if (selectNum === 1) return array.map((element) => [element]);\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}", + "probId": "72411" }, { - "id": "l8wq2rO45w__Ocv_dY6_1", + "id": "7irtNw9hvAlaZPb_MDTcj", "author": "codeisneverodd", - "code": "function solution(dirs) {\n const move = ([x, y], dir) => {\n let next = [x, y];\n if (dir === 'U') next = [x, y + 1];\n if (dir === 'D') next = [x, y - 1];\n if (dir === 'R') next = [x + 1, y];\n if (dir === 'L') next = [x - 1, y];\n if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y];\n return next;\n };\n\n const isSameRoute = ([s1, e1], [s2, e2]) => {\n const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2;\n return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1));\n };\n\n const trace = {\n visited: [],\n visit(start, end) {\n if (start[0] === end[0] && start[1] === end[1]) return;\n if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]);\n },\n };\n\n let current = [0, 0];\n\n dirs.split('').forEach(dir => {\n const next = move(current, dir);\n trace.visit(current, next);\n current = next;\n });\n\n return trace.visited.length;\n}\n", - "probId": "49994" + "code": "function solution(word) {\n const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 };\n const price = calculatePrice([1], 5);\n return word\n .split(\"\")\n .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet])\n .reduce((acc, curr) => acc + curr, 0);\n}\nconst calculatePrice = (result = [1], targetLength) => {\n if (result.length === targetLength) return result;\n return calculatePrice([result[0] * 5 + 1, ...result], targetLength);\n};\n/*\n각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까?\n4번째 자리 - 1\n3번째 자리 - 1*5 + 1 = 6\n2번째 자리 - 6*5 + 1 = 31\n1번째 자리 - 31*5 + 1 = 156\n0번째 자리 - 156*5 + 1 = 781\n\n검증(1부터 시작하므로 1 + 비용)\nI => (1 + 781 * 2) = 1563\nEIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189\nAAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10\nAAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6\n추천 레퍼런스: https://seongho96.tistory.com/50\n*/", + "probId": "84512" }, { - "id": "xHh0Va77tzrAqLRAQ_8R9", + "id": "-5BZuGm5AyC5ZKLKpd7JE", "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = 0;\n let lengthArr = []\n for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length)\n answer = Math.min(...lengthArr)\n return answer;\n}\n\nfunction compressedString(str, unitNum) {\n let count = 1\n let result = ['']\n for (let repeat = 0; repeat <= str.length / unitNum; repeat++) {\n const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum)\n if (result[result.length - 1] === slicedGroup) {\n count++\n } else {\n if (count > 1) result[result.length - 1] = count + result[result.length - 1]\n result.push(slicedGroup)\n count = 1\n }\n }\n return result.join('')\n}\n\n", + "code": "function solution(s) {\n var answer = 0;\n let lengthArr = []\n for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length)\n answer = Math.min(...lengthArr)\n return answer;\n}\n\nfunction compressedString(str, unitNum) {\n let count = 1\n let result = ['']\n for (let repeat = 0; repeat <= str.length / unitNum; repeat++) {\n const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum)\n if (result[result.length - 1] === slicedGroup) {\n count++\n } else {\n if (count > 1) result[result.length - 1] = count + result[result.length - 1]\n result.push(slicedGroup)\n count = 1\n }\n }\n return result.join('')\n}", "probId": "60057" }, { - "id": "WTd5Qn0nXnoidihRk1KM_", + "id": "uW25FzfRyHvkJYHKFHBWN", "author": "chaerin-dev", - "code": "function solution(s) {\n // len: 압축 전 문자열 길이\n const len = s.length;\n // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화)\n let shortenLen = len;\n\n // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행\n for (let i = 1; i <= len / 2; i++) {\n // cnt: 단위가 반복되는 횟수를 카운트할 변수\n let cnt = 1;\n // temp: 현재 단위 문자열을 임시로 저장해둘 변수\n let temp = s.slice(0, i);\n // shhortenS: 압축 후 문자열을 저장할 변수\n let shortenS = \"\";\n\n // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단\n for (let j = i; j < len; j += i) {\n // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가\n if (temp === s.slice(j, j + i)) cnt++;\n // 현재 단위 문자열과 일치하지 않으면\n else {\n // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 단위가 반복되는 횟수는 다시 1로 초기화\n cnt = 1;\n // 현재 단위 문자열 업데이트\n temp = s.slice(j, j + i);\n }\n }\n\n // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 압축 후 문자열 길이의 최솟값 업데이트\n shortenLen = Math.min(shortenLen, shortenS.length);\n }\n\n // 압축 후 문자열 길이의 최솟값 반환\n return shortenLen;\n}\n", + "code": "function solution(s) {\n // len: 압축 전 문자열 길이\n const len = s.length;\n // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화)\n let shortenLen = len;\n\n // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행\n for (let i = 1; i <= len / 2; i++) {\n // cnt: 단위가 반복되는 횟수를 카운트할 변수\n let cnt = 1;\n // temp: 현재 단위 문자열을 임시로 저장해둘 변수\n let temp = s.slice(0, i);\n // shhortenS: 압축 후 문자열을 저장할 변수\n let shortenS = \"\";\n\n // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단\n for (let j = i; j < len; j += i) {\n // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가\n if (temp === s.slice(j, j + i)) cnt++;\n // 현재 단위 문자열과 일치하지 않으면\n else {\n // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 단위가 반복되는 횟수는 다시 1로 초기화\n cnt = 1;\n // 현재 단위 문자열 업데이트\n temp = s.slice(j, j + i);\n }\n }\n\n // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 압축 후 문자열 길이의 최솟값 업데이트\n shortenLen = Math.min(shortenLen, shortenS.length);\n }\n\n // 압축 후 문자열 길이의 최솟값 반환\n return shortenLen;\n}", "probId": "60057" }, { - "id": "4JdGatm2NgPm76lb_CgLP", + "id": "Z8cmY--tXmTO-zeIET6sc", "author": "codeisneverodd", - "code": "function solution(p) {\n if (p.length === 0) return p\n let bracketCount = 0\n let isURight = true\n for (let i = 0; i < p.length; i++) {\n bracketCount = p[i] === '(' ? bracketCount + 1 : bracketCount - 1\n if (bracketCount < 0) isURight = false\n if (bracketCount === 0) {\n const [u, v] = [p.slice(0, i + 1), p.slice(i + 1)]\n if (isURight) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n }\n}\n\n", - "probId": "60058" + "code": "function solution(dirs) {\n const move = ([x, y], dir) => {\n let next = [x, y];\n if (dir === 'U') next = [x, y + 1];\n if (dir === 'D') next = [x, y - 1];\n if (dir === 'R') next = [x + 1, y];\n if (dir === 'L') next = [x - 1, y];\n if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y];\n return next;\n };\n\n const isSameRoute = ([s1, e1], [s2, e2]) => {\n const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2;\n return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1));\n };\n\n const trace = {\n visited: [],\n visit(start, end) {\n if (start[0] === end[0] && start[1] === end[1]) return;\n if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]);\n },\n };\n\n let current = [0, 0];\n\n dirs.split('').forEach(dir => {\n const next = move(current, dir);\n trace.visit(current, next);\n current = next;\n });\n\n return trace.visited.length;\n}", + "probId": "49994" }, { - "id": "sYeKYoNvq3GbKGGA8kW_J", - "author": "codeisneverodd", - "code": "function solution(p) {\n if (p.length === 0) {\n return p\n } else {\n const sliceIndex = balancedIndex(p)\n const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)]\n if (isRight(u)) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n}\n\nconst isRight = (str) => {\n if (str[0] === ')') return false\n let stack = 0\n for (let i = 0; i < str.length; i++) {\n stack = str[i] === '(' ? stack + 1 : stack - 1\n if (stack < 0) return false\n }\n return stack === 0\n}\nconst balancedIndex = (str) => {\n let count = 0\n for (let i = 0; i < str.length; i++) {\n count = str[i] === '(' ? count + 1 : count - 1\n if (count === 0) return i\n }\n}", - "probId": "60058" + "id": "Kq1GVFNQc8tCairBbSKlp", + "author": "pereng11", + "code": "// 다익스트라 + 최소힙 O( N * logN ) \n // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 \nclass MinHeap{\n constructor ()\n {\n this.heap = [ null ];\n }\n // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬\n push ( val )\n {\n this.heap.push(val);\n let childIdx = this.heap.length-1;\n let parentIdx = Math.floor(childIdx / 2);\n while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){\n this.swap( childIdx, parentIdx );\n childIdx = parentIdx;\n parentIdx = Math.floor(childIdx / 2);\n }\n }\n pop ()\n {\n if ( this.heap.length === 1 )\n {\n return undefined;\n }\n // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬\n const minNode = this.heap[ 1 ];\n this.heap[ 1 ] = this.heap[ this.heap.length - 1 ];\n this.heap.pop();\n let parentIdx = 1;\n let leftChildIdx = 2;\n let rightChildIdx = 3;\n while ( parentIdx < this.heap.length )\n {\n // 자식이 없는 경우 \n if ( !this.heap[ leftChildIdx ] )\n {\n break;\n } // 왼쪽 자식만 있는 경우\n else if ( !this.heap[ rightChildIdx ] )\n {\n if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] )\n {\n this.swap( parentIdx, leftChildIdx );\n }\n break;\n // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬\n } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] )\n {\n const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx;\n this.swap( parentIdx, minChildIdx );\n parentIdx = minChildIdx;\n leftChildIdx = parentIdx * 2\n rightChildIdx = parentIdx * 2 + 1;\n } else\n {\n // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지\n break;\n }\n }\n return minNode;\n }\n swap ( idx1, idx2 )\n {\n [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ];\n }\n length ()\n {\n return this.heap.length;\n }\n}\n \nfunction solution ( N, road, K )\n{\n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const heap = new MinHeap();\n\n //시작점 삽입\n heap.push( [sp, 0] );\n\n // 가장 가까운 목적지부터 순서대로 방문\n while ( heap.length() > 1 )\n {\n //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리]\n const [ ep, val ] = heap.pop();\n //아직 방문하지 않은 곳만 처리\n if ( !visited[ ep ] )\n {\n //방문처리, 거리 저장\n visited[ ep ] = true;\n dist[ ep ] = val;\n //방문 지점을 거쳐서 가는 다른 목적지 구하기\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n {\n heap.push( [ nextEp, val + nextVal ] );\n }\n })\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", + "probId": "12978" }, { - "id": "dfcN2IQGD9YoNLHxiJqyk", - "author": "ryong9rrr", - "code": "class Node {\n constructor(value = '') {\n this.value = value\n this.children = new Map()\n this.count = 0\n }\n}\n\nclass Trie {\n constructor() {\n this.root = new Node()\n }\n\n insert(string) {\n let currentNode = this.root\n for (const char of string) {\n if (!currentNode.children.has(char)) {\n currentNode.children.set(char, new Node(currentNode.value + char))\n }\n currentNode = currentNode.children.get(char)\n currentNode.count++\n }\n }\n\n startsWithCount(prefix) {\n let currentNode = this.root\n for (const char of prefix) {\n if (!currentNode.children.has(char)) {\n return 0\n }\n currentNode = currentNode.children.get(char)\n }\n return currentNode.count\n }\n}\n\nfunction reverseString(string) {\n return [...string].reverse().join('')\n}\n\nfunction solution(words, queries) {\n const table = {}\n const reverseTable = {}\n const counter = {}\n\n words.forEach((word) => {\n const key = word.length\n if (!table[key]) table[key] = new Trie()\n if (!reverseTable[key]) reverseTable[key] = new Trie()\n table[key].insert(word)\n reverseTable[key].insert(reverseString(word))\n if (counter[key] === undefined) counter[key] = 0\n counter[key]++\n })\n\n return queries.map((query) => {\n const key = query.length\n if (!table[key]) {\n return 0\n }\n const tQuery = query.replace(/\\?/g, '')\n if (!tQuery) {\n return counter[key]\n }\n if (query[query.length - 1] === '?') {\n return table[key].startsWithCount(tQuery)\n }\n return reverseTable[key].startsWithCount(reverseString(tQuery))\n })\n}", - "probId": "60060" + "id": "msy-ML-qEtm5CfrdCPenf", + "author": "pereng11 O(N * N);", + "code": "//다익스트라 + 선형탐색\nfunction solution ( N, road, K )\n{ \n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const queue = [];\n\n queue.push( [sp, 0] );\n\n while ( queue.length > 0 )\n {\n const [ ep, val ] = queue.shift();\n if ( dist[ ep ] > val )\n {\n dist[ ep ] = val;\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n if ( dist[ nextEp ] > val + nextVal )\n {\n queue.push( [ nextEp, val + nextVal ] );\n }\n } );\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", + "probId": "12978" }, { - "id": "bg1nA1iOZ7o8w90kEXLHR", - "author": "codeisneverodd", - "code": "function solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor(w, h)\n answer = w * h - (h + w - gcd)\n return answer;\n}\n\nlet greatestCommonDivisor = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}\n\n", - "probId": "62048" + "id": "lr1m9SNkA3cP3Kko4poyk", + "author": "minjongbaek", + "code": "// 빛의 이동을 위한 DX, DY 변수를 선언합니다.\nconst DX = [-1, 1, 0, 0];\nconst DY = [0, 0, -1, 1];\n\nfunction solution(grid) {\n\n // DFS에 4방향을 고려하여 문제를 풉니다.\n // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다.\n\n const answer = [];\n\n // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]]\n const visited = Array.from({ length: grid.length }, () => []).map((v) => {\n for (let i = 0; i < grid[0].length; i += 1) {\n v.push(new Array(4).fill(false));\n }\n return v\n });\n\n for (let x = 0; x < grid.length; x += 1) {\n for (let y = 0; y < grid[0].length; y += 1) {\n for (let d = 0; d < 4; d += 1) {\n // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다.\n if (!visited[x][y][d]) {\n const stack = [];\n stack.push([x, y, d]);\n\n let cnt = 0;\n while (stack.length !== 0) {\n const [currentX, currentY, currentD] = stack.pop();\n if (!visited[currentX][currentY][currentD]) {\n visited[currentX][currentY][currentD] = true;\n cnt += 1;\n\n const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다.\n const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다.\n \n stack.push([nextX, nextY, nextD])\n }\n\n }\n answer.push(cnt);\n }\n }\n }\n }\n return answer.sort((a, b) => a - b);\n}\n\n// 다음 행선지를 구하는 함수\nfunction getNextXY(x, y, d, xLength, yLength) {\n x += DX[d];\n y += DY[d];\n\n // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다.\n if (x < 0) x = xLength - 1;\n if (x >= xLength) x = 0;\n if (y < 0) y = yLength - 1;\n if (y >= yLength) y = 0;\n\n return [x, y];\n}\n\n// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수\nfunction getNextD(command, d) {\n if (command === 'L') {\n d = [2, 3, 1, 0][d]\n } else if (command === 'R') {\n d = [3, 2, 0, 1][d]\n }\n return d\n}", + "probId": "86052" }, { - "id": "5W48yUElKdVgsH9cuqzoI", + "id": "1z-2PinVSvQGSCBO6kbcX", "author": "codeisneverodd", - "code": "function solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor2(w, h)\n const erasedBoxInUnit = h / gcd + w / gcd - 1\n answer = w * h - erasedBoxInUnit * gcd\n return answer;\n}\n\nlet greatestCommonDivisor2 = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}\n\n", - "probId": "62048" + "code": "function solution(n) {\n const snail = Array.from(Array(n), (_, index) => Array(index + 1));\n let currentNum = 0;\n let [currentRow, currentCol] = [-1, 0];\n let shouldMove = n;\n while (shouldMove > 0) {\n for (let i = 0; i < shouldMove; i++)\n snail[++currentRow][currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 1; i++)\n snail[currentRow][++currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 2; i++)\n snail[--currentRow][--currentCol] = ++currentNum;\n shouldMove -= 3;\n }\n return snail.flatMap((num) => num);\n}", + "probId": "68645" }, { - "id": "5tg-e62YPGS0CbsuouVbb", + "id": "r_27wlpTxUvAtFpPJ1Muf", "author": "jaewon1676", - "code": "// 유클리드 호제법을 이용한 최대 공약수 구하기\nfunction gcd(w, h) { \n let mod = w % h; // w와 h의 나머지를 구합니다.\n\n if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다.\n return h;\n }\n // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다.\n return gcd(h, mod);\n}\nfunction solution(w, h) {\n const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다.\n return w * h - (w + h - gcdVal);\n} \n\n", - "probId": "62048" + "code": "function solution(n) {\n const answer = new Array(n).fill().map((e, i) => new Array(i + 1));\n // 이차원배열을 만들어준다\n \n let count = 0;\n let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다.\n let y = 0; // 열 \n while (n > 0) {\n for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다.\n for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다.\n for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다.\n \n n -= 3;\n }\n return answer.flatMap(e => e);\n // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. \n // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] \n // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7]\n}", + "probId": "68645" }, { - "id": "R9AJ8bcOH6-WXZff4ODyr", - "author": "yongchanson", - "code": "function solution(w,h){\n const slope = h / w;\n let cnt = 0;\n //대각선 아래에 위치한 도형의 개수를 구합니다.\n //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다.\n for(let i = 1; i <= w; i++){\n cnt += Math.ceil(slope * i);\n }\n //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다.\n return ((w*h - cnt) * 2);\n}\n", - "probId": "62048" + "id": "lVgctjAf-exC5vJPEUJbT", + "author": "codeisneverodd", + "code": "function solution(expression) {\n var answer = 0;\n const mathExp = ['*', '+', '-']\n let priorityArr = Permutation(mathExp, 3)\n const calculated = []\n for (const priority of priorityArr) {\n const expressionArr = expression.split(/(\\D)/)\n for (const exp of priority) {\n while (expressionArr.includes(exp)) {\n const index = expressionArr.indexOf(exp)\n expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join('')))\n }\n }\n calculated.push(Math.abs(expressionArr[0]))\n }\n answer = Math.max(...calculated)\n return answer\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}", + "probId": "67257" }, { - "id": "eZiNNs5QH0aJbducs7DNm", - "author": "jaewon1676 ", - "code": "function solution(board, moves) {\n var answer = 0; // 인형을 터뜨린 횟수\n let basket = []; // 바구니\n let crane = 0; // 크레인의 행의 위치\n for (let i = 0; i < moves.length; i++) {\n crane = moves[i] - 1; // crane = 0\n for (let j = 0; j < board.length; j++) {\n if (board[j][crane] == 0)\n else if (board[j][crane] != 0) {\n basket.push(board[j][crane])\n board[j][crane] = 0\n if (basket[basket.length - 1] == basket[basket.length - 2]) {\n basket.pop();\n basket.pop();\n answer += 2;\n }\n break;\n }\n }\n }\n\n return answer;\n}\n\n/* 풀이 과정\n1. 입력받은 moves의 length만큼 for문을 돌린다.\n2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다.\n3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다.\n4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */\n\n", - "probId": "64061" + "id": "rWHtuGCQ8Bi-ns1CkKnGB", + "author": "codeisneverodd", + "code": "function solution(infos, queries) {\n const infoData = {};\n\n const fetchInfoData = (keyArr, score, start) => {\n const key = keyArr.join('');\n\n infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]);\n\n for (let i = start; i < keyArr.length; i++) {\n fetchInfoData(\n keyArr.map((v, index) => (index === i ? '-' : v)),\n score,\n i + 1\n );\n }\n };\n\n const getPassCount = (key, passScore) => {\n const scores = infoData[key];\n\n if (!scores) return 0;\n\n let [left, right] = [0, scores.length];\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n scores[mid] >= passScore ? (right = mid) : (left = mid + 1);\n }\n\n return scores.length - left;\n };\n\n infos\n .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]])\n .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0));\n\n Object.keys(infoData).forEach(key => {\n infoData[key].sort((a, b) => a - b);\n });\n\n return queries\n .map(query => query.replace(/ and /g, '').split(' '))\n .map(([key, passScore]) => getPassCount(key, +passScore));\n}\n// 주의 할 점\n// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림\n// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림.\n// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음.", + "probId": "72412" }, { - "id": "cvL0xkHpC95a-p2BIcBW2", - "author": "chaerin-dev", - "code": "function solution(board, moves) {\n let n = board.length;\n\n // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경\n board = board.flat();\n let rotatedBoard = Array.from({ length: n }, (i) => []);\n for (let i = 0; i < board.length; i++) {\n if (board[i]) rotatedBoard[i % n].push(board[i]);\n }\n\n // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기\n let stack = [];\n let cnt = 0;\n for (let move of moves) {\n let doll = rotatedBoard[move - 1].shift();\n if (doll === undefined) continue;\n if (stack[stack.length - 1] === doll) {\n stack.pop();\n cnt += 2;\n } else {\n stack.push(doll);\n }\n }\n\n return cnt;\n}", - "probId": "64061" + "id": "ADsyb_WjuSSyUyZN5m2ms", + "author": "iHoHyeon", + "code": "function solution(begin, end) {\n return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx));\n // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다.\n}\n \nconst calc = (number) => {\n if (number === 1) return 0;\n // 1번째 위치는 무조건 0블록이 위치\n\n for (let i = 2; i <= Math.sqrt(number); i++) {\n if (number % i === 0 && number / i <= 10_000_000) return number / i;\n // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외\n }\n\n return 1;\n};\n\n/*\n 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는\n 시간 / 공간 복잡도가 급상승\n\n -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자\n \n -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다.\n\n -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다.\n\n + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다.\n*/", + "probId": "12923" }, { - "id": "spClcvPas29QM_oFXoooh", + "id": "epYEmCvF69vISKQQao27r", "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = [];\n let sets = s\n .slice(2, -2)\n .split('},{')\n .map(set => set.split(',').map(x => parseInt(x)))\n .sort((a, b) => a.length - b.length)\n for (const set of sets) answer.push(...set.filter(x => !answer.includes(x)))\n return answer;\n}\n\n", - "probId": "64065" + "code": "function solution(n) { //수학적 풀이는 별도로 하지 않았습니다.\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n let sum = 0\n for (let j = i; j <= n; j++) {\n sum += j\n if (sum >= n) {\n if (sum === n) answer++\n break\n }\n }\n }\n return answer;\n}", + "probId": "12924" }, { - "id": "h-nBZa6MhzPr-j_Hv0VNt", - "author": "chaerin-dev", - "code": "function solution(s) {\n // 문자열 -> 정수 이차원 배열\n const sArr = s\n .substring(2, s.length - 2)\n .split(\"},{\")\n .map((e) => e.split(\",\").map((e) => parseInt(e)))\n .sort((a, b) => a.length - b.length);\n // 정답을 저장할 배열\n const answer = [];\n // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가\n for (let i = 0; i < sArr.length; i++) {\n for (let j = 0; j < sArr[i].length; j++) {\n const temp = sArr[i][j];\n if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]);\n }\n }\n return answer;\n}", - "probId": "64065" + "id": "P-SWSqmBiDEVa1fxk6yWa", + "author": "prove-ability", + "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n let sum = 0;\n for(let j = i; j <= n; j++) {\n sum += j;\n if(sum > n) break;\n if(n === sum) {\n answer++;\n break;\n }\n }\n }\n return answer;\n}", + "probId": "12924" }, { - "id": "B_i7IFvRIZBetSbd-PAUe", - "author": "chaerin-dev", - "code": "function solution(numbers, hand) {\n // 키패드를 4행 3열의 이차원 배열이라고 생각\n\n // leftRow, leftCol: 왼손의 현재 위치\n let [leftRow, leftCol] = [3, 0];\n // rightRow, rightCol: 오른손의 현재 위치\n let [rightRow, rightCol] = [3, 2];\n // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열\n let result = '';\n\n // 눌러야할 각 번호가\n numbers.forEach(e => {\n // 1/4/7이면 왼손으로 눌러야하므로\n if (e === 1 || e === 4 || e === 7) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 3/6/9이면 오른손으로 눌러야하므로\n else if (e === 3 || e === 6 || e === 9) {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2];\n // result 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n\n // 2/5/8/0이면\n else {\n // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌\n if (e === 0) e = 11;\n\n // leftRow, leftCol: 다음에 눌러야 할 번호의 위치\n let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1];\n // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol);\n // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol);\n\n // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로\n if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [nextRow, nextCol];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로\n else {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [nextRow, nextCol];\n // reuslt 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n }\n });\n\n // result 문자열 반환\n return result;\n}\n\n//정답 3(🎩 refactor 220425) - codeisneverodd\nfunction solution(numbers, hand) {\n let leftNum = 10;\n let rightNum = 12;\n return numbers\n .map(num => {\n if (num === 0) {\n num = 11;\n }\n if (num % 3 === 1) {\n return leftTo(num);\n } else if (num % 3 === 0) {\n return rightTo(num);\n } else {\n const numLocation = numToLocation(num);\n const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation);\n const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation);\n if (leftDistance === rightDistance) {\n return hand === 'left' ? leftTo(num) : rightTo(num);\n } else if (leftDistance < rightDistance) {\n return leftTo(num);\n } else {\n return rightTo(num);\n }\n }\n })\n .join('');\n\n function leftTo(num) {\n leftNum = num;\n return 'L';\n }\n\n function rightTo(num) {\n rightNum = num;\n return 'R';\n }\n}\n", - "probId": "67256" + "id": "56IM1kIWG8vovFb8FvlKD", + "author": "yongchanson", + "code": "function solution(n) {\n /*\n 정답 = n의 홀수 약수의 개수\n 15의 홀수 약수 : 1,3,5,15\n 1+2+3+4+5=15 (중간값 3)\n 4+5+6=15 (중간값 5)\n 7+8=15 (연속된 값)\n 15=15 (15)\n */\n let result = 0;\n\n for (let i = 1; i <= n; i++) {\n if (n % i == 0 && i % 2 == 1) result++;\n }\n return result;\n}", + "probId": "12924" }, { - "id": "ZxUt852jTDOwDgHO8N6CQ", + "id": "8igzK_8Vg_mn3wJvxre2g", "author": "codeisneverodd", - "code": "function solution(expression) {\n var answer = 0;\n const mathExp = ['*', '+', '-']\n let priorityArr = Permutation(mathExp, 3)\n const calculated = []\n for (const priority of priorityArr) {\n const expressionArr = expression.split(/(\\D)/)\n for (const exp of priority) {\n while (expressionArr.includes(exp)) {\n const index = expressionArr.indexOf(exp)\n expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join('')))\n }\n }\n calculated.push(Math.abs(expressionArr[0]))\n }\n answer = Math.max(...calculated)\n return answer\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}", - "probId": "67257" + "code": "function solution(skill, skill_trees) {\n var answer = 0;\n for (const tree of skill_trees) {\n let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x))\n if (checkOrder(check)) answer += 1\n }\n return answer;\n}\n\nfunction checkOrder(checkArr) {\n for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false\n return true\n}", + "probId": "49993" }, { - "id": "4MMPkWfGDUTGeBCtGsf_A", - "author": "prove-ability", - "code": "function solution(numbers) {\n const answer = [];\n \n for(let i = 0, len = numbers.length; i < len; i++) {\n for(let j = i + 1, len = numbers.length; j < len; j++) {\n if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j])\n }\n }\n \n return answer.sort((a, b) => a - b);\n}\n\n", - "probId": "68644" + "id": "_Y9o25wC8QdSGtoAs53PM", + "author": "codeisneverodd", + "code": "// 문제 풀이 전략\n// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다.\n// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다.\n// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다.\n// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다.\n// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다.\n// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다\n// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다.\n// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다.\nfunction solution(possibleArrows, apeachComb) {\n const compareTable = apeachComb.map(apeachArrow => ({\n apeachArrow,\n ryanArrow: 0,\n }));\n const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows);\n const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff));\n const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff);\n if (maxScoreDiff <= 0) return [-1];\n const getIndexOfLastArrow = arrowTable =>\n arrowTable.length -\n arrowTable\n .slice()\n .reverse()\n .findIndex(x => x !== 0);\n return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable;\n}\nfunction getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) {\n const { apeachArrow } = compareTable[currentIndex];\n const lastIndex = compareTable.length - 1;\n const possibleRyanArrows = [\n 0,\n numberOfArrowLeft > apeachArrow && apeachArrow + 1,\n numberOfArrowLeft >= apeachArrow && apeachArrow,\n ];\n\n if (currentIndex === lastIndex || numberOfArrowLeft === 0) {\n if (numberOfArrowLeft > 0) {\n compareTable[compareTable.length - 1] = {\n apeachArrow,\n ryanArrow: numberOfArrowLeft,\n };\n }\n const appeachScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) =>\n apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc,\n 0\n );\n const ryanScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc),\n 0\n );\n return [\n {\n scoreDiff: ryanScore - appeachScore,\n ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow),\n },\n ];\n }\n return [\n ...possibleRyanArrows.flatMap(ryanUsedArrow => {\n const nextCompareTable = [...compareTable];\n nextCompareTable.splice(currentIndex, 1, {\n apeachArrow,\n ryanArrow: ryanUsedArrow,\n });\n return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow);\n }),\n ];\n}", + "probId": "92342" }, { - "id": "fMF972vIuWpphnKq-vWIY", + "id": "vXqqWwDddeHUK1og0nBmR", "author": "codeisneverodd", - "code": "function solution(n) {\n const snail = Array.from(Array(n), (_, index) => Array(index + 1));\n let currentNum = 0;\n let [currentRow, currentCol] = [-1, 0];\n let shouldMove = n;\n while (shouldMove > 0) {\n for (let i = 0; i < shouldMove; i++)\n snail[++currentRow][currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 1; i++)\n snail[currentRow][++currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 2; i++)\n snail[--currentRow][--currentCol] = ++currentNum;\n shouldMove -= 3;\n }\n return snail.flatMap((num) => num);\n}\n\n", - "probId": "68645" + "code": "function solution(n, words) {\n var answer = [];\n let turn = 1\n for (let i = 1; i < words.length; i++) {\n let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i]))\n if (i % n === 0) turn++\n if (!pass) return [i % n + 1, turn]\n }\n return [0, 0];\n}", + "probId": "12981" }, { - "id": "1XxEDLHjdyGjRqWdgZXTe", - "author": "jaewon1676", - "code": "function solution(n) {\n const answer = new Array(n).fill().map((e, i) => new Array(i + 1));\n // 이차원배열을 만들어준다\n \n let count = 0;\n let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다.\n let y = 0; // 열 \n while (n > 0) {\n for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다.\n for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다.\n for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다.\n \n n -= 3;\n }\n return answer.flatMap(e => e);\n // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. \n // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] \n // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7]\n}\n", - "probId": "68645" + "id": "oejp1FMB4gLCyabKsl2QQ", + "author": "codeisneverodd", + "code": "function solution(n, a, b) {\n let currentRound = 1;\n const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호\n while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다.\n if (myNextNumber(a) === myNextNumber(b)) break\n a = myNextNumber(a)\n b = myNextNumber(b)\n currentRound++\n }\n return currentRound\n}", + "probId": "12985" }, { - "id": "CUddl6ab2O3SO9kRUROOe", + "id": "1qQBLwDgkV8i1jHbXrqgo", + "author": "le2sky", + "code": "function solution(n, a, b) {\n let arr = Array.from({ length: n }, () => 0)\n arr[b - 1] = \"B\"\n arr[a - 1] = \"A\"\n\n const isDiff = () => {\n return (\n (arr.indexOf(\"A\") + 1 > arr.length / 2 && arr.indexOf(\"B\") + 1 <= arr.length / 2) ||\n (arr.indexOf(\"A\") + 1 <= arr.length / 2 && arr.indexOf(\"B\") + 1 > arr.length / 2)) ? true : false\n };\n const isLeft = () => {\n return (arr.indexOf(\"A\") + 1 > arr.length / 2) ? false : true\n };\n\n //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴\n while (!isDiff()) {\n if (isLeft()) {\n arr.splice(arr.length / 2)\n } else {\n arr.splice(0, arr.length / 2)\n }\n }\n return Math.log2(arr.length)\n}", + "probId": "12985" + }, + { + "id": "WqmL2Na4bYUXvbpas_beg", "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = 0;\n const ternaryReversed = decimalToTernaryReversed(n);\n answer = parseInt(ternaryReversed, 3);\n return answer;\n}\n\nconst decimalToTernaryReversed = (num) => {\n let ternary = \"\";\n while (num >= 3) {\n ternary += (num % 3).toString();\n num = Math.floor(num / 3);\n }\n ternary += num.toString();\n return ternary;\n};\n\n", - "probId": "68935" + "code": "function solution(record) {\n var answer = [];\n const users = {}\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action !== 'Leave') users[id] = name\n })\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`)\n if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`)\n })\n return answer;\n}", + "probId": "42888" }, { - "id": "85PaqiBxHYVHXg-4FVzA0", + "id": "L4ouXXaVgcMhVlgbrHcAW", "author": "jaewon1676", - "code": "function solution(n) {\n var answer = n.toString(3).split(\"\").reverse().join(\"\");\n\n return parseInt(answer, 3);\n}\n\n\n", - "probId": "68935" + "code": "function solution(record) {\n let answer = [];\n const map = new Map();\n \n for (let i = 0; i < record.length; ++i) {\n const [state, uid, name] = record[i].split(' '); \n\n if (state == 'Leave') {\n answer.push([uid, '님이 나갔습니다.']);\n \n continue;\n }\n \n if (state == 'Enter') {\n answer.push([uid, '님이 들어왔습니다.']);\n }\n map.set(uid, name);\n }\n return answer.map(ele => map.get(ele[0]) + ele[1]);\n}", + "probId": "42888" }, { - "id": "l0m47eKjmAGR2rnS35isr", - "author": "prove-ability", - "code": "function solution(n) {\n return parseInt(n.toString(3).split(\"\").reverse().join(\"\"), 3)\n}\n", - "probId": "68935" + "id": "ukiGWrvIwF3CSE8NsZGZf", + "author": "chaerin-dev", + "code": "function solution(record) {\n // 최종 메시지를 저장할 배열\n let result = [];\n // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열\n let resultId = [];\n // 유저의 아이디: 닉네임 쌍을 저장할 Map\n let idNameMap = new Map();\n\n // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환\n record = record.map((e) => e.split(\" \"));\n\n // record의 각 요소에 대해\n record.forEach((e) => {\n // 각 요소의 첫 번째 요소(Enter/Leave/Change)가\n switch (e[0]) {\n // Enter이면\n case \"Enter\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 들어왔습니다.\");\n // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장\n idNameMap.set(e[1], e[2]);\n break;\n // Leave이면\n case \"Leave\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 나갔습니다.\");\n break;\n // Change이면\n case \"Change\":\n // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경\n idNameMap.set(e[1], e[2]);\n break;\n }\n });\n\n // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환\n return result.map((e, i) => idNameMap.get(resultId[i]) + e);\n}", + "probId": "42888" }, { - "id": "VjBTGwobQsJgaSC_-3Xoo", + "id": "-nrwIjEg7lUKSi4DaTTEY", "author": "codeisneverodd", - "code": "function solution(arr) {\n const quad = matrix => {\n const length = matrix.length;\n const half = length / 2;\n const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0]));\n\n if (pass(matrix)) return [matrix[0][0]];\n if (length <= 2) return matrix;\n\n const startPoints = [\n [0, 0],\n [0, half],\n [half, 0],\n [half, half],\n ];\n\n return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half))));\n };\n return quad(arr)\n .flat(Infinity)\n .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]);\n}\n", - "probId": "68936" + "code": "function solution(s) {\n let opened = 0;\n for (const bracket of s) {\n if (bracket === \"(\") opened += 1;\n if (bracket === \")\") opened -= 1;\n if (opened < 0) return false;\n }\n return opened === 0;\n}", + "probId": "12909" }, { - "id": "ru906YcPbXPOcfCsbRbq3", - "author": "yongchanson", - "code": "function solution(a, b) {\n var answer = 0;\n\n for (i = 0; i < a.length; i++) {\n answer += a[i] * b[i];\n }\n return answer;\n}\n\n", - "probId": "70128" + "id": "CI2BZYf06lWIw_JFexsaq", + "author": "codeisneverodd", + "code": "function solution(clothes) {\n\tvar answer = 0;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes) {\n\t\tif (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = [];\n\t\tspyWear[clothNPart[1]].push(clothNPart[0]);\n\t}\n\tconst clothesCount = [];\n\tfor (const part in spyWear) clothesCount.push(spyWear[part].length + 1);\n\tanswer =\n\t\tclothesCount.reduce((previous, current) => previous * current, 1) - 1;\n\treturn answer;\n}", + "probId": "42578" }, { - "id": "yVSbigegJeob3iGsWLHPb", - "author": "prove-ability", - "code": "function solution(a, b) {\n var answer = 0;\n\n for (let i = 0, len = a.length; i < len; i++) {\n answer += a[i] * b[i];\n }\n\n return answer;\n}\n\n", - "probId": "70128" + "id": "39IUEp57bhrqiS-t-iI-D", + "author": "hyosung", + "code": "function solution(clothes) {\n\tlet answer = 1;\n\t// 옷 종류\n\tconst types = {};\n\t// 반복문 최적화 - length, 비교연산 제거\n\tconst length = clothes.length;\n\tfor (let i = length; i--; ) {\n\t\t// 해당 옷의 종류가 없다면 종류 1\n\t\tif (!types[clothes[i][1]]) types[clothes[i][1]] = 1;\n\t\t// 해당 옷의 종류가 있다면 종류 증가\n\t\telse types[clothes[i][1]] += 1;\n\t}\n\t// (종류 별 값 + 1 ) 을 다 곱셈\n\tObject.values(types).forEach((v) => {\n\t\tanswer *= v + 1;\n\t});\n\n\treturn answer - 1;\n}", + "probId": "42578" }, { - "id": "0tsbnkuvnI5KDsxeAkH_7", + "id": "DSBtX18gKMNaJrGch8gX7", "author": "jaewon1676", - "code": "function solution(a, b) {\n let answer = 0;\n for (let i=0; i acc + e * b[i], 0);\n}\n", - "probId": "70128" + "code": "function solution(clothes) {\n // 각 카테고리별 의상의 수를 clothsObj 객체에 저장\n const clothsObj = {};\n clothes.forEach((cloth) =>\n clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1)\n );\n\n // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐\n // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나)\n // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨\n let answer = 1;\n for (let key of Object.keys(clothsObj)) {\n answer *= clothsObj[key] + 1;\n }\n\n // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기\n return answer - 1;\n}", + "probId": "42578" }, { - "id": "C2e8cxdlvFHIVNicP62Sy", + "id": "HsabCQxkazjk8-nxkXZLR", "author": "codeisneverodd", - "code": "function solution(s) {\n const removeZero = s => {\n const removed = s\n .split('')\n .filter(n => n !== '0')\n .join('');\n return { removed, count: s.length - removed.length };\n };\n\n const convertToBinary = (s, turnCount, removedCount) => {\n if (s === '1') return [turnCount, removedCount];\n const { removed, count } = removeZero(s);\n return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count);\n };\n\n return convertToBinary(s, 0, 0);\n}\n\n", + "code": "function solution(s) {\n const removeZero = s => {\n const removed = s\n .split('')\n .filter(n => n !== '0')\n .join('');\n return { removed, count: s.length - removed.length };\n };\n\n const convertToBinary = (s, turnCount, removedCount) => {\n if (s === '1') return [turnCount, removedCount];\n const { removed, count } = removeZero(s);\n return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count);\n };\n\n return convertToBinary(s, 0, 0);\n}", "probId": "70129" }, { - "id": "YcU3sQNtn8xHnRaa35Bnp", + "id": "3DQJbbkh30kukb_u8-iUt", "author": "RyanDeclan", - "code": "function solution(s) {\n let box = [0,0]\n while(s.length > 1){\n let reamain = s.replace(/0/g,\"\").length\n box[0] += 1\n box[1] += (s.length - reamain)\n s = reamain.toString(2)\n }\n return box;\n}\n", + "code": "function solution(s) {\n let box = [0,0]\n while(s.length > 1){\n let reamain = s.replace(/0/g,\"\").length\n box[0] += 1\n box[1] += (s.length - reamain)\n s = reamain.toString(2)\n }\n return box;\n}", "probId": "70129" }, { - "id": "sbvUX65aK2-Lwa1ZaT34v", + "id": "CAQQEDkBb3To_C9jvFqs_", "author": "codeisneverodd", - "code": "function solution(new_id) {\n let answer = '';\n answer = new_id.toLowerCase(); // step1\n const step2 = /[^0-9a-z._-]/g;\n const step3 = /[.]+/g;\n const step4_1 = /^\\./;\n const step4_2 = /\\.$/;\n answer = answer.replace(step2, '');\n answer = answer.replace(step3, '.');\n answer = answer.replace(step4_1, '');\n answer = answer.replace(step4_2, '');\n answer = answer === '' ? 'a' : answer; // step5\n answer = answer.length >= 16 ? answer.slice(0, 15) : answer; //step6\n answer = answer.replace(step4_2, '');\n switch (\n answer.length // step7\n ) {\n case 1:\n answer = answer + answer[0] + answer[0];\n break;\n case 2:\n answer = answer + answer[1];\n break;\n }\n return answer;\n}\n\n", - "probId": "72410" - }, - { - "id": "sL2GSaV2X3RPQdy49j9UU", - "author": "jaewon1676", - "code": "function solution(new_id) {\n // 1 소문자로 치환\n let answer = new_id\n .toLowerCase()\n\n // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거.\n .replace(/[^a-z0-9-_.]/gi, '')\n\n // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환\n .replace(/[.]{2,}/gi, '.')\n\n // 4 마침표(.)가 처음이나 끝에 위치하면 제거\n .replace(/^[.]|[.]$/gi, '');\n\n // 5 빈 문자열이면 a 대입\n if (answer === '') answer = 'a';\n\n // 6 length > 15이면 그 뒤의 문자들은 제거\n if (answer.length > 15) {\n answer = answer.substring(0, 15);\n // 마침표(.)가 끝에 위치하면 마침표(.)제거\n answer = answer.replace(/[.]$/gi, '');\n }\n\n // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임\n while (answer.length < 3) {\n answer += answer[answer.length - 1];\n }\n return answer;\n}\n\n", - "probId": "72410" - }, - { - "id": "uZddXDn08sQ-xUh5qAfv_", - "author": "chaerin-dev", - "code": "function solution(new_id) {\n // 1단계: 모든 대문자를 소문자로\n new_id = new_id.toLowerCase();\n\n // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거\n new_id = new_id.replace(/[^\\w\\-\\.]/g, '');\n\n // 3단계: 연속되는 마침표는 마침표 하나로\n new_id = new_id.replace(/\\.{2,}/g, '.');\n\n // 4단계: 처음이나 끝에 마침표가 있으면 제거\n new_id = new_id.replace(/^\\.|\\.$/, '');\n\n // 5단계: new_id가 빈 문자열이면 \"a\" 대입\n if (new_id.length === 0) new_id = 'a';\n\n // 6단계: new_id의 길이가 16자 이상이면,\n // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거\n // 제거 후 끝에 마침표가 있으면 제거\n if (new_id.length >= 16) new_id = new_id.slice(0, 15);\n new_id = new_id.replace(/\\.$/, '');\n\n // 7단계: new_id의 길이가 2자 이하이면,\n // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임\n let len = new_id.length;\n if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len);\n\n return new_id;\n}\n//정답 5(🎩 refactor 220425) - codeisneverodd\nfunction solution(new_id) {\n let answer = new_id\n .toLowerCase() //step 1\n .replace(/[^0-9a-z._-]/g, '') // step 2\n .replace(/\\.+/g, '.') //step 3\n .replace(/^\\.|\\.$/g, '') //step 4\n .replace(/^$/, 'a') //step 5\n .slice(0, 15)\n .replace(/\\.$/, ''); //step 6\n // step7\n if (answer.length === 1) answer = answer[0].repeat(3);\n if (answer.length === 2) answer = answer + answer[1];\n\n return answer;\n}\n", - "probId": "72410" - }, - { - "id": "6M1CqHAtBwJKv9vNzxzKq", - "author": "codeisneverodd", - "code": "function solution(orders, course) {\n var answer = [];\n for (const selectNum of course) {\n let combinations = []\n for (const order of orders) {\n getCombinations(Array.from(order), selectNum)\n .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다.\n .forEach(combString => combinations.push(combString))\n }\n const combCounts = combinations.reduce((counts, combination) => {\n counts[combination] = (counts[combination] || 0) + 1;\n return counts;\n }, {});\n let maxCount = 0, maxComb = []\n for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb]\n for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb)\n answer.push(...maxComb)\n }\n answer = answer.sort()\n return answer;\n}\n\nconst getCombinations = (array, selectNum) => {\n const result = [];\n if (selectNum === 1) return array.map((element) => [element]);\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}\n", - "probId": "72411" + "code": "function solution(n, wires) {\n const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b);\n\n const convertWiresToTree = wires => [...new Set(wires.flat())];\n\n const generateTree = (wires, tree) => {\n if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree;\n\n const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire));\n const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))];\n\n return [...new Set(generateTree(nextWires, nextTree))];\n };\n\n let minDiff = Infinity;\n const length = convertWiresToTree(wires).length;\n\n wires.forEach((_, i) => {\n const [initWire, ...remainWires] = wires.filter((_, j) => j !== i);\n const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length;\n const diff = Math.abs(lengthA - (length - lengthA));\n minDiff = Math.min(diff, minDiff);\n });\n\n return minDiff;\n}", + "probId": "86971" }, { - "id": "ExAUQLm8_DbHoIOkdSICa", + "id": "J3oOt_BhD7UCkxSbXOpzE", "author": "codeisneverodd", - "code": "function solution(infos, queries) {\n const infoData = {};\n\n const fetchInfoData = (keyArr, score, start) => {\n const key = keyArr.join('');\n\n infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]);\n\n for (let i = start; i < keyArr.length; i++) {\n fetchInfoData(\n keyArr.map((v, index) => (index === i ? '-' : v)),\n score,\n i + 1\n );\n }\n };\n\n const getPassCount = (key, passScore) => {\n const scores = infoData[key];\n\n if (!scores) return 0;\n\n let [left, right] = [0, scores.length];\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n scores[mid] >= passScore ? (right = mid) : (left = mid + 1);\n }\n\n return scores.length - left;\n };\n\n infos\n .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]])\n .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0));\n\n Object.keys(infoData).forEach(key => {\n infoData[key].sort((a, b) => a - b);\n });\n\n return queries\n .map(query => query.replace(/ and /g, '').split(' '))\n .map(([key, passScore]) => getPassCount(key, +passScore));\n}\n// 주의 할 점\n// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림\n// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림.\n// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음.\n", - "probId": "72412" + "code": "function solution(n) {\n var ans = 0;\n while (n > 0) {\n if (n % 2 !== 0) {\n n = (n - 1) / 2\n ans++\n } else {\n n = n / 2\n }\n }\n return ans;\n}", + "probId": "12980" }, { - "id": "zTl0_lZtDm1DGz4OiKTUq", - "author": "codeisneverod", - "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (let i = 0; i < absolutes.length; i++) {\n answer += signs[i] ? absolutes[i] : -1 * absolutes[i];\n }\n return answer;\n}\n\n", - "probId": "76501" + "id": "gmqlVlP3Y8jTkL8DkaU7B", + "author": "yongchanson", + "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 2;\n n = Math.floor(n / 2);\n }\n return result;\n}", + "probId": "12980" }, { - "id": "-ZARJkkhMxV5YYRxBkQug", - "author": "jaewon1676", - "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (var i = 0; i < absolutes.length; i++) {\n if (signs[i] === false) {\n answer = answer - absolutes[i];\n } else {\n answer = answer + absolutes[i];\n }\n }\n\n return answer;\n}\n\n", - "probId": "76501" + "id": "QoGVCaku34rJVqQRX2TJp", + "author": "codeisneverodd", + "code": "function solution(name) {\n var answer = 0;\n const length = name.length;\n let upDownCount = 0\n let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때\n for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i])\n for (let startOfA = 0; startOfA < name.length; startOfA++) {\n let endOfA = startOfA + 1;\n while (endOfA < length && name[endOfA] === 'A') endOfA++;\n const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA]\n leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1\n leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A..\n }\n answer = upDownCount + Math.min(...leftRightCountList)\n return answer;\n}\n\nfunction minUpOrDownCount(destination) {\n const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const index = Alphabet.indexOf(destination)\n return Math.min(index, Alphabet.length - index)\n}", + "probId": "42860" }, { - "id": "HRq3lHFkcqARmtLHNSx1T", - "author": "prove-ability", - "code": "function solution(absolutes, signs) {\n var answer = 0;\n\n for (let i = 0, len = absolutes.length; i < len; i++) {\n if (!signs[i]) answer += absolutes[i] * -1;\n else answer += absolutes[i];\n }\n\n return answer;\n}\n\n", - "probId": "76501" + "id": "t6z3H25tPulkTlyJaRhfF", + "author": "ljw0096", + "code": "function solution(fees, records) {\n const answer = []\n\n const parkingTable = getParkingTable(records)\n const sortedKeys = Object.keys(parkingTable).sort()\n\n for (const targetCar of sortedKeys) {\n if (parkingTable[targetCar].length % 2 === 1) {\n parkingTable[targetCar].push(['23:59', 'OUT'])\n }\n const totalTime = getTotalTime(parkingTable, targetCar)\n const fee = calculateFee(totalTime, fees)\n answer.push(fee)\n }\n\n return answer\n}\n\nfunction getParkingTable(records) {\n const parkingTable = {}\n\n records.forEach((val) => {\n const info = val.split(' ')\n if (Object.keys(parkingTable).includes(info[1])) {\n parkingTable[info[1]].push([info[0], info[2]])\n } else {\n parkingTable[info[1]] = [[info[0], info[2]]]\n }\n })\n\n return parkingTable\n}\n\nfunction getTotalTime(parkingTable, targetCar) {\n let totalTime = 0\n for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) {\n totalTime += calculateTotalTime(\n parkingTable[targetCar][i][0],\n parkingTable[targetCar][i + 1][0]\n )\n }\n return totalTime\n}\n\nfunction calculateTotalTime(time1, time2) {\n const [hour1, minute1] = time1.split(':').map((val) => parseInt(val))\n const [hour2, minute2] = time2.split(':').map((val) => parseInt(val))\n\n return hour2 * 60 + minute2 - (hour1 * 60 + minute1)\n}\n\nfunction calculateFee(totalTime, feeInfo) {\n let fee = 0\n if (feeInfo[0] >= totalTime) {\n fee = feeInfo[1]\n } else {\n fee =\n feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3]\n }\n return fee\n}", + "probId": "92341" }, { - "id": "JyxLszMY_7MnNq8oUVs3n", - "author": "prove-ability", - "code": "function solution(absolutes, signs) {\n let answer = 0;\n absolutes.forEach((absolute, i) => {\n if(!signs[i]) absolute *= -1;\n answer += absolute;\n })\n return answer;\n}\n\n", - "probId": "76501" + "id": "kNhne_-9qa6A70jJI3s7A", + "author": "codeisneverodd", + "code": "function solution(n, k) {\n const getFactorial = n => {\n const result = [1, 1, 2, ...Array(n - 2)];\n result.forEach((_, i) => {\n if (i > 2) result[i] = result[i - 1] * i;\n });\n return result;\n };\n\n const getDivision = (dividend, divisor) => {\n const quotient = Math.floor(dividend / divisor);\n const remainder = dividend % divisor;\n return [quotient, remainder];\n };\n\n const stepCount = getFactorial(n).reverse();\n\n const generateSteps = (k, step) => {\n const [q, r] = getDivision(k, stepCount[step]);\n if (r === 0) return [q];\n return [q, ...generateSteps(r, step + 1)];\n };\n\n const answer = [];\n\n const steps = generateSteps(k - 1, 0);\n\n const notUsedNums = Array.from({ length: n }, (_, i) => i + 1);\n\n steps.slice(1).forEach(q => {\n answer.push(notUsedNums[q]);\n notUsedNums.splice(q, 1);\n });\n\n return [...answer, ...notUsedNums];\n}", + "probId": "12936" }, { - "id": "xsaspCq7vezykqs681cDv", - "author": "chaerin-dev", - "code": "function solution(absolutes, signs) {\n // 연산 결과를 저장할 변수\n let result = 0;\n // signs의 각 요소에 대해\n signs.forEach((e, i) => {\n // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌\n if (e) result += absolutes[i];\n // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌\n else result -= absolutes[i];\n });\n // result 반환\n return result;\n}", - "probId": "76501" + "id": "HK9ptDmy8O0AWl-b4C8xX", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = -1;\n let notPairStack = []\n notPairStack.push(s[0])\n for (let i = 1; i < s.length; i++) {\n if (notPairStack[notPairStack.length - 1] === s[i]) {\n notPairStack.pop()\n } else {\n notPairStack.push(s[i])\n }\n }\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}", + "probId": "12973" }, { - "id": "Wv4h1yyJSqs5sNDIyGcxb", - "author": "codeisneverodd", - "code": "function solution(s) {\n let answer = 0;\n let sArr = s.split('')\n if (isRight(sArr.join(''))) answer += 1\n for (let i = 0; i < sArr.length - 1; i++) {\n sArr.push(sArr.shift())\n if (isRight(sArr.join(''))) answer += 1\n }\n return answer;\n}\n\nfunction isRight(str) {\n const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')']\n let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}]\n for (let sIndex = 0; sIndex < str.length; sIndex++) {\n for (let bIndex = 0; bIndex < 3; bIndex++) {\n if (str[sIndex] === bracketOpen[bIndex]) {\n status[bIndex].open = true\n status[bIndex].openOrder.push(sIndex)\n }\n if (str[sIndex] === bracketClose[bIndex]) {\n if (status[bIndex].openOrder.length > 0) {\n if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0)\n return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘\n status[bIndex].openOrder.pop()\n status[bIndex].open = false\n } else {\n return false //열리기 전에 닫힘\n }\n }\n }\n }\n for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음\n return true\n}", - "probId": "76502" + "id": "A1eHRdaz8Haz6HcQ661RQ", + "author": "jaewon1676", + "code": "function solution(s){\n let cnt = 0; // 빼준 부분을 카운트 해줍니다\n let answer;\n let stack = []\n for (let i of s){\n if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다\n stack.pop();\n cnt++;; \n } else {\n stack.push(i)\n }\n }\n \n (s.length / 2 == cnt ? answer = 1 : answer = 0 ) \n // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다\n return answer;\n }\n // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다", + "probId": "12973" }, { - "id": "2STAKb6FcpCvJ-3owIOdb", + "id": "CQt47w1Rkj3wzrx_KPRQH", "author": "codeisneverodd", - "code": "function solution(lottos, win_nums) {\n // 0이 없는 경우 > 최저 순위 == 최고 순위\n // 0이 있는 경우 > 모두 0인경우 > 1위\n // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위\n // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함.\n // 순위는 7 - hit\n // 최종적으로 7위인 경우 6위로 변경\n var answer = [];\n if (lottos.indexOf(0) === -1) {\n answer[0] = answer[1] = 7 - hit(lottos, win_nums);\n } else {\n const zeroCount = lottos.length - [...new Set(lottos)].length + 1;\n answer[1] = 7 - hit(lottos, win_nums);\n zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount);\n }\n for (let i = 0; i < 2; i++) {\n answer[i] >= 7 ? (answer[i] = 6) : null;\n }\n return answer;\n}\n\nfunction hit(lottos, win_nums) {\n let result = 0;\n lottos.forEach((element) => {\n win_nums.indexOf(element) === -1 ? null : (result += 1);\n });\n return result;\n}\n\n", - "probId": "77484" + "code": "function solution(s) {\n var answer = '';\n const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b)\n answer = arr[0] + ' ' + arr[arr.length - 1]\n return answer;\n}", + "probId": "12939" }, { - "id": "E7IbT0lAHaXr8A226fEgC", + "id": "gJbHOI90B9U2PgJhfx5lx", "author": "jaewon1676", - "code": "function solution(lottos, win_nums) {\n var answer = [];\n const correct = lottos.filter((lotto) => win_nums.includes(lotto)).length;\n // lottos배열을 순회하며 당첨배열에 있는 수를 return 하고 총 개수를 correct에 저장\n\n const zeros = lottos.filter((lotto) => lotto === 0).length;\n // lottos배열을 순회하며 0인 총 개수를 zeros에 저장\n\n let min = 7 - correct >= 6 ? 6 : 7 - correct;\n\n let max = min - zeros < 1 ? 1 : min - zeros;\n\n answer = [max, min];\n\n return answer;\n}\n\n", - "probId": "77484" + "code": "function solution(s) {\n s = s.split(' ')\n s.sort((a, b) => {return a - b}) // 오름차순 정렬\n let small = s[0] // s의 최솟값\n let large = s[s.length - 1] // s의 최댓값\n return (small + ' ' + large)\n}", + "probId": "12939" }, { - "id": "aG-lSdljg0Xq8v3KlqhMu", - "author": "jaewon1676", - "code": "function solution(lottos, win_nums) {\n var answer = [];\n let max = 7;\n let min = 7;\n console.log(lottos);\n console.log(win_nums);\n for (let i = 0; i < 6; i++) {\n if (lottos.includes(win_nums[i])) {\n max--;\n }\n }\n min = max;\n for (let i = 0; i < 6; i++) {\n if (lottos[i] == 0) min--;\n }\n if (max == 7) max = 6;\n if (min == 7) min = 6;\n answer = [min, max];\n return answer;\n}\n\n", - "probId": "77484" + "id": "yBhUFqKetjxAdygubedf4", + "author": "prove-ability", + "code": "function solution(s) {\n s = s.split(\" \").map((v) => parseInt(v, 10))\n return `${Math.min(...s)} ${Math.max(...s)}`;\n}", + "probId": "12939" }, { - "id": "eAEQUKTRC168pKeDtNrHc", + "id": "RCe6dqEFVBlbw2Z1vzhwn", "author": "yongchanson", - "code": "function solution(lottos, win_nums) {\n //최고당첨개수 : maxPoint + basicPoint\n //최저당첨개수 : basicPoint\n\n let basicPoint = 0;\n let maxPoint = 0;\n let answer = [];\n\n lottos.forEach(function (lottos_item) {\n win_nums.forEach(function (win_nums_item) {\n if (lottos_item == win_nums_item) {\n basicPoint++;\n }\n });\n });\n\n lottos.forEach(function (item) {\n if (item == 0) {\n maxPoint++;\n }\n });\n\n maxPoint + basicPoint >= 2\n ? answer.push(7 - maxPoint - basicPoint)\n : answer.push(6);\n basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6);\n\n return answer;\n}\n\n", - "probId": "77484" + "code": "function solution(s) {\n let arr = s.split(\" \").sort((a, b) => a - b);\n arr.splice(1, arr.length - 2, \" \");\n let result = arr.join(\"\");\n return result;\n}", + "probId": "12939" }, { - "id": "UG3oEzFTwogT8oQw3AHJZ", - "author": "prove-ability", - "code": "function solution(lottos, win_nums) {\n // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화\n let winCount = 0;\n let zeroCount = 0;\n // 내 로또 번호 하니씩 접근\n lottos.forEach((num) => {\n // 번호가 0이 아니고 당첨 번호라면\n if (num !== 0 && win_nums.includes(num)) {\n winCount++;\n // 번호가 0이라면\n } else if (num === 0) {\n zeroCount++;\n }\n });\n // 일치한 수와 등수는 반비례하기 때문에 빼기 7\n // 이때 등수를 벗어나면 낙첨(6) 으로 고정\n let max = 7 - (winCount + zeroCount);\n if (max > 5) max = 6;\n let min = 7 - winCount;\n if (min > 5) min = 6;\n\n return [max, min];\n}\n\n", - "probId": "77484" + "id": "ZagjFEXwfraHemfRfFgUS", + "author": "codeisneverodd", + "code": "function solution(A, B) {\n var answer = 0;\n A = A.sort((a, b) => a - b)\n B = B.sort((a, b) => b - a)\n for (let i = 0; i < A.length; i++) answer += A[i] * B[i]\n return answer;\n}", + "probId": "12941" }, { - "id": "Slcl9uWinEGxZ6hpkLgCa", - "author": "chaerin-dev", - "code": "function solution(lottos, win_nums) {\n let zeroCount = 0;\n let winCount = 0;\n lottos.forEach((item) => {\n if (item === 0) zeroCount++;\n else if (win_nums.includes(item)) winCount++;\n });\n let maxRank = Math.min(7 - (winCount + zeroCount), 6);\n let minRank = Math.min(7 - winCount, 6);\n return [maxRank, minRank];\n}\n", - "probId": "77484" + "id": "4bClFnncYWhFex1Lfup3h", + "author": "prove-ability", + "code": "function solution(A,B){\n let sum = 0;\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n \n for(let i = 0, len = A.length; i < len; i++) {\n sum += A[i] * B[i];\n }\n\n return sum;\n}", + "probId": "12941" }, { - "id": "7aFUYRRdi2OuNo96qPL6s", - "author": "codeisneverodd", - "code": "function solution(rows, columns, queries) {\n var answer = [];\n let matrix = new Array(rows)\n for (let i = 0; i < rows; i++) matrix[i] = new Array(columns)\n for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1\n for (const query of queries) {\n let order = []\n const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1]\n //fill order (row1->row2, col1->col2, row2->row2, col2->col1)\n for (let i = row1; i <= row2; i++) order.push(matrix[i][col1])\n for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i])\n for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2])\n for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i])\n //rotate clockwise\n order.push(order.shift())\n answer.push(Math.min(...order))\n //change value in matrix\n for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift()\n for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift()\n for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift()\n for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift()\n }\n return answer;\n}", - "probId": "77485" + "id": "jwKRjvyzgD21fL-3MPvht", + "author": "yongchanson", + "code": "function solution(A, B) {\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n return A.reduce((t, n, i) => t + n * B[i], 0);\n}", + "probId": "12941" }, { - "id": "JZ-suekDYh7C1uJAOq3w1", + "id": "ZRCoORaCjptFmvuCGAdyP", "author": "codeisneverodd", - "code": "function solution(left, right) {\n var answer = 0;\n for (let num = left; num <= right; num++) {\n divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num);\n }\n return answer;\n}\n\nconst divisorCounter = (num) => {\n let count = 0;\n const sqrt = Math.sqrt(num);\n for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1;\n return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2;\n};\n\n", - "probId": "77884" + "code": "function solution(brown, yellow) {\n var answer = [];\n const size = brown + yellow\n answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0]\n return answer;\n}\n\nfunction widthHeightPair(size) {\n let result = []\n for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i])\n return result\n}", + "probId": "42842" }, { - "id": "1-uxRUbsHftjA8reC-nyv", + "id": "F8IWVoPp35R-_7wvY6KPI", "author": "jaewon1676", - "code": "function solution(left, right) {\n var answer = 0;\n\n for (left; left <= right; left++) {\n // left의 제곱근이 정수면 약수의 개수는 홀수\n if (Number.isInteger(Math.sqrt(left))) {\n answer -= left;\n } else {\n answer += left;\n }\n }\n return answer;\n}\n\n", - "probId": "77884" - }, - { - "id": "4lkGiXI-BbDVR2T8YSL9c", - "author": "prove-bility", - "code": "function getDivisorCount(i) {\n let count = 0;\n for(let j = 1; j <= i; j++) {\n if(i % j === 0) count++;\n }\n return count;\n}\n\nfunction solution(left, right) {\n let answer = 0;\n for(let i = left; i <= right; i++) {\n let count = getDivisorCount(i);\n if(count % 2 === 0) answer += i;\n else answer -= i;\n }\n return answer;\n}\n", - "probId": "77884" + "code": "function solution(brown, yellow) {\n var answer = [];\n let sum = brown + yellow; \n \n //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색)\n for(let height=3; height {\n if (num % 2 == 0) answer.push(num + 1);\n else {\n let binary = [\"0\", ...num.toString(2)];\n let last = binary.lastIndexOf(\"0\");\n binary[last] = \"1\";\n binary[last + 1] = \"0\";\n answer.push(parseInt(binary.join(\"\"), 2));\n }\n });\n return answer;\n}\n", - "probId": "77885" + "id": "DIn0PbemXlrxb2A78xlPL", + "author": "codeisneverodd", + "code": "function solution(arr) {\n const quad = matrix => {\n const length = matrix.length;\n const half = length / 2;\n const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0]));\n\n if (pass(matrix)) return [matrix[0][0]];\n if (length <= 2) return matrix;\n\n const startPoints = [\n [0, 0],\n [0, half],\n [half, 0],\n [half, half],\n ];\n\n return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half))));\n };\n return quad(arr)\n .flat(Infinity)\n .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]);\n}", + "probId": "68936" }, { - "id": "VmyVBcoqswOzMGDgI-q-7", + "id": "szaRprAfZy_qUOWpA27cx", "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = 0;\n let answerString = s;\n const stringToNum = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n for (let i = 0; i < 10; i++) {\n const regex = new RegExp(stringToNum[i], \"g\");\n answerString = answerString.replace(regex, i);\n }\n answer = Number(answerString);\n return answer;\n}\n\n", - "probId": "81301" + "code": "function solution(number, k) {\n var answer = '';\n let answerStack = [0]\n let deleteCount = -1\n for (let i = 0; i < number.length; i++) {\n while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) {\n answerStack.pop()\n deleteCount++\n }\n if (answerStack.length < number.length - k) answerStack.push(number[i])\n }\n answer = answerStack.join('')\n return answer;\n}", + "probId": "42883" }, { - "id": "NJa8AsdmnIhvsVqNc-s5b", + "id": "EyQH8kejDSI0N4q9lG02r", "author": "jaewon1676", - "code": "function solution(s) {\n let answer = 0;\n\n s = s.replace(/zero/g, 0);\n s = s.replace(/one/g, 1);\n s = s.replace(/two/g, 2);\n s = s.replace(/three/g, 3);\n s = s.replace(/four/g, 4);\n s = s.replace(/five/g, 5);\n s = s.replace(/six/g, 6);\n s = s.replace(/seven/g, 7);\n s = s.replace(/eight/g, 8);\n s = s.replace(/nine/g, 9);\n\n answer = Number(s);\n return answer;\n}\n\n", - "probId": "81301" + "code": "function solution(number, k) {\n const stack = [];\n let answer = '';\n \n for(let i=0; i 0 && stack[stack.length-1] < el){\n stack.pop();\n k--;\n }\n stack.push(el);\n }\n stack.splice(stack.length-k, k);\n answer = stack.join(\"\");\n return answer;\n}", + "probId": "42883" }, { - "id": "RVyqCkKssdT4Zh-C7Vf86", - "author": "chaerin-dev", - "code": "function solution(s) {\n s = s\n .replace(/zero/g, 0)\n .replace(/one/g, 1)\n .replace(/two/g, 2)\n .replace(/three/g, 3)\n .replace(/four/g, 4)\n .replace(/five/g, 5)\n .replace(/six/g, 6)\n .replace(/seven/g, 7)\n .replace(/eight/g, 8)\n .replace(/nine/g, 9);\n return parseInt(s);\n}\n\n", - "probId": "81301" + "id": "yE5QUyga-dDB9MnM34OhF", + "author": "ssi02014", + "code": "function solution(numbers, target) {\n let answer = 0;\n\n dfs(0, 0);\n return answer;\n\n function dfs(index, sum) {\n // 재귀 종료\n if (index === numbers.length) {\n if (sum === target) {\n answer++;\n }\n return;\n }\n\n dfs(index + 1, sum + numbers[index]);\n dfs(index + 1, sum - numbers[index]);\n }\n}", + "probId": "43165" }, { - "id": "bVdLBqknAui_cX1jO9r2A", - "author": "yongchanson", - "code": "function solution(s) {\n let en = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n\n for (let i = 0; i < s.length * 2; i++) {\n let p = i % en.length;\n s = s.replace(en[p], p);\n }\n return Number(s);\n}\n", - "probId": "81301" + "id": "NMURcMhFuwRUsJWmaW1To", + "author": "codeisneverodd", + "code": "function solution(numbers, target) {\n var answer = 0;\n const binaryLength = numbers.length;\n const binary = 2 ** binaryLength;\n for (let i = 0; i < binary; i++) {\n const numSlice = numbers.slice();\n const binaryString = i.toString(2).padStart(binaryLength, '0');\n for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null;\n const calculated = numSlice.reduce((prev, current) => prev + current);\n if (calculated === target) answer += 1;\n }\n return answer;\n}", + "probId": "43165" }, { - "id": "5lahRK7RIzbT5874DsA0n", + "id": "KG0o_ArOVK7FGDSi2Uxj_", "author": "codeisneverodd", - "code": "function solution(places) {\n var answer = [];\n answer = places.map(place => {\n return place.some((row, rowIndex) =>\n row.split('').some((mark, colIndex, rowArr) => {\n if (mark === 'X') return false\n const countPeopleAround = [\n rowArr[colIndex - 1] || '',\n rowArr[colIndex + 1] || '',\n (place[rowIndex - 1] || '')[colIndex],\n (place[rowIndex + 1] || '')[colIndex],\n ].filter(mark => mark === 'P').length\n return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1)\n })\n ) ? 0 : 1\n })\n return answer;\n}", - "probId": "81302" + "code": "function solution(s) {\n var answer = [];\n let sets = s\n .slice(2, -2)\n .split('},{')\n .map(set => set.split(',').map(x => parseInt(x)))\n .sort((a, b) => a.length - b.length)\n for (const set of sets) answer.push(...set.filter(x => !answer.includes(x)))\n return answer;\n}", + "probId": "64065" }, { - "id": "Ou7GGs1ci1wbjoHZE9ZuX", - "author": "yongchanson", - "code": "function solution(price, money, count) {\n var answer = 0;\n let sum = price;\n\n for (i = 2; i <= count; i++) {\n sum += price * i;\n }\n\n if (sum <= money) {\n answer = 0;\n } else {\n answer = sum - money;\n }\n return answer;\n}\n\n", - "probId": "82612" + "id": "ljkFBseZ_xqY2qwOlnE0q", + "author": "chaerin-dev", + "code": "function solution(s) {\n // 문자열 -> 정수 이차원 배열\n const sArr = s\n .substring(2, s.length - 2)\n .split(\"},{\")\n .map((e) => e.split(\",\").map((e) => parseInt(e)))\n .sort((a, b) => a.length - b.length);\n // 정답을 저장할 배열\n const answer = [];\n // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가\n for (let i = 0; i < sArr.length; i++) {\n for (let j = 0; j < sArr[i].length; j++) {\n const temp = sArr[i][j];\n if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]);\n }\n }\n return answer;\n}", + "probId": "64065" }, { - "id": "dyvvJvC_T-CJF2x71HTCQ", + "id": "qEH0Pyao5w3x9ZFjUKlNB", "author": "jaewon1676", - "code": "function solution(price, money, count) {\n let sum_price = 0; // 놀이기구의 이용료의 합\n for (let i = 1; i <= count; i++) {\n sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다.\n }\n if (sum_price <= money) {\n return 0;\n }\n return sum_price - money;\n}\n\n", - "probId": "82612" + "code": "function solution(priorities, location) {\n var answer = 0;\n while (true) {\n\n if (priorities[0] < Math.max(...priorities)) {\n if (location - 1 < 0) location = priorities.length\n priorities.push(priorities.shift())\n location--;\n } else {\n answer++;\n if (location - 1 < 0) {\n return answer;\n }\n priorities.shift()\n location--;\n }\n console.log(priorities, location, answer)\n\n }\n return answer\n}", + "probId": "42587" }, { - "id": "DR0j4ZTJS7p36FPW1KGud", - "author": "prove-ability", - "code": "function solution(price, money, count) {\n let sum = 0;\n for(let i = 1; i <= count; i++) {\n sum += (i * price)\n }\n \n return sum < money ? 0 : sum - money;\n}\n\n", - "probId": "82612" + "id": "Rk4Let4yq3vO47W6aO2vR", + "author": "createhb21", + "code": "function solution(priorities, location) {\n var answer = priorities.map((priority, index) => {\n return {\n index,\n priority\n };\n });\n \n let queue = [];\n \n while(answer.length > 0){\n const first = answer.shift();\n const isPriority = answer.some((p) => p.priority > first.priority);\n isPriority ? answer.push(first) : queue.push(first);\n }\n const idx = queue.findIndex(p => p.index === location) + 1;\n return idx;\n }", + "probId": "42587" }, { - "id": "DL1TsuM--PRWhwT-6NTTR", - "author": "chaerin-dev", - "code": "function solution(price, money, count) {\n let totalPrice = 0;\n for(let i=1; i<=count; i++){\n totalPrice += i * price;\n }\n return money > totalPrice ? 0 : totalPrice-money;\n}\n\n", - "probId": "82612" + "id": "Z7hpmyMSWenF2xM3-NSVa", + "author": "codeisneverodd", + "code": "//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다.\nfunction solution(priorities, location) {\n let answer = 0;\n const printer = new Queue;\n priorities.forEach((priority, index) => {\n printer.enqueue([priority, index])\n })\n while (printer.size() > 0) {\n const check = printer.dequeue()\n const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length\n if (countHigherPriority > 0) {\n printer.enqueue(check)\n } else {\n answer += 1\n if (check[1] === location) break\n }\n\n }\n return answer;\n}\n\nclass Queue {\n constructor() {\n this.queue = []\n this.front = 0\n this.rear = 0\n }\n\n enqueue(value) {\n this.queue[this.rear++] = value\n }\n\n dequeue() {\n const value = this.queue[this.front]\n delete this.queue[this.front]\n this.front += 1\n return value\n }\n\n peek() {\n return this.queue(this.front)\n }\n\n size() {\n return this.rear - this.front\n }\n}", + "probId": "42587" }, { - "id": "0xHW5niSbtQFA-NHOYZdA", - "author": "codeisneverodd", - "code": "function solution(word) {\n const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 };\n const price = calculatePrice([1], 5);\n return word\n .split(\"\")\n .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet])\n .reduce((acc, curr) => acc + curr, 0);\n}\nconst calculatePrice = (result = [1], targetLength) => {\n if (result.length === targetLength) return result;\n return calculatePrice([result[0] * 5 + 1, ...result], targetLength);\n};\n/*\n각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까?\n4번째 자리 - 1\n3번째 자리 - 1*5 + 1 = 6\n2번째 자리 - 6*5 + 1 = 31\n1번째 자리 - 31*5 + 1 = 156\n0번째 자리 - 156*5 + 1 = 781\n\n검증(1부터 시작하므로 1 + 비용)\nI => (1 + 781 * 2) = 1563\nEIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189\nAAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10\nAAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6\n추천 레퍼런스: https://seongho96.tistory.com/50\n*/\n", - "probId": "84512" + "id": "VTaNyHO40w4_74rGMSLnW", + "author": "pereng11", + "code": "//완전 탐색, greedy O(N^2)\nfunction solution(currentFatigue, dungeons) {\n return getMaxCount(currentFatigue, 0, dungeons);\n}\n\nfunction getMaxCount(currentFatigue, visitedCount, dungeons) {\n const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue);\n if (possibleDungeons.length === 0) return visitedCount;\n\n const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => {\n const [_, usedFatigue] = curr;\n const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex);\n const currentCount = getMaxCount(\n currentFatigue - usedFatigue,\n visitedCount + 1,\n nextDungeons\n );\n return Math.max(currentCount, prevCount);\n }, 0);\n\n return maxCount;\n}", + "probId": "87946" }, { - "id": "nsPhxviNXx_kT5M74ya-s", + "id": "EMiltQkFNcp5H6BUbdl7p", "author": "codeisneverodd", - "code": "function solution(numbers) {\n var answer = 0;\n for (let i = 0; i < 10; i++) {\n answer += numbers.includes(i) ? 0 : i;\n }\n return answer;\n}\n\n", - "probId": "86051" + "code": "function solution(n) {\n var answer = 0;\n answer = fibonacci1234567(n)\n return answer;\n}\n\nfunction fibonacci1234567(n) { //재귀적으로 하면 시간초과\n let fiboArr = new Array(n + 1).fill(0)\n fiboArr[0] = 0\n fiboArr[1] = 1\n for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과\n return fiboArr[n]\n}", + "probId": "12945" }, { - "id": "J6eLzTS6eX7DjJ2XQ6ala", - "author": "yongchanson", - "code": "function solution(numbers) {\n var answer = -1;\n\n let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let arr_sum = 0;\n let numbers_sum = 0;\n\n for (i = 0; i < arr.length / 2; i++) {\n if (arr[i] == arr[arr.length - 1 - i]) {\n arr_sum += arr[i];\n } else {\n arr_sum += arr[i] + arr[arr.length - 1 - i];\n }\n }\n\n for (i = 0; i < numbers.length; i++) {\n numbers_sum += numbers[i];\n }\n\n answer = arr_sum - numbers_sum;\n return answer;\n}\n\n", - "probId": "86051" + "id": "4DrrCFprxb0yTmo9JtSSy", + "author": "jaewon1676", + "code": "function solution(n) {\n let f_1 = 0;\n let f_2 = 1;\n \n for (let i=2; i<=n; i++) {\n let temp = (f_1 + f_2) % 1234567;\n f_1 = f_2;\n f_2 = temp;\n }\n \n return f_2;\n}", + "probId": "12945" }, { - "id": "OHpRs55xZu_xUWxVD0a6u", - "author": "prove-ability", - "code": "function solution(numbers) {\n var answer = 0;\n\n for (let i = 0; i < 10; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n\n return answer;\n}\n\n", - "probId": "86051" + "id": "Y7oLGRpRRd1_S1LWhiXZ8", + "author": "codeisneverodd", + "code": "function solution(n) {\n return move(1, 3, 2, n);\n}\nconst move = (departure, destination, waypoint, numberOfPlate) => {\n if (numberOfPlate === 1) return [[departure, destination]];\n return [\n ...move(departure, waypoint, destination, numberOfPlate - 1),\n ...move(departure, destination, waypoint, 1),\n ...move(waypoint, destination, departure, numberOfPlate - 1),\n ];\n};\n//재귀를 생각해보기에 좋은 문제입니다.\n//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi\n/*\nn개가 있다면\n1. 1->2로 n-1개를 옮김\n2. 1->3으로 가장 큰 1개를 옮김\n3. 2->1로 n-2개를 옮김\n4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김\n의 반복\n\n결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨.\na->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 \n함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음.\n*/", + "probId": "12946" }, { - "id": "19dcxkCwv3HaFz0JR01Mw", - "author": "chaerin-dev", - "code": "function solution(numbers) {\n let answer = 0;\n for (let i = 0; i <= 9; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n return answer;\n}", - "probId": "86051" + "id": "ekrHtfPyU_KAhsRjznZC_", + "author": "codeisneverodd", + "code": "function solution(rows, columns, queries) {\n var answer = [];\n let matrix = new Array(rows)\n for (let i = 0; i < rows; i++) matrix[i] = new Array(columns)\n for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1\n for (const query of queries) {\n let order = []\n const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1]\n //fill order (row1->row2, col1->col2, row2->row2, col2->col1)\n for (let i = row1; i <= row2; i++) order.push(matrix[i][col1])\n for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i])\n for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2])\n for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i])\n //rotate clockwise\n order.push(order.shift())\n answer.push(Math.min(...order))\n //change value in matrix\n for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift()\n for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift()\n for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift()\n for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift()\n }\n return answer;\n}", + "probId": "77485" }, { - "id": "M7VGn_6Jo7hwRRjehWeqX", - "author": "minjongbaek", - "code": "\n// 빛의 이동을 위한 DX, DY 변수를 선언합니다.\nconst DX = [-1, 1, 0, 0];\nconst DY = [0, 0, -1, 1];\n\nfunction solution(grid) {\n\n // DFS에 4방향을 고려하여 문제를 풉니다.\n // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다.\n\n const answer = [];\n\n // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]]\n const visited = Array.from({ length: grid.length }, () => []).map((v) => {\n for (let i = 0; i < grid[0].length; i += 1) {\n v.push(new Array(4).fill(false));\n }\n return v\n });\n\n for (let x = 0; x < grid.length; x += 1) {\n for (let y = 0; y < grid[0].length; y += 1) {\n for (let d = 0; d < 4; d += 1) {\n // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다.\n if (!visited[x][y][d]) {\n const stack = [];\n stack.push([x, y, d]);\n\n let cnt = 0;\n while (stack.length !== 0) {\n const [currentX, currentY, currentD] = stack.pop();\n if (!visited[currentX][currentY][currentD]) {\n visited[currentX][currentY][currentD] = true;\n cnt += 1;\n\n const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다.\n const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다.\n \n stack.push([nextX, nextY, nextD])\n }\n\n }\n answer.push(cnt);\n }\n }\n }\n }\n return answer.sort((a, b) => a - b);\n}\n\n// 다음 행선지를 구하는 함수\nfunction getNextXY(x, y, d, xLength, yLength) {\n x += DX[d];\n y += DY[d];\n\n // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다.\n if (x < 0) x = xLength - 1;\n if (x >= xLength) x = 0;\n if (y < 0) y = yLength - 1;\n if (y >= yLength) y = 0;\n\n return [x, y];\n}\n\n// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수\nfunction getNextD(command, d) {\n if (command === 'L') {\n d = [2, 3, 1, 0][d]\n } else if (command === 'R') {\n d = [3, 2, 0, 1][d]\n }\n return d\n}\n", - "probId": "86052" + "id": "B3sjdQsVrwveW4L7oRxEt", + "author": "codeisneverodd", + "code": "function solution(arr1, arr2) {\n const [row, col] = [arr1.length, arr2[0].length]\n let answer = new Array(row);\n for (let i = 0; i < row; i++) answer[i] = new Array(col)\n //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값\n for (let i = 0; i < row; i++) {\n for (let j = 0; j < col; j++) {\n answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0)\n }\n }\n return answer;\n}", + "probId": "12949" }, { - "id": "OCnmAxjoeOKOd5M83auiw", + "id": "iKL3fAei0gfK59hQFY4XZ", "author": "prove-ability", - "code": "function solution(sizes) {\n // 가로, 세로 중 큰 값을 가로 길이로 변경(스압)\n sizes.forEach(([width, height], index) => {\n if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]];\n });\n\n // 가로, 세로 각각 큰 값 추출\n const widthMax = Math.max(...sizes.map(v => v[0]));\n const widthHeight = Math.max(...sizes.map(v => v[1]));\n\n return widthMax * widthHeight;\n}\n//정답 1(🎩 refactor 220425) - codeisneverodd\nfunction solution(sizes) {\n for (let card of sizes) {\n if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]];\n }\n\n const maxWidth = Math.max(...sizes.map(card => card[0]));\n const maxHeight = Math.max(...sizes.map(card => card[1]));\n return maxWidth * maxHeight;\n}\n", - "probId": "86491" + "code": "function solution(arr1, arr2) {\n var answer = [];\n // 행만큼 반복\n for(let i = 0, len = arr1.length; i < len; i++) {\n const arr = []\n // 열만큼 반복\n for(let j = 0, len = arr1[i].length; j < len; j++) {\n // 각의 배열에서 행을 더해서 arr push\n arr.push(arr1[i][j] + arr2[i][j])\n }\n // 열 만큼 추가된 arr 를 answer 가 추가\n answer.push(arr)\n }\n \n return answer;\n}", + "probId": "12949" }, { - "id": "n0OtioLl0J3ebor51ilCv", + "id": "ehCNYvlPKOQOovwHefyQa", "author": "codeisneverodd", - "code": "function solution(n, wires) {\n const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b);\n\n const convertWiresToTree = wires => [...new Set(wires.flat())];\n\n const generateTree = (wires, tree) => {\n if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree;\n\n const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire));\n const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))];\n\n return [...new Set(generateTree(nextWires, nextTree))];\n };\n\n let minDiff = Infinity;\n const length = convertWiresToTree(wires).length;\n\n wires.forEach((_, i) => {\n const [initWire, ...remainWires] = wires.filter((_, j) => j !== i);\n const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length;\n const diff = Math.abs(lengthA - (length - lengthA));\n minDiff = Math.min(diff, minDiff);\n });\n\n return minDiff;\n}\n", - "probId": "86971" + "code": "function solution(relation) {\n //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다.\n //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다.\n //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다.\n const keys = []\n const totalAttrCount = relation[0].length\n const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1]\n\n //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수\n const isUnique = (relation, attrIndexComb) => {\n let result = Array.from(Array(relation.length), x => '')\n for (const attrIndex of attrIndexComb) {\n relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음.\n }\n return result.length === [...new Set(result)].length\n }\n\n //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다.\n const isMinimal = (attrComb) => {\n for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false\n return true\n }\n\n //가능한 모든 조합을 검사\n for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) {\n const combinations = getCombinations(indexList, attrCount)\n for (const attrComb of combinations) {\n if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb)\n }\n }\n\n return keys.length\n}\n\n//Fn for 1. 조합을 반환하는 함수\nconst getCombinations = (array, selectNumber) => {\n const result = [];\n if (selectNumber === 1) {\n return array.map((element) => [element]);\n }\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}", + "probId": "42890" }, { - "id": "3AMMuG2wA7mC_uK9vF45o", + "id": "DfVmns6ufjgJmwcNV82zI", "author": "codeisneverodd", - "code": "function solution(line) {\n const getCrossPoint = ([A, B, E], [C, D, F]) => {\n if (A * D - B * C === 0) return [Infinity, Infinity];\n return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)];\n }; //문제 설명 최하단 참조\n\n const crossPoints = line.flatMap((lineA, i) =>\n line\n .slice(i + 1)\n .map(lineB => getCrossPoint(lineA, lineB))\n .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y))\n );\n\n const generateCanvas = crossPoints => {\n const xPoints = [...crossPoints.map(([x, y]) => x)];\n const yPoints = [...crossPoints.map(([x, y]) => y)];\n const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)];\n const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)];\n const xLength = Math.abs(maxX - minX) + 1;\n const yLength = Math.abs(maxY - minY) + 1;\n\n return {\n canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')),\n draw([x, y], value) {\n this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value;\n },\n print() {\n return this.canvas.map(row => row.join(''));\n },\n };\n };\n\n const canvas = generateCanvas(crossPoints);\n\n crossPoints.forEach(point => {\n canvas.draw(point, '*');\n });\n\n return canvas.print();\n}\n", - "probId": "87377" + "code": "function solution(n, edge) {\n const graph = Array.from(Array(n + 1), () => [])\n for (const [src, dest] of edge) {\n graph[src].push(dest)\n graph[dest].push(src)\n }\n const distance = Array(n + 1).fill(0)\n distance[1] = 1\n const toBeSearched = [1]\n while (toBeSearched.length > 0) {\n const src = toBeSearched.shift()\n for (const dest of graph[src]) {\n if (distance[dest] === 0) {\n distance[dest] = distance[src] + 1\n toBeSearched.push(dest)\n }\n }\n }\n return distance.filter(x => x === Math.max(...distance)).length\n}", + "probId": "49189" }, { - "id": "Lr1-3pilHfPrXHpMHFK_U", - "author": "prove-ability", - "code": "function solution(n) {\n var answer = 0;\n let i = 0;\n while(true) {\n if(n % i === 1) {\n answer = i;\n break;\n }\n i++;\n }\n return answer;\n}\n\n", - "probId": "87389" + "id": "4SAsYCuYpAaqiXVcDdgW2", + "author": "codeisneverodd", + "code": "function solution(n, computers) {\n let answer = 0\n const visited = new Array(n).fill(false)\n const newNetwork = (startComputer) => {\n //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다.\n const toBeVisited = [startComputer]\n while (toBeVisited.length > 0) {\n //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다\n const currentComputer = toBeVisited.pop()\n visited[currentComputer] = true\n for (let nextComputer = 0; nextComputer < n; nextComputer++) {\n if (!visited[nextComputer] && computers[currentComputer][nextComputer]) {\n toBeVisited.push(nextComputer)\n }\n }\n }\n }\n\n for (let startComputer = 0; startComputer < n; startComputer++) {\n if (!visited[startComputer]) {\n newNetwork(startComputer)\n //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다.\n answer++\n }\n }\n return answer\n}", + "probId": "43162" }, { - "id": "gSiNerqUYWURZE5ZEI4uf", + "id": "nKPtmI7XNC26XpIlYbbVA", "author": "jaewon1676", - "code": "function solution(n) {\n var answer = 0;\n for (let i=1; i a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬\n // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]\n let out = routes[0][1]; // -15\n // 나간 시점(out)은 첫 차량의 나간시점으로 초기화\n \n for(let i = 1; i < routes.length; i++) {\n // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치\n if(out < routes[i][0]) {\n cctv++;\n out = routes[i][1]; // out 시점 업데이트\n }\n \n // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 \n if(out > routes[i][1]) {\n out = routes[i][1]; // out 시점 업데이트 \n }\n }\n \n return cctv;\n}\n// 그리디\n\n// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.\n// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 \n// 나간시점만 검사 해주면 됩니다.\n\n// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.\n// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)\n// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.", + "probId": "42884" }, { - "id": "iQ1VMiDj386cOCK7sIWUi", - "author": "jaewon1676", - "code": "function solution (n, left, right) {\n const answer = [];\n \n for (let i=left; i <= right; i++) { // left부터 right까지를 구한다.\n let row = parseInt(i/n);\t// 행(row)을 구한다.\n let column = i%n;\t// 열(column)을 구한다.\n answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다.\n }\n return answer\n}", - "probId": "87390" + "id": "FyidIwW1ocs08d8zOmC5U", + "author": "codeisneverodd", + "code": "//Map과 고차함수를 적극적으로 이용한 풀이\nfunction solution(genres, plays) {\n const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]}\n genres\n .map((genre, id) => [genre, plays[id]])\n .forEach(([genre, play], id) => {\n const data = genreMap.get(genre) || {totalPlay: 0, songs: []}\n genreMap.set(genre, {\n totalPlay: data.totalPlay + play,\n songs: [...data.songs, {play: play, id: id}]\n .sort((a, b) => b.play - a.play)\n .slice(0, 2)\n })\n })\n\n return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...]\n .sort((a, b) => b[1].totalPlay - a[1].totalPlay)\n .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs]\n .map(song => song.id)\n}", + "probId": "42579" }, { - "id": "fn27qC3U-Eb36ZrvnmLdc", - "author": "pereng11", - "code": "//완전 탐색, greedy O(N^2)\nfunction solution(currentFatigue, dungeons) {\n return getMaxCount(currentFatigue, 0, dungeons);\n}\n\nfunction getMaxCount(currentFatigue, visitedCount, dungeons) {\n const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue);\n if (possibleDungeons.length === 0) return visitedCount;\n\n const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => {\n const [_, usedFatigue] = curr;\n const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex);\n const currentCount = getMaxCount(\n currentFatigue - usedFatigue,\n visitedCount + 1,\n nextDungeons\n );\n return Math.max(currentCount, prevCount);\n }, 0);\n\n return maxCount;\n}\n\n\n\n", - "probId": "87946" + "id": "0f66lOgRfqED_HCdCqEw_", + "author": "codeisneverodd", + "code": "function solution(tickets) {\n const routes = [] //최종 가능 루트들을 담을 배열\n const makeRoutes = (currentDepart, remainTickets, currentRoute) => {\n //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수\n if (remainTickets.length > 0) {\n remainTickets.forEach(([depart, nextDepart], index) => {\n if (depart === currentDepart)\n //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정\n makeRoutes(\n nextDepart,\n [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)],\n [...currentRoute, currentDepart])\n })\n } else {\n //티켓을 모두 사용하면 최종 가능 루트에 포함\n routes.push([...currentRoute, currentDepart])\n }\n }\n makeRoutes(\"ICN\", tickets, [])\n return routes.sort()[0]\n}", + "probId": "43164" }, { - "id": "VvZy92A9uO87EvDmTYfkt", + "id": "-Jf1bx2PH3d58y5kpI3HP", "author": "jaewon1676", - "code": "function solution(id_list, report, k) {\n let answer = new Array(id_list.length).fill(0);\n let report_list = {}; // 신고당한 ID\n\n // key, value 형식의 report_list 객체를 만든다.\n id_list.map(user => {\n report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체\n });\n // report_list { muzi: [], frodo: [], apeach: [], neo: [] }\n\n // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다.\n report.map(user => {\n const [user_id, report_id] = user.split(' ');\n // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다.\n if (!report_list[report_id].includes(user_id)) {\n report_list[report_id].push(user_id);\n // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다.\n }\n });\n for (const key in report_list) {\n // report_list의 index 순회\n if (report_list[key].length >= k) {\n report_list[key].map(user => {\n answer[id_list.indexOf(user)] += 1;\n });\n }\n }\n return answer;\n}\n\n", - "probId": "92334" - }, - { - "id": "5zrHxl5vLopStaWFq6wYV", - "author": "prove-ability", - "code": "function solution(id_list, report, k) {\n // 사용자 길이의 빈 배열을 만든다 0\n var answer = new Array(id_list.length).fill(0);\n // 신고된 내용 정리할 객체 선언\n const obj = {};\n // 신고된 내용 정리할 객체 사용자 아이디로 초기화\n id_list.forEach(id => {\n obj[id] = new Set();\n });\n // 신고 리스트를 조회하며 신고 내용 객체에 정리\n // set.add 를 활용해 같은 사용자의 중복 신고 제거\n report.forEach(str => {\n const [reporter, target] = str.split(' ');\n obj[target].add(reporter);\n });\n // obj value 하나씩 접근\n for (const value of Object.values(obj)) {\n // 신고당한 횟수가 정지 기준에 적합하다면\n if (value.size >= k) {\n // 해당 유저를 신고한 사람들\n for (let item of value) {\n // 인덱스 구해서 증가\n let index = id_list.indexOf(item);\n answer[index]++;\n }\n }\n }\n\n return answer;\n}\n\n", - "probId": "92334" + "code": "function solution(operations) {\n var answer = [];\n for (let i = 0; i < operations.length; i++) {\n // 숫자 삽입\n if (operations[i][0] == 'I') {\n let m = operations[i].substring(2, operations[i].length);\n answer.push(m);\n }\n // if 최댓값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) {\n answer.pop();\n }\n // if 최솟값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) {\n answer.shift();\n }\n\n answer.sort((a, b) => {\n return a - b;\n });\n }\n if (answer.length == 0) return [0, 0];\n else {\n return [parseInt(answer.pop()), parseInt(answer.shift())];\n }\n}\n/* 풀이 과정\n1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다.\n2. answer 배열을 정렬 해준다\n3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다.\n*/", + "probId": "42628" }, { - "id": "QYE52Bx6qcuF9FEKzkeev", - "author": "prove-ability", - "code": "function solution(id_list, report, k) {\n // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기\n var answer = Array.from({ length: id_list.length }).fill(0);\n // 신고 내용 객체 초기화 - 신고된 내용 정리\n const reportObj = {};\n // 신고건 반복문으로 하나씩 접근\n for (let i = 0, len = report.length; i < len; i++) {\n const [userId, reportUserId] = report[i].split(' ');\n // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가\n if (reportObj[reportUserId]) {\n if (!reportObj[reportUserId].includes(userId)) {\n reportObj[reportUserId] = [...reportObj[reportUserId], userId];\n }\n // 신고 내용 객체에 신고당한 사람이 없다면 추가\n } else reportObj[reportUserId] = [userId];\n }\n // 만들어진 신고 내용 객체로 반복적으로 접근\n for (const item of Object.values(reportObj)\n .filter(v => v.length >= k)\n .flatMap(v => v)) {\n // 인덱스로 접근해 메일 카운트 증가\n const index = id_list.findIndex(v => v === item);\n answer[index]++;\n }\n\n return answer;\n}\n\n", - "probId": "92334" + "id": "gZxB5yD_He6RsHLSk2pdY", + "author": "codeisneverodd", + "code": "function solution(n, times) {\n //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right\n let [left, right] = [1, Math.max(...times) * n];\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0);\n //sum은 mid 시간 동안 처리 할 수 있는 사람의 수\n if (sum < n) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다.\n return left;\n}", + "probId": "43238" }, { - "id": "MpqPHzD7ZEtTTVMmPc85b", - "author": "chaerin-dev", - "code": "function solution(id_list, report, k) {\n // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리\n let set = new Set(report);\n report = Array.from(set);\n\n // 1. report를 2차원배열로 변형\n // 2. 각 유저가 신고당한 횟수 cnt에 저장\n // 3. 각 유저를 신고한 유저 who에 저장\n let cnt = Array.from({ length: id_list.length }, i => 0);\n let who = Array.from({ length: id_list.length }, i => []);\n for (let i = 0; i < report.length; i++) {\n report[i] = report[i].split(' ');\n cnt[id_list.indexOf(report[i][1])]++;\n who[id_list.indexOf(report[i][1])].push(report[i][0]);\n }\n\n // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장\n let mail = Array.from({ length: id_list.length }, i => 0);\n for (let i = 0; i < cnt.length; i++) {\n if (cnt[i] < k) continue;\n for (let j = 0; j < who[i].length; j++) {\n mail[id_list.indexOf(who[i][j])]++;\n }\n }\n return mail;\n}\n//정답 6(🎩 refactor 220425) - codeisneverodd\nfunction solution(id_list, report, k) {\n //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장,\n //각 id를 신고한 사람 array를 reportedBy에 저장,\n //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장\n //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장.\n const reportSet = new Set(report);\n const reportedCount = {}; //{\"id\": Number(count)}\n const reportedBy = {}; //{\"id\":[]}\n const mailCount = {}; //{\"id\":Number(count)}\n\n id_list.forEach(element => {\n reportedCount[element] = 0;\n mailCount[element] = 0;\n reportedBy[element] = [];\n });\n\n reportSet.forEach(element => {\n const [id, reported] = element.split(' ');\n reportedCount[reported] += 1;\n reportedBy[reported].push(id);\n });\n\n for (const reportedId in reportedCount) {\n if (reportedCount[reportedId] >= k) {\n reportedBy[reportedId].forEach(reporter => {\n mailCount[reporter] += 1;\n });\n }\n }\n return id_list.map(id => mailCount[id]);\n}\n", - "probId": "92334" + "id": "qRYf80Us-O-lhErUFQ2mK", + "author": "ryong9rrr", + "code": "class Node {\n constructor(value = '') {\n this.value = value\n this.children = new Map()\n this.count = 0\n }\n}\n\nclass Trie {\n constructor() {\n this.root = new Node()\n }\n\n insert(string) {\n let currentNode = this.root\n for (const char of string) {\n if (!currentNode.children.has(char)) {\n currentNode.children.set(char, new Node(currentNode.value + char))\n }\n currentNode = currentNode.children.get(char)\n currentNode.count++\n }\n }\n\n startsWithCount(prefix) {\n let currentNode = this.root\n for (const char of prefix) {\n if (!currentNode.children.has(char)) {\n return 0\n }\n currentNode = currentNode.children.get(char)\n }\n return currentNode.count\n }\n}\n\nfunction reverseString(string) {\n return [...string].reverse().join('')\n}\n\nfunction solution(words, queries) {\n const table = {}\n const reverseTable = {}\n const counter = {}\n\n words.forEach((word) => {\n const key = word.length\n if (!table[key]) table[key] = new Trie()\n if (!reverseTable[key]) reverseTable[key] = new Trie()\n table[key].insert(word)\n reverseTable[key].insert(reverseString(word))\n if (counter[key] === undefined) counter[key] = 0\n counter[key]++\n })\n\n return queries.map((query) => {\n const key = query.length\n if (!table[key]) {\n return 0\n }\n const tQuery = query.replace(/\\?/g, '')\n if (!tQuery) {\n return counter[key]\n }\n if (query[query.length - 1] === '?') {\n return table[key].startsWithCount(tQuery)\n }\n return reverseTable[key].startsWithCount(reverseString(tQuery))\n })\n}", + "probId": "60060" }, { - "id": "-1rwNGDKeKcZcNF2b8NBo", - "author": "minjongbaek", - "code": "function isPrime(number) { // 소수를 판별하는 함수\n if (number < 2) return false;\n for (let i = 2; i * i <= number; i += 1) {\n if (number % i === 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction solution(n, k) {\n // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만,\n // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다.\n // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다.\n\n // (n).toString(k) // n을 k진수로 변환합니다.\n // .split('0') // 0을 기준으로 나눕니다.\n // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다.\n return (n).toString(k).split('0').filter((number) => isPrime(+number)).length;\n}", - "probId": "92335" + "id": "PcDl6DL2PASDq1U6OtLKw", + "author": "codeisneverodd", + "code": "//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90\nfunction solution(strs, t) {\n const tLength = t.length; //자주 쓰는 값 미리 계산\n //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다.\n const minCountToIndex = new Array(tLength).fill(Infinity);\n for (let currentIndex = 0; currentIndex < tLength; currentIndex++) {\n //내가 검사할 부분은 t의 0~currentIndex 영역\n const currentSlice = t.slice(0, currentIndex + 1);\n for (const str of strs) {\n //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면\n if (currentSlice.endsWith(str)) {\n //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이\n const frontLength = currentIndex - str.length + 1;\n if (frontLength === 0) {\n //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각\n minCountToIndex[currentIndex] = 1;\n } else {\n //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값\n minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1);\n }\n }\n }\n }\n //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴\n return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1];\n}\n\n//리드미 테스트용 코멘트", + "probId": "12983" }, { - "id": "sUDonIHVdTj1KyxZbPNa8", - "author": "ljw0096", - "code": "\nfunction solution(fees, records) {\n const answer = []\n\n const parkingTable = getParkingTable(records)\n const sortedKeys = Object.keys(parkingTable).sort()\n\n for (const targetCar of sortedKeys) {\n if (parkingTable[targetCar].length % 2 === 1) {\n parkingTable[targetCar].push(['23:59', 'OUT'])\n }\n const totalTime = getTotalTime(parkingTable, targetCar)\n const fee = calculateFee(totalTime, fees)\n answer.push(fee)\n }\n\n return answer\n}\n\nfunction getParkingTable(records) {\n const parkingTable = {}\n\n records.forEach((val) => {\n const info = val.split(' ')\n if (Object.keys(parkingTable).includes(info[1])) {\n parkingTable[info[1]].push([info[0], info[2]])\n } else {\n parkingTable[info[1]] = [[info[0], info[2]]]\n }\n })\n\n return parkingTable\n}\n\nfunction getTotalTime(parkingTable, targetCar) {\n let totalTime = 0\n for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) {\n totalTime += calculateTotalTime(\n parkingTable[targetCar][i][0],\n parkingTable[targetCar][i + 1][0]\n )\n }\n return totalTime\n}\n\nfunction calculateTotalTime(time1, time2) {\n const [hour1, minute1] = time1.split(':').map((val) => parseInt(val))\n const [hour2, minute2] = time2.split(':').map((val) => parseInt(val))\n\n return hour2 * 60 + minute2 - (hour1 * 60 + minute1)\n}\n\nfunction calculateFee(totalTime, feeInfo) {\n let fee = 0\n if (feeInfo[0] >= totalTime) {\n fee = feeInfo[1]\n } else {\n fee =\n feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3]\n }\n return fee\n}\n", - "probId": "92341" + "id": "l5j723vS_BE1IKwxV_QEr", + "author": "ryong9rrr", + "code": "function solution(food_times, k) {\n const total = food_times.reduce((a, b) => a + b)\n if (total <= k) {\n return -1\n }\n\n // stack으로 풀기\n const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA)\n\n let prev = 0\n while (stack.length > 0 && k >= 0) {\n const [time] = stack[stack.length - 1]\n const acc = (time - prev) * stack.length\n if (k < acc) {\n break\n }\n stack.pop()\n k -= acc\n prev = time\n }\n\n const result = stack\n .reverse()\n .map(([_, order]) => order)\n .sort((orderA, orderB) => orderA - orderB)\n return result[k % result.length]\n}", + "probId": "42891" }, { - "id": "XoxTMjsv5vhSm2IPcRC2A", - "author": "codeisneverodd", - "code": "// 문제 풀이 전략\n// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다.\n// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다.\n// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다.\n// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다.\n// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다.\n// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다\n// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다.\n// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다.\nfunction solution(possibleArrows, apeachComb) {\n const compareTable = apeachComb.map(apeachArrow => ({\n apeachArrow,\n ryanArrow: 0,\n }));\n const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows);\n const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff));\n const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff);\n if (maxScoreDiff <= 0) return [-1];\n const getIndexOfLastArrow = arrowTable =>\n arrowTable.length -\n arrowTable\n .slice()\n .reverse()\n .findIndex(x => x !== 0);\n return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable;\n}\nfunction getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) {\n const { apeachArrow } = compareTable[currentIndex];\n const lastIndex = compareTable.length - 1;\n const possibleRyanArrows = [\n 0,\n numberOfArrowLeft > apeachArrow && apeachArrow + 1,\n numberOfArrowLeft >= apeachArrow && apeachArrow,\n ];\n\n if (currentIndex === lastIndex || numberOfArrowLeft === 0) {\n if (numberOfArrowLeft > 0) {\n compareTable[compareTable.length - 1] = {\n apeachArrow,\n ryanArrow: numberOfArrowLeft,\n };\n }\n const appeachScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) =>\n apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc,\n 0\n );\n const ryanScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc),\n 0\n );\n return [\n {\n scoreDiff: ryanScore - appeachScore,\n ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow),\n },\n ];\n }\n return [\n ...possibleRyanArrows.flatMap(ryanUsedArrow => {\n const nextCompareTable = [...compareTable];\n nextCompareTable.splice(currentIndex, 1, {\n apeachArrow,\n ryanArrow: ryanUsedArrow,\n });\n return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow);\n }),\n ];\n}\n", - "probId": "92342" + "id": "_IJtm5VqJrpQBeBjgqmqR", + "author": "cg10036", + "code": "function solution(n) {\n const fact = n => n ? BigInt(n) * fact(n - 1) : 1n;\n return fact(n * 2) / (fact(n) * fact(n + 1));\n}", + "probId": "12929" } ] } diff --git "a/build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" "b/build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" new file mode 100644 index 0000000..24affdc --- /dev/null +++ "b/build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num_list, n) { + let result = []; + for (let i = 0; i < num_list.length / n; i++) { + result = [...result, num_list.slice(i * n, i * n + n)]; + } + return result; +} diff --git "a/build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" "b/build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" new file mode 100644 index 0000000..4e4415e --- /dev/null +++ "b/build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(order) { + return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length; +} diff --git "a/build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" "b/build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" new file mode 100644 index 0000000..873de1e --- /dev/null +++ "b/build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(array) { + return [...array.join('')].filter(a => a === '7').length; +} diff --git "a/build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" "b/build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" new file mode 100644 index 0000000..2077ea2 --- /dev/null +++ "b/build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(before, after) { + const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); + return sort(before) === sort(after) ? 1 : 0; +} diff --git "a/build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" "b/build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" new file mode 100644 index 0000000..f28d23e --- /dev/null +++ "b/build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(quiz) { + return quiz.map(q => { + const [formula, answer] = q.split('='); + return eval(formula) === +answer ? 'O' : 'X'; + }); +} diff --git "a/build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" "b/build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" new file mode 100644 index 0000000..cebb90d --- /dev/null +++ "b/build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(i, j, k) { + let count = 0; + for (let num = i; num <= j; num++) { + count += [...('' + num)].filter(n => +n === k).length; + } + return count; +} diff --git "a/build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" "b/build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" new file mode 100644 index 0000000..9d44755 --- /dev/null +++ "b/build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, numlist) { + return numlist.filter(num => num % n === 0); +} diff --git "a/build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" "b/build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" new file mode 100644 index 0000000..ee4c433 --- /dev/null +++ "b/build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(array, n) { + const minDiff = Math.min(...array.map(a => Math.abs(a - n))); + return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff); +} diff --git "a/build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" "b/build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" new file mode 100644 index 0000000..94afcdf --- /dev/null +++ "b/build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(rsp) { + const win = { 0: 5, 2: 0, 5: 2 }; + return [...rsp].map(num => win[num]).join(''); +} diff --git "a/build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" "b/build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" new file mode 100644 index 0000000..a861b97 --- /dev/null +++ "b/build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(array) { + const max = Math.max(...array); + return [max, array.indexOf(max)]; +} diff --git "a/build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" "b/build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" new file mode 100644 index 0000000..e21ec41 --- /dev/null +++ "b/build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(angle) { + if (angle === 180) return 4; + if (angle > 90) return 3; + if (angle === 90) return 2; + return 1; +} diff --git "a/build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" "b/build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" new file mode 100644 index 0000000..9624393 --- /dev/null +++ "b/build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(hp) { + const first = Math.floor(hp / 5); + const second = Math.floor((hp - first * 5) / 3); + const third = hp - first * 5 - second * 3; + return first + second + third; +} diff --git "a/build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" "b/build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" new file mode 100644 index 0000000..df5f34e --- /dev/null +++ "b/build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" @@ -0,0 +1,11 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(lines) { + const visited = lines.reduce((a, [x, y]) => { + for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1; + return a; + }, {}); + + return Object.values(visited).filter(v => v > 1).length; +} diff --git "a/build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" "b/build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" new file mode 100644 index 0000000..ecb6380 --- /dev/null +++ "b/build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers, k) { + const goNext = current => (current + 2) % numbers.length; + let current = 0; + for (let i = 0; i < k - 1; i++) current = goNext(current); + return numbers[current]; +} diff --git "a/build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" "b/build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" new file mode 100644 index 0000000..bdcfcf3 --- /dev/null +++ "b/build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" @@ -0,0 +1,11 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(balls, share) { + const [n, m] = [balls, share]; + const fact = [BigInt(1), BigInt(1)]; + + for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i); + + return Number(fact[n] / (fact[n - m] * fact[m])); +} diff --git "a/build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" "b/build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" new file mode 100644 index 0000000..dc0a2c4 --- /dev/null +++ "b/build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num1, num2) { + return num1 % num2; +} diff --git "a/build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" "b/build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" new file mode 100644 index 0000000..26db990 --- /dev/null +++ "b/build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(age) { + return 2022 - age + 1; +} diff --git "a/build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" "b/build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" new file mode 100644 index 0000000..9c6f012 --- /dev/null +++ "b/build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(common) { + const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0]; + return isAP(common) + ? common[common.length - 1] + common[1] - common[0] + : common[common.length - 1] * (common[1] / common[0]); +} diff --git "a/build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" "b/build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" new file mode 100644 index 0000000..f243aef --- /dev/null +++ "b/build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" @@ -0,0 +1,22 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(polynomial) { + const countX = x => { + const count = x.replaceAll('x', ''); + return count === '' ? 1 : +count; + }; + + const count = polynomial + .split(' + ') + .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), { + x: 0, + num: 0, + }); + + const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : ''; + const num = count.num > 0 ? '' + count.num : ''; + const plus = x !== '' && num !== '' ? ' + ' : ''; + + return x + plus + num; +} diff --git "a/build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" "b/build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" new file mode 100644 index 0000000..b7c8a5c --- /dev/null +++ "b/build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join(''); +} \ No newline at end of file diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" new file mode 100644 index 0000000..99e32c9 --- /dev/null +++ "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num1, num2) { + return num1 * num2; +} diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" new file mode 100644 index 0000000..3f9065f --- /dev/null +++ "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num1, num2) { + return Math.floor((num1 / num2) * 1000); +} diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" new file mode 100644 index 0000000..48d89cb --- /dev/null +++ "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num1, num2) { + return num1 - num2; +} diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" new file mode 100644 index 0000000..514526e --- /dev/null +++ "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num1, num2) { + return num1 + num2 +} \ No newline at end of file diff --git "a/build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" "b/build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" new file mode 100644 index 0000000..5c01af3 --- /dev/null +++ "b/build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" @@ -0,0 +1,12 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(score) { + const avgs = score.map(([a, b]) => (a + b) / 2); + const avgRank = [...avgs] + .sort((a, b) => b - a) + .map((avg, i) => ({ avg, rank: i + 1 })) + .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a)); + + return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank); +} diff --git "a/build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" "b/build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" new file mode 100644 index 0000000..82f42d8 --- /dev/null +++ "b/build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" @@ -0,0 +1,8 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(id_pw, db) { + const [id, pw] = id_pw; + if (!db.find(([_id]) => _id === id)) return 'fail'; + return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw'; +} diff --git "a/build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" "b/build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" new file mode 100644 index 0000000..0a70867 --- /dev/null +++ "b/build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(array, height) { + return array.filter(a => a > height).length; +} diff --git "a/build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" "b/build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" new file mode 100644 index 0000000..032c628 --- /dev/null +++ "b/build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" @@ -0,0 +1,16 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(letter) { + const morse = { + '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f', + '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l', + '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r', + '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x', + '-.--':'y','--..':'z' + } + return letter + .split(' ') + .map(l => morse[l]) + .join(''); +} diff --git "a/build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" "b/build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" new file mode 100644 index 0000000..9781d17 --- /dev/null +++ "b/build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return my_string.replace(/[aeiou]/g, ''); +} diff --git "a/build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" "b/build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" new file mode 100644 index 0000000..d199103 --- /dev/null +++ "b/build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num1, num2) { + return Math.floor(num1 / num2); +} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" new file mode 100644 index 0000000..16b267b --- /dev/null +++ "b/build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string, n) { + return [...my_string].map(char => char.repeat(n)).join(''); +} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" new file mode 100644 index 0000000..d0c4618 --- /dev/null +++ "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return eval(my_string); +} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" new file mode 100644 index 0000000..e728b21 --- /dev/null +++ "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return [...my_string].reverse().join(''); +} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" new file mode 100644 index 0000000..03a03b5 --- /dev/null +++ "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" @@ -0,0 +1,12 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(A, B) { + const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join(''); + for (let i = 0; i <= A.length; i++) { + if (A === B) return i; + A = pushRight(A); + } + + return -1; +} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" new file mode 100644 index 0000000..61a3f82 --- /dev/null +++ "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return my_string + .match(/[0-9]/g) + .map(str => +str) + .sort((a, b) => a - b); +} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" new file mode 100644 index 0000000..ac952aa --- /dev/null +++ "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return [...my_string] + .map(char => char.toLowerCase()) + .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) + .join(''); +} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" new file mode 100644 index 0000000..09dea0e --- /dev/null +++ "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(str1, str2) { + return str1.includes(str2) ? 1 : 2; +} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" new file mode 100644 index 0000000..7637b49 --- /dev/null +++ "b/build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers) { + return numbers.map(n => n * 2); +} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" new file mode 100644 index 0000000..d6d4759 --- /dev/null +++ "b/build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num_list) { + return num_list.reverse(); +} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" new file mode 100644 index 0000000..32ac56e --- /dev/null +++ "b/build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(strlist) { + return strlist.map(s => s.length); +} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" new file mode 100644 index 0000000..c04d4df --- /dev/null +++ "b/build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers, num1, num2) { + return numbers.slice(num1, num2 + 1); +} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" new file mode 100644 index 0000000..711d42b --- /dev/null +++ "b/build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" @@ -0,0 +1,8 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers, direction) { + return direction === 'right' + ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)] + : [...numbers.slice(1), numbers[0]]; +} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" new file mode 100644 index 0000000..fa9550c --- /dev/null +++ "b/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s1, s2) { + return s1.filter(s => s2.includes(s)).length; +} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" new file mode 100644 index 0000000..c97a515 --- /dev/null +++ "b/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers) { + return numbers.reduce((a, c) => a + c, 0) / numbers.length; +} diff --git "a/build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" "b/build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" new file mode 100644 index 0000000..1b66e1a --- /dev/null +++ "b/build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(denum1, num1, denum2, num2) { + const denum = denum2 * num1 + denum1 * num2; + const num = num1 * num2; + const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b)); + const gcd = getGCD(denum, num); + return [denum / gcd, num / gcd]; +} diff --git "a/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" "b/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" new file mode 100644 index 0000000..17ff2b2 --- /dev/null +++ "b/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(sides) { + const max = Math.max(...sides); + return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2; +} diff --git "a/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" "b/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" new file mode 100644 index 0000000..a4e0b37 --- /dev/null +++ "b/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" @@ -0,0 +1,14 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(sides) { + const min = Math.min(...sides); + const max1 = Math.max(...sides); + const max2 = min + max1 - 1; + return max2 - (max1 - min); +} + +//정답 2 - codeisneverodd +function solution(sides) { + return Math.min(...sides) * 2 - 1; +} diff --git "a/build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" "b/build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" new file mode 100644 index 0000000..0dffb96 --- /dev/null +++ "b/build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, t) { + return n * 2 ** t; +} diff --git "a/build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" "b/build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" new file mode 100644 index 0000000..7540490 --- /dev/null +++ "b/build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" @@ -0,0 +1,29 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let pFactors = []; + for (let i = 2; i <= Math.sqrt(n); i++) { + while (n % i === 0) { + pFactors = [...pFactors, i]; + n /= i; + } + } + if (n >= 2) pFactors = [...pFactors, n]; + return [...new Set(pFactors)].sort((a, b) => a - b); +} + +const funcB = () => { + return new Promise(resolve => { + setTimeout(resolve('guys'), 1000); + }); +}; + +const funcC = async () => { + const m = 1; + const res = await funcB(); + return res; +}; +window.addEventListener('DOMContentLoaded', async () => { + console.log(await funcC()); +}); diff --git "a/build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" "b/build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" new file mode 100644 index 0000000..99ee6e6 --- /dev/null +++ "b/build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" @@ -0,0 +1,11 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let count = 0; + for (let i = 1; i < Math.sqrt(n); i++) { + if (n % i === 0) count += 2; + } + if (n % Math.sqrt(n) === 0) count += 1; + return count; +} diff --git "a/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" "b/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" new file mode 100644 index 0000000..08f71f5 --- /dev/null +++ "b/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0); +} diff --git "a/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" "b/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" new file mode 100644 index 0000000..8efbb5a --- /dev/null +++ "b/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + const nums = my_string.match(/[0-9]+/g); + return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0; +} diff --git "a/build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" "b/build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" new file mode 100644 index 0000000..3e9246a --- /dev/null +++ "b/build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num1, num2) { + return num1 === num2 ? 1 : -1; +} diff --git "a/build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" "b/build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" new file mode 100644 index 0000000..6a64cfe --- /dev/null +++ "b/build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num, k) { + const index = [...('' + num)].findIndex(n => +n === k); + return index === -1 ? -1 : index + 1; +} diff --git "a/build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" "b/build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" new file mode 100644 index 0000000..1d3b080 --- /dev/null +++ "b/build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(money) { + return [Math.floor(money / 5500), money % 5500]; +} diff --git "a/build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" "b/build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" new file mode 100644 index 0000000..b675974 --- /dev/null +++ "b/build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(board) { + const isBombNearby = (r, c) => { + const nearby = [ + [-1, -1], + [-1, 0], + [-1, 1], + [0, -1], + [0, 1], + [1, -1], + [1, 0], + [1, 1], + ]; + + const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length; + + return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1); + }; + + let count = 0; + + for (let r = 0; r < board.length; r++) { + for (let c = 0; c < board.length; c++) { + if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1; + } + } + return count; +} diff --git "a/build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" "b/build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" new file mode 100644 index 0000000..960f78a --- /dev/null +++ "b/build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(cipher, code) { + return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), ''); +} diff --git "a/build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" "b/build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" new file mode 100644 index 0000000..4cbd275 --- /dev/null +++ "b/build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" @@ -0,0 +1,11 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let answer = []; + for (let i = 1; i < Math.sqrt(n); i++) { + if (n % i === 0) answer = [...answer, i, n / i]; + } + if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)]; + return answer.sort((a, b) => a - b); +} diff --git "a/build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" "b/build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" new file mode 100644 index 0000000..81b2485 --- /dev/null +++ "b/build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, k) { + return n * 12000 + (k - Math.floor(n / 10)) * 2000; +} diff --git "a/build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" "b/build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" new file mode 100644 index 0000000..f67702e --- /dev/null +++ "b/build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" @@ -0,0 +1,8 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num, total) { + const numArr = Array.from({ length: num }, (_, i) => i); + const sum = numArr.reduce((a, c) => a + c); + return numArr.map(n => n - (sum - total) / num); +} diff --git "a/build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" "b/build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" new file mode 100644 index 0000000..eb1f8c6 --- /dev/null +++ "b/build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" @@ -0,0 +1,8 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers) { + const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 }; + const regex = new RegExp(Object.keys(nums).join('|'), 'g'); + return +numbers.replace(regex, key => nums[key]); +} diff --git "a/build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" "b/build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" new file mode 100644 index 0000000..0fbd920 --- /dev/null +++ "b/build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(price) { + if (price >= 500000) return Math.floor(price * 0.8); + if (price >= 300000) return Math.floor(price * 0.9); + if (price >= 100000) return Math.floor(price * 0.95); + return price; +} diff --git "a/build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" "b/build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" new file mode 100644 index 0000000..a8bfecb --- /dev/null +++ "b/build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" @@ -0,0 +1,15 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(babbling) { + const convertPWordsToNum = word => { + const pWords = ['aya', 'ye', 'woo', 'ma']; + return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word); + }; + const canPronounce = word => { + const result = convertPWordsToNum(word); + return !/[^\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]); + }; + + return babbling.filter(b => canPronounce(b)).length; +} diff --git "a/build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" "b/build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" new file mode 100644 index 0000000..505e556 --- /dev/null +++ "b/build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(spell, dic) { + const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); + return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2; +} diff --git "a/build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" "b/build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" new file mode 100644 index 0000000..996b91b --- /dev/null +++ "b/build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(age) { + return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join(''); +} \ No newline at end of file diff --git "a/build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" "b/build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" new file mode 100644 index 0000000..fe8b4f7 --- /dev/null +++ "b/build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" @@ -0,0 +1,26 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(a, b) { + const getGCD = (a, b) => { + let gcd = 1; + for (let i = 1; i <= Math.min(a, b); i++) { + if (a % i === 0 && b % i === 0) gcd = i; + } + return gcd; + }; + + const getPrimeFactors = num => { + let pFactors = []; + for (let i = 2; i <= Math.sqrt(num); i++) { + while (num % i === 0) { + pFactors = [...pFactors, i]; + num /= i; + } + } + if (num > 2) pFactors = [...pFactors, num]; + return pFactors; + }; + + return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1; +} diff --git "a/build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" "b/build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" new file mode 100644 index 0000000..ea257ef --- /dev/null +++ "b/build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(bin1, bin2) { + return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2); +} diff --git "a/build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" "b/build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" new file mode 100644 index 0000000..176b728 --- /dev/null +++ "b/build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string, num1, num2) { + const str = [...my_string]; + + [str[num1], str[num2]] = [str[num2], str[num1]]; + + return str.join(''); +} diff --git "a/build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" "b/build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" new file mode 100644 index 0000000..0b60127 --- /dev/null +++ "b/build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0); +} diff --git "a/build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" "b/build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" new file mode 100644 index 0000000..a854dc6 --- /dev/null +++ "b/build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" @@ -0,0 +1,8 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_str, n) { + let result = []; + for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)]; + return result; +} diff --git "a/build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" "b/build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" new file mode 100644 index 0000000..8e1f33a --- /dev/null +++ "b/build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" @@ -0,0 +1,14 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let num = 0; + let count = 0; + + while (count < n) { + num += 1; + if (!('' + num).includes('3') && num % 3 !== 0) count += 1; + } + + return num; +} diff --git "a/build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" "b/build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" new file mode 100644 index 0000000..b84f0fd --- /dev/null +++ "b/build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" @@ -0,0 +1,8 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(dot) { + const [x, y] = dot; + if (y > 0) return x > 0 ? 1 : 2; + return x < 0 ? 3 : 4; +} diff --git "a/build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" "b/build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" new file mode 100644 index 0000000..5c55144 --- /dev/null +++ "b/build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + return Number.isInteger(Math.sqrt(n)) ? 1 : 2; +} diff --git "a/build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" "b/build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" new file mode 100644 index 0000000..9ec19bc --- /dev/null +++ "b/build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(M, N) { + return M * N - 1; +} diff --git "a/build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" "b/build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" new file mode 100644 index 0000000..ba6a201 --- /dev/null +++ "b/build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(box, n) { + return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n); +} diff --git "a/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" "b/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" new file mode 100644 index 0000000..f2e5f0e --- /dev/null +++ "b/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string) { + return [...new Set(my_string)].join(''); +} diff --git "a/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" "b/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" new file mode 100644 index 0000000..4428b1a --- /dev/null +++ "b/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(array, n) { + return array.filter(a => a === n).length; +} diff --git "a/build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" "b/build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" new file mode 100644 index 0000000..ed158ed --- /dev/null +++ "b/build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(array) { + return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]; +} diff --git "a/build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" "b/build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" new file mode 100644 index 0000000..9563816 --- /dev/null +++ "b/build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" @@ -0,0 +1,16 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let input = []; + +rl.on('line', function (line) { + input = line.split(' '); +}).on('close', function () { + for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i)); +}); diff --git "a/build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" "b/build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" new file mode 100644 index 0000000..dc022c9 --- /dev/null +++ "b/build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(dots) { + const xDots = dots.flatMap(([x, y]) => x); + const yDots = dots.flatMap(([x, y]) => y); + const width = Math.max(...xDots) - Math.min(...xDots); + const height = Math.max(...yDots) - Math.min(...yDots); + return width * height; +} diff --git "a/build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" "b/build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" new file mode 100644 index 0000000..6efc72e --- /dev/null +++ "b/build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(emergency) { + const sorted = [...emergency].sort((a, b) => b - a); + return emergency.map(e => sorted.findIndex(s => s === e) + 1); +} diff --git "a/build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" "b/build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" new file mode 100644 index 0000000..3312f99 --- /dev/null +++ "b/build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(num_list) { + const evenLength = num_list.filter(n => n % 2 === 0).length; + return [evenLength, num_list.length - evenLength]; +} diff --git "a/build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" "b/build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" new file mode 100644 index 0000000..e308d35 --- /dev/null +++ "b/build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let nums = []; + for (let i = 0; i <= n; i++) { + if (i % 2 === 1) nums = [...nums, i]; + } + return nums; +} diff --git "a/build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" "b/build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" new file mode 100644 index 0000000..8c6c310 --- /dev/null +++ "b/build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let answer = 0; + for (let i = 0; i <= n; i++) { + if (i % 2 === 0) answer += i; + } + return answer; +} diff --git "a/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" "b/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" new file mode 100644 index 0000000..bcd34e7 --- /dev/null +++ "b/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers) { + const [first, second, ...rest] = numbers.sort((a, b) => b - a); + return first * second; +} diff --git "a/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" "b/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" new file mode 100644 index 0000000..62a9b75 --- /dev/null +++ "b/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers) { + const sorted = numbers.sort((a, b) => a - b); + return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]); +} diff --git "a/build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" "b/build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" new file mode 100644 index 0000000..5682839 --- /dev/null +++ "b/build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(array) { + const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); + const max = Math.max(...Object.values(counts)); + const modes = Object.keys(counts).filter(key => counts[key] === max); + return modes.length === 1 ? +modes[0] : -1; +} diff --git "a/build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" "b/build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" new file mode 100644 index 0000000..52ed4f4 --- /dev/null +++ "b/build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" @@ -0,0 +1,11 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(chicken) { + const order = coupons => { + if (coupons < 10) return 0; + const service = Math.floor(coupons / 10); + return service + order(service + (coupons % 10)); + }; + return order(chicken); +} diff --git "a/build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" "b/build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" new file mode 100644 index 0000000..32889ce --- /dev/null +++ "b/build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" @@ -0,0 +1,43 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(keyinput, board) { + const moves = { + up: [0, 1], + down: [0, -1], + left: [-1, 0], + right: [1, 0], + }; + const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; + + return keyinput + .map(key => moves[key]) + .reduce( + ([x, y], [mX, mY]) => (Math.abs(x + mX) > rangeX || Math.abs(y + mY) > rangeY ? [x, y] : [x + mX, y + mY]), + [0, 0] + ); +} + +//정답 2 - codeisneverodd +//명령형 +function solution(keyinput, board) { + const moves = { + up: [0, 1], + down: [0, -1], + left: [-1, 0], + right: [1, 0], + }; + const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; + + let pos = [0, 0]; + + keyinput + .map(key => moves[key]) + .forEach(move => { + if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return; + pos[0] += move[0]; + pos[1] += move[1]; + }); + + return pos; +} diff --git "a/build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" "b/build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" new file mode 100644 index 0000000..eb35f6f --- /dev/null +++ "b/build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" @@ -0,0 +1,8 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s) { + const arr = s.split(' '); + while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2); + return arr.map(n => +n).reduce((a, c) => a + c, 0); +} diff --git "a/build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" "b/build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" new file mode 100644 index 0000000..8422a58 --- /dev/null +++ "b/build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numlist, n) { + return numlist.sort((a, b) => { + const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)]; + if (aDiff === bDiff) return b - a; + return aDiff - bDiff; + }); +} diff --git "a/build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" "b/build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" new file mode 100644 index 0000000..bb9f820 --- /dev/null +++ "b/build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(my_string, letter) { + return my_string.replaceAll(letter, ''); +} diff --git "a/build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" "b/build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" new file mode 100644 index 0000000..d888302 --- /dev/null +++ "b/build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" @@ -0,0 +1,9 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let factorial = [1, 1]; + for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i; + + return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2; +} diff --git "a/build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" "b/build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" new file mode 100644 index 0000000..a146a61 --- /dev/null +++ "b/build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(message) { + return message.length * 2; +} diff --git "a/build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" "b/build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" new file mode 100644 index 0000000..b8a3f33 --- /dev/null +++ "b/build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" @@ -0,0 +1,15 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(dots) { + const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity); + const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2); + + return dots.some(dot => { + const line1 = [dots[0], dot]; + const line2 = dots.filter(dot => !line1.includes(dot)); + return isParallel(line1, line2); + }) + ? 1 + : 0; +} diff --git "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" new file mode 100644 index 0000000..06cac15 --- /dev/null +++ "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + return Math.floor((n - 1) / 7) + 1; +} diff --git "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" new file mode 100644 index 0000000..a0a72c7 --- /dev/null +++ "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" @@ -0,0 +1,12 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + const getLCM = (a, b) => { + let lcm = 1; + while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1; + return lcm; + }; + + return getLCM(n, 6) / 6; +} diff --git "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" new file mode 100644 index 0000000..f37f5b7 --- /dev/null +++ "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" @@ -0,0 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(slice, n) { + return Math.floor((n - 1) / slice) + 1; +} diff --git "a/build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" "b/build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" new file mode 100644 index 0000000..c22230e --- /dev/null +++ "b/build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" @@ -0,0 +1,10 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s) { + const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); + return Object.keys(count) + .filter(key => count[key] === 1) + .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) + .join(''); +} diff --git "a/build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" "b/build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" new file mode 100644 index 0000000..7a9cf4f --- /dev/null +++ "b/build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" @@ -0,0 +1,19 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + const isPrime = num => { + for (let i = 2; i <= Math.sqrt(num); i++) { + if (num % i === 0) return true; + } + return false; + }; + + let count = 0; + + for (let i = 1; i <= n; i++) { + if (isPrime(i)) count += 1; + } + + return count; +} diff --git "a/build/oldSols/level-1/2016\353\205\204&12901&.js" "b/build/oldSols/level-1/2016\353\205\204&12901&.js" new file mode 100644 index 0000000..64caabd --- /dev/null +++ "b/build/oldSols/level-1/2016\353\205\204&12901&.js" @@ -0,0 +1,65 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(a, b) { + let count = 0; + const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; + const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + for (let i = 1; i < a; i++) count += month[i]; + count += b; + return day[(count + 4) % 7]; // 금요일 부터 1일 이므로 +} + +//정답 2 - yongchanson +function solution(a, b) { + const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + const week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]; + + let sum = b; + for ( + let i = 0; + i < a - 1; + i++ //ex)5월인 경우 1~4월까지 더해준다. + ) + sum += month[i]; + + return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다. +} + +//정답 3 - chaerin-dev +function solution(a, b) { + let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; + let dateStr = "2016-" + a + "- " + b; + let date = new Date(dateStr); + return week[date.getDay()]; +} + +//정답 4 - chaerin-dev +function solution(a, b) { + let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; + // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수 + let passedDays = 0; + // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌 + for (let i = 1; i < a; i++) passedDays += arr[i]; + // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌 + passedDays += b - 1; + return week[(5 + passedDays) % 7]; +} + +//정답 5 - prove-ability +function solution(a, b) { + var answer = ""; + // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? + const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; + const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + // 2016년 1월 1일은 금요일로 4를 더해준다 + let totalDays = 4; + // a 이전 모든 달의 일 수를 더한다 + for (let i = 0, len = a - 1; i < len; i++) { + totalDays += daysOfMonth[i]; + } + // totalDays 와 해당 일을 더해주고 7로 나눈 나머지 + const dayIndex = (totalDays + b) % 7; + return days[dayIndex]; +} diff --git "a/build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" "b/build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" new file mode 100644 index 0000000..cd1e85a --- /dev/null +++ "b/build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" @@ -0,0 +1,37 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + return parseInt(n.toString(3).split("").reverse().join(""), 3); +} + +//정답 2 - codeisneverodd +function solution(n) { + var answer = 0; + const ternaryReversed = decimalToTernaryReversed(n); + answer = parseInt(ternaryReversed, 3); + return answer; +} + +const decimalToTernaryReversed = (num) => { + let ternary = ""; + while (num >= 3) { + ternary += (num % 3).toString(); + num = Math.floor(num / 3); + } + ternary += num.toString(); + return ternary; +}; + +//정답 3 - jaewon1676 +function solution(n) { + var answer = n.toString(3).split("").reverse().join(""); + + return parseInt(answer, 3); +} + + +//정답 4 - prove-ability +function solution(n) { + return parseInt(n.toString(3).split("").reverse().join(""), 3) +} diff --git "a/build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" "b/build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" new file mode 100644 index 0000000..b843b25 --- /dev/null +++ "b/build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" @@ -0,0 +1,60 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(array, commands) { + return commands.map((cmd) => { + const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b); + return arrCmd[cmd[2] - 1]; + }); +} + +//정답 2 - jaewon1676 +function solution(array, commands) { + var result = []; + var temp = []; + for (var i = 0; i < commands.length; i++) { + temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => { + return a - b; + }); + console.log(temp); + result.push(temp[commands[i][2] - 1]); + } + return result; +} + +// 정답 3 - prove-ability +function solution(array, commands) { + var answer = []; + commands.forEach(([i, j, k]) => { + const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1]; + answer.push(su); + }); + return answer; +} + +//정답 4 - createhb21 + +function solution(array, commands) { + let answer = []; + for (let i = 0; i < commands.length; i++) { + let eachCommand = commands[i]; + let slice = array.slice(eachCommand[0] - 1, eachCommand[1]); + answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]); + } + return answer; +} + +// 정답 5 - chaerin-dev +function solution(array, commands) { + let t = commands.length; + let answer = []; + while (t--) { + let command = commands.shift(); + answer.push( + array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[ + command[2] - 1 + ] + ); + } + return answer; +} diff --git "a/build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" "b/build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" new file mode 100644 index 0000000..92a9564 --- /dev/null +++ "b/build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" @@ -0,0 +1,60 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(dartResult) { + const regex = /\d{1,2}[SDT]{1}[*|#]?/g; + let result = []; + for (const dart of dartResult.match(regex)) { + const game = [...dart.split(/([SDT]{1})/)]; + const score = game[0]; + let bonus = 1; + let option = 1; + if (game[1] === "S") bonus = 1; + if (game[1] === "D") bonus = 2; + if (game[1] === "T") bonus = 3; + + if (game[2] === "*") { + if (result.length !== 0) result[result.length - 1] *= 2; + option = 2; + } + if (game[2] === "#") option = -1; + + result.push(score ** bonus * option); + } + + return result.reduce((a, b) => a + b); +} + +//정답 2 - jaewon1676 +function solution(dartResult) { + var answer = 0; + let score = 0; + let cnt = []; + + for (let i = 0; i < dartResult.length; i++) { + //점수가 주어질때 + if (!isNaN(dartResult[i])) { + // i가 1인 경우는 10점, 그외에는 점수 + score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]); + //보너스 S일때 + } else if (dartResult[i] === "S") { + cnt.push(score); + //보너스 D일때 + } else if (dartResult[i] === "D") { + cnt.push(Math.pow(score, 2)); + //보너스 T일때 + } else if (dartResult[i] === "T") { + cnt.push(Math.pow(score, 3)); + //옵션 *일떄 + } else if (dartResult[i] === "*") { + cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2; + cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2; + //옵션 #일때 + } else if (dartResult[i] === "#") { + cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1]; + } + } + //3개의 점수 합산 + answer = cnt.reduce((acc, cur) => acc + cur, 0); + return answer; +} diff --git "a/build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" "b/build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" new file mode 100644 index 0000000..572270d --- /dev/null +++ "b/build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" @@ -0,0 +1,62 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n, arr1, arr2) { + const answer = []; + for (let i = 0; i < n; i++) { + let row = (arr1[i] | arr2[i]).toString(2); //Bitwise + row = "0".repeat(n - row.length) + row; + row = row.replace(/[10]/g, (a) => (+a ? "#" : " ")); + answer.push(row); + } + return answer; +} + +//정답 2 - codeisneverodd +function solution(n, arr1, arr2) { + var answer = []; + let mapA = []; + let mapB = []; + for (let i = 0; i < n; i++) { + let rowArrA = arr1[i].toString(2).split(""); + let rowArrB = arr2[i].toString(2).split(""); + for (let j = 0, len = rowArrA.length; j < n - len; j++) + rowArrA.unshift("0"); + for (let j = 0, len = rowArrB.length; j < n - len; j++) + rowArrB.unshift("0"); + mapA.push(rowArrA); + mapB.push(rowArrB); + } + let answer2D = mapA.slice(); + for (let i = 0; i < n; i++) { + for (let j = 0; j < n; j++) { + answer2D[i][j] = mapA[i][j] === "0" && mapB[i][j] === "0" ? " " : "#"; + } + } + answer = answer2D.map((row) => row.join("")); + return answer; +} + +//정답 3 - jaewon1676 +function solution(n, arr1, arr2) { + let answer = []; + for (let i = 0; i < n; i++) { + let temp = (arr1[i] | arr2[i]).toString(2); + let line = []; // 한 행의 모든 2진수 보관 + + for (let j = temp.length - n; j < temp.length; j++) { + if (temp[j] == 1) { + line.push("#"); + } else { + line.push(" "); + } + } + answer.push(line.join("")); + } + return answer; +} + +/* 풀이 과정 +1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다. +2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다. +3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/ diff --git "a/build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" "b/build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" new file mode 100644 index 0000000..6cd7f95 --- /dev/null +++ "b/build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" @@ -0,0 +1,41 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(x, n) { + return Array.from(Array(n), (_, index) => x * (index + 1)); +} + +//정답 2 - chaerin-dev +function solution(x, n) { + var answer = []; + let add_gap = x; + // n번 반복 + for (let i = 0; i < n; i++) { + answer.push(x); // 처음 배열에 넣을 x + x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가 + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(n) { + let str = ""; + for (let i = 0; i < n; i++) { + // 삼항 연산자와 +로 문자열을 붙여주어 추가. + i % 2 == 0 ? (str = str + "수") : (str = str + "박"); + } + return str; +} + +// 정답 4 - prove-ability +function solution(x, n) { + var answer = []; + let i = 1; + // n개 지니는 리스트를 리턴해야 합니다 + while (answer.length !== n) { + // x부터 시작해 x씩 증가하는 숫자 + answer.push(x * i); + i++; + } + return answer; +} diff --git "a/build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" "b/build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" new file mode 100644 index 0000000..9422925 --- /dev/null +++ "b/build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" @@ -0,0 +1,50 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + return s.length % 2 !== 0 + ? s[Math.floor(s.length / 2)] + : s.slice(s.length / 2 - 1, s.length / 2 + 1); +} + +//정답 2 - yongchanson +function solution(s) { + var answer = ""; + let L2 = s.length / 2; + + answer = + s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]); + + return answer; +} + +//정답 3 - prove-ability +function solution(s) { + var answer = ''; + // 중간 지점 찾기 + const point = Math.floor(s.length / 2); + // 짝수인 경우 - (중간지점 - 1) + 중간지점 + if(s.length % 2 ===0) answer = s[point - 1] + s[point]; + // 홀수인 경우 - 중간지점 + else answer = s[point]; + return answer; +} + +// 정답 4 - chaerin-dev +function solution(s) { + return s.length % 2 + ? s[parseInt(s.length / 2)] + : s[s.length / 2 - 1] + s[s.length / 2]; +} + +// 정답 5 - jaewon1676 +function solution(s) { + var answer = ''; + + if (s.length % 2 == 0 ) { // 짝수일 경우, + answer = s[s.length / 2 - 1] + s[s.length / 2]; + } else { + answer = s[parseInt(s.length / 2)]; // 홀수일 경우 + } + return answer; +} diff --git "a/build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" "b/build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" new file mode 100644 index 0000000..bdf875e --- /dev/null +++ "b/build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" @@ -0,0 +1,43 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(arr) { + return arr.filter((element, index) => element !== arr[index + 1]); +} + +//정답 2 - codeisneverodd +function solution(arr) { + var answer = [arr[0]]; + for (let i = 1; i < arr.length; i++) { + //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다. + answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null; + } + return answer; +} + +//정답 3 - chaerin-dev +function solution(arr) { + // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고, + // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용 + // 첫 번째 요소의 경우 undefined와 비교 + return arr.filter((item, index) => item !== arr[index - 1]); +} + +// 정답 4 - prove-ability +function solution(arr) { + let answer = []; + // 이중 배열을 사용해서 포인터?를 두 개를 사용한다 + for (let i = 0, len = arr.length - 1; i < len; i++) { + // i 의 다음수를 비교하기 위해 j = (i + 1) + for (let j = i + 1, len = arr.length; j < len; j++) { + // i 와 j 번째 값이 같이 않다면 + if (arr[i] !== arr[j]) { + answer.push(arr[i]); + i = j - 1; + break; + } + } + } + answer.push(arr[arr.length - 1]); + return answer; +} diff --git "a/build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" "b/build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" new file mode 100644 index 0000000..f79492e --- /dev/null +++ "b/build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" @@ -0,0 +1,35 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(arr, divisor) { + const answer = arr.filter((element) => element % divisor === 0); + answer.length === 0 ? answer.push(-1) : answer.sort((a, b) => a - b); + return answer; +} + +//정답 2 - codeisneverodd +function solution(arr, divisor) { + var answer = []; + arr.forEach((element) => { + element % divisor === 0 ? answer.push(element) : null; + }); + answer.length === 0 ? answer.push(-1) : null; + answer.sort((a, b) => a - b); + return answer; +} + +//정답 3. chaerin-dev +function solution(arr, divisor) { + let answer = []; + arr.forEach((e) => { + if (e % divisor === 0) answer.push(e); + }); + return answer.length ? answer.sort((a, b) => a - b) : [-1]; +} + +//정답 4 - prove-ailbity +function solution(arr, divisor) { + var answer = []; + arr.forEach((v) => v % divisor === 0 && answer.push(v)) + return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b); +} diff --git "a/build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" "b/build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" new file mode 100644 index 0000000..56d4913 --- /dev/null +++ "b/build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" @@ -0,0 +1,36 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + + let answer = 0; + for (let divisor = n - 1; divisor >= 2; divisor--) { + if (n % divisor === 1) answer = divisor; + } + return answer; +} + +//정답 2 - prove-ability +function solution(n) { + var answer = 0; + let i = 0; + while(true) { + if(n % i === 1) { + answer = i; + break; + } + i++; + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(n) { + var answer = 0; + for (let i=1; i x + y * b[i], 0); +} + +//정답 2 - yongchanson +function solution(a, b) { + var answer = 0; + + for (i = 0; i < a.length; i++) { + answer += a[i] * b[i]; + } + return answer; +} + +//정답 3 - prove-ability +function solution(a, b) { + var answer = 0; + + for (let i = 0, len = a.length; i < len; i++) { + answer += a[i] * b[i]; + } + + return answer; +} + +//정답 4 - jaewon1676 +function solution(a, b) { + let answer = 0; + for (let i=0; i acc + e * b[i], 0); +} diff --git "a/build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" "b/build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" new file mode 100644 index 0000000..2c079cd --- /dev/null +++ "b/build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" @@ -0,0 +1,26 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(numbers) { + const answer = []; + for (let i = 0; i < numbers.length; i++) { + for (let j = i + 1; j < numbers.length; j++) { + answer.push(numbers[i] + numbers[j]); + } + } + return [...new Set(answer)].sort((a, b) => a - b); +} + +//정답 2 - prove-ability +function solution(numbers) { + const answer = []; + + for(let i = 0, len = numbers.length; i < len; i++) { + for(let j = i + 1, len = numbers.length; j < len; j++) { + if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j]) + } + } + + return answer.sort((a, b) => a - b); +} + diff --git "a/build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" "b/build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" new file mode 100644 index 0000000..618db2f --- /dev/null +++ "b/build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" @@ -0,0 +1,47 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(a, b) { + let answer = 0; + for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { + answer += i; + } + return answer; +} + +//정답 2 - chaerin-dev +function solution(a, b) { + let answer = 0; + for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { + answer += i; + } + return answer; +} + +//정답 3 - prove-ability +function solution(a, b) { + let answer = 0; + for(let i = Math.min(a, b), len = Math.max(a, b); i <= len; i++) { + answer += i; + } + return answer; +} + +//정답 4 - prove-ability +function solution(a, b) { + return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0); +} + +//정답 5 - jaewon1676 +function solution(a, b) { + if (b < a){ // b가 a보다 큰 수가 되도록 해준다. + let c = b + b = a + a = c + } + let sum = 0; // 합을 구할 변수 + for (let i=a; i<=b; i++){ + sum += i + } + return sum; +} diff --git "a/build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" "b/build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" new file mode 100644 index 0000000..c4166f3 --- /dev/null +++ "b/build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" @@ -0,0 +1,151 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(lottos, win_nums) { + const zeroCount = lottos.filter((e) => e === 0).length; + const matchCount = win_nums.filter((e) => lottos.includes(e)).length; + const matchToRank = [6, 6, 5, 4, 3, 2, 1]; + const lowRank = matchToRank[matchCount]; + const highRank = zeroCount === 6 ? 1 : matchToRank[matchCount + zeroCount]; + + return [highRank, lowRank]; +} + +//정답 2 - codeisneverodd +function solution(lottos, win_nums) { + // 0이 없는 경우 > 최저 순위 == 최고 순위 + // 0이 있는 경우 > 모두 0인경우 > 1위 + // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위 + // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함. + // 순위는 7 - hit + // 최종적으로 7위인 경우 6위로 변경 + var answer = []; + if (lottos.indexOf(0) === -1) { + answer[0] = answer[1] = 7 - hit(lottos, win_nums); + } else { + const zeroCount = lottos.length - [...new Set(lottos)].length + 1; + answer[1] = 7 - hit(lottos, win_nums); + zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount); + } + for (let i = 0; i < 2; i++) { + answer[i] >= 7 ? (answer[i] = 6) : null; + } + return answer; +} + +function hit(lottos, win_nums) { + let result = 0; + lottos.forEach((element) => { + win_nums.indexOf(element) === -1 ? null : (result += 1); + }); + return result; +} + +// 정답 3 - jaewon1676 +function solution(lottos, win_nums) { + var answer = []; + const correct = lottos.filter((lotto) => win_nums.includes(lotto)).length; + // lottos배열을 순회하며 당첨배열에 있는 수를 return 하고 총 개수를 correct에 저장 + + const zeros = lottos.filter((lotto) => lotto === 0).length; + // lottos배열을 순회하며 0인 총 개수를 zeros에 저장 + + let min = 7 - correct >= 6 ? 6 : 7 - correct; + + let max = min - zeros < 1 ? 1 : min - zeros; + + answer = [max, min]; + + return answer; +} + +// 정답 4 - jaewon1676 +function solution(lottos, win_nums) { + var answer = []; + let max = 7; + let min = 7; + console.log(lottos); + console.log(win_nums); + for (let i = 0; i < 6; i++) { + if (lottos.includes(win_nums[i])) { + max--; + } + } + min = max; + for (let i = 0; i < 6; i++) { + if (lottos[i] == 0) min--; + } + if (max == 7) max = 6; + if (min == 7) min = 6; + answer = [min, max]; + return answer; +} + +//정답 5 - yongchanson +function solution(lottos, win_nums) { + //최고당첨개수 : maxPoint + basicPoint + //최저당첨개수 : basicPoint + + let basicPoint = 0; + let maxPoint = 0; + let answer = []; + + lottos.forEach(function (lottos_item) { + win_nums.forEach(function (win_nums_item) { + if (lottos_item == win_nums_item) { + basicPoint++; + } + }); + }); + + lottos.forEach(function (item) { + if (item == 0) { + maxPoint++; + } + }); + + maxPoint + basicPoint >= 2 + ? answer.push(7 - maxPoint - basicPoint) + : answer.push(6); + basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6); + + return answer; +} + +//정답 6 - prove-ability +function solution(lottos, win_nums) { + // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화 + let winCount = 0; + let zeroCount = 0; + // 내 로또 번호 하니씩 접근 + lottos.forEach((num) => { + // 번호가 0이 아니고 당첨 번호라면 + if (num !== 0 && win_nums.includes(num)) { + winCount++; + // 번호가 0이라면 + } else if (num === 0) { + zeroCount++; + } + }); + // 일치한 수와 등수는 반비례하기 때문에 빼기 7 + // 이때 등수를 벗어나면 낙첨(6) 으로 고정 + let max = 7 - (winCount + zeroCount); + if (max > 5) max = 6; + let min = 7 - winCount; + if (min > 5) min = 6; + + return [max, min]; +} + +//정답 7 - chaerin-dev +function solution(lottos, win_nums) { + let zeroCount = 0; + let winCount = 0; + lottos.forEach((item) => { + if (item === 0) zeroCount++; + else if (win_nums.includes(item)) winCount++; + }); + let maxRank = Math.min(7 - (winCount + zeroCount), 6); + let minRank = Math.min(7 - winCount, 6); + return [maxRank, minRank]; +} diff --git "a/build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" "b/build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" new file mode 100644 index 0000000..c91c3b1 --- /dev/null +++ "b/build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" @@ -0,0 +1,135 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(answers) { + const answer = []; + const firstPattern = [1, 2, 3, 4, 5]; + const firstPLength = firstPattern.length; + const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5]; + const secondPLength = secondPattern.length; + const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; + const thirdLength = thirdPattern.length; + let correctCount = [0, 0, 0]; + + for (let i = 0, len = answers.length; i < len; i++) { + if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1; + if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1; + if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1; + } + + const maxScore = Math.max(...correctCount); + for (let i = 0; i < 3; i++) { + if (correctCount[i] === maxScore) answer.push(i + 1); + } + + return answer; +} + +// 완벽한 정답이 아닙니다. +// 정답 2 - prove-ability +function solution(answers) { + let result = []; + + let players = { + 1: { + pattern: [1, 2, 3, 4, 5], + count: 0, + }, + 2: { + pattern: [2, 1, 2, 3, 2, 4, 2, 5], + count: 0, + }, + 3: { + pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5], + count: 0, + }, + }; + let max = 0; + answers.forEach((answer, index) => { + for (let [key, { pattern }] of Object.entries(players)) { + // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가 + if (pattern[index % pattern.length] === answer) { + players[key].count++; + // 제일 높은 count 구하기 + if (max < players[key].count) max = players[key].count; + } + } + }); + // players 중에 count 가 max 와 값이 같다면 result 추가 + for (let [key, { count }] of Object.entries(players)) { + if (count === max) result.push(parseInt(key, 10)); + } + + return result; +} + +//정답 3 - yongchanson +function solution(answers) { + let score = []; + let answer = []; + let a1 = [1, 2, 3, 4, 5]; + let a2 = [2, 1, 2, 3, 2, 4, 2, 5]; + let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; + + score.push(answers.filter((a, i) => a === a1[i % a1.length]).length); + score.push(answers.filter((a, i) => a === a2[i % a2.length]).length); + score.push(answers.filter((a, i) => a === a3[i % a3.length]).length); + + for (let i = 0; i < score.length; i++) { + const max = Math.max(...score); + if (score[i] === max) { + answer.push(i + 1); + } + } + + return answer; +} + +//정답 4 - jaewon1676 +function solution(answers) { + let arr1 = [1,2,3,4,5] + let arr2 = [2,1,2,3,2,4,2,5] + let arr3 = [3,3,1,1,2,2,4,4,5,5] + + let score = [0, 0, 0] + for (let i=0; i { + for (let j = 0; j < pattern.length; j++) { + const patternLength = pattern[j].length; + if (answer === pattern[j][i % patternLength]) scores[j]++; + } + }); + + const answer = []; + const maxScore = Math.max(...scores); + scores.forEach((score, i) => { + if (score === maxScore) answer.push(i + 1); + }); + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" new file mode 100644 index 0000000..098a7aa --- /dev/null +++ "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" @@ -0,0 +1,36 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + const countP = [...s.matchAll(/p/gi)].length; + const countY = [...s.matchAll(/y/gi)].length; + return countP === countY; +} + +//정답 2 - yongchanson +function solution(s) { + p = s.toLowerCase().split("p").length; + y = s.toLowerCase().split("y").length; + + return p == y ? true : false; +} + +//정답 3 - chaerin-dev +function solution(s) { + let pCount = s.split(/p/i).length - 1; + let yCount = s.split(/y/i).length - 1; + return pCount === yCount; +} +// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다. +// Ex. "ababb".split("a") 의 결과는 ["", "b", "bb"] +// => 즉, "a"의 갯수는 3에서 1을 뺀 2 + +// 정답 4 - prove-ability +function solution(s){ + // 배열로 변환 + s = s.split(""); + // filter 를 사용해 갯수 추출 + const pCount = s.filter((v) => v === "p" || v === "P").length; + const yCount = s.filter((v) => v === "y" || v === "Y").length; + return pCount === yCount; +} \ No newline at end of file diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" new file mode 100644 index 0000000..0353a7c --- /dev/null +++ "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" @@ -0,0 +1,35 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(strings, n) { + return strings.sort((a, b) => { + if (a[n] < b[n]) return -1; + if (a[n] > b[n]) return 1; + if (a[n] === b[n]) return a < b ? -1 : 1; + return 0; + }); +} + +//정답 2 - chaerin-dev +function solution(strings, n) { + return strings.sort((a, b) => { + // 인덱스 n번째 글자를 기준으로 오름차순 정렬 + if (a[n] > b[n]) return 1; + else if (a[n] < b[n]) return -1; + // 인덱스 n번째 글자가 같으면 사전순 정렬 + else return a > b ? 1 : -1; + }); +} + +// 정답 3 - prove-ability +function solution(strings, n) { + // 정렬 + strings.sort((a, b) => { + // n번째 클자가 같다면 사전순 + if(a[n].charCodeAt() === b[n].charCodeAt()) { + return a > b ? 1 : -1; + } else return a[n].charCodeAt() - b[n].charCodeAt(); + }); + + return strings; +} diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" new file mode 100644 index 0000000..3d0a5fa --- /dev/null +++ "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" @@ -0,0 +1,39 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + return s + .split("") + .sort((a, b) => { + if (a < b) return 1; + if (a > b) return -1; + return 0; + }) + .join(""); +} + +//정답 2 - chaerin-dev +function solution(s) { + // 문자열 -> 배열 -> 정렬 -> 순서뒤집기 -> 문자열 + return s.split("").sort().reverse().join(""); +} + +//정답 3 - chaerin-dev +function solution(s) { + return s.split("").sort((a, b) => (a < b ? 1 : -1)).join(""); +} + + +//정답 4 - prove-ability +function solution(s) { + return s.split("").sort().reverse().join("") +} + +//정답 5 - jaewon1676 +function solution(s) { + return s.split('').sort().reverse().join('') +} +// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다. +// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다. +// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다. + diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" new file mode 100644 index 0000000..0849d59 --- /dev/null +++ "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" @@ -0,0 +1,54 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + return s.search(/\D/g) < 0 && (s.length === 4 || s.length === 6); +} + +//정답 2 - yongchanson +function solution(s) { + let parseInts = parseInt(s); + if (s.length == 6 || s.length == 4) { + if (s == parseInts) { + return true; + } + } + + return false; +} + +//정답 3 - prove-ability +function solution(s) { + var answer = true; + // 문자열 s의 길이가 4 혹은 6이고 + if (s.length === 4 || s.length === 6) { + for (let i = 0, len = s.length; i < len; i++) { + // 숫자로만 구성돼있는지 확인 + if (!Number.isInteger(parseInt(s[i], 10))) return false; + } + // 문자열 s의 길이가 4 혹은 6 가 아니라면 false + } else return false; + + return answer; +} + +//정답 4 - chaerin-dev +function solution(s) { + // 길이가 4 혹은 6이 아니면 false 반환 + if (s.length !== 4 && s.length !== 6) return false; + // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환 + for (let i = 0; i < s.length; i++) { + if (isNaN(Number(s[i]))) return false; + } + // 위의 모든 조건에 포함되지 않으면 + // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환 + return true; +} + +//정답 5 - soulhn +function solution(s) { + if (s.length !== 4 && s.length !== 6) return false; + return !s.split("").some((i) => isNaN(parseInt(i, 10))); + //early return 제외사항 먼저 처리 + //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환 +} diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" new file mode 100644 index 0000000..f21b1f4 --- /dev/null +++ "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" @@ -0,0 +1,22 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + return parseInt(s); +} + +//정답 2 - chaerin-dev +function solution(s) { + return Number(s); +} + +//정답 3 - prove-ability +function solution(s) { + return parseInt(s, 10); +} + + +//정답 4 - jaewon1676 +function solution(s) { + return parseInt(s); +} diff --git "a/build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" "b/build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" new file mode 100644 index 0000000..04bfabb --- /dev/null +++ "b/build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" @@ -0,0 +1,57 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(price, money, count) { + let totalCost = 0; + for (let i = 1; i <= count; i++) totalCost += price * i; + return totalCost <= money ? 0 : totalCost - money; +} + +//정답 2 - yongchanson +function solution(price, money, count) { + var answer = 0; + let sum = price; + + for (i = 2; i <= count; i++) { + sum += price * i; + } + + if (sum <= money) { + answer = 0; + } else { + answer = sum - money; + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(price, money, count) { + let sum_price = 0; // 놀이기구의 이용료의 합 + for (let i = 1; i <= count; i++) { + sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다. + } + if (sum_price <= money) { + return 0; + } + return sum_price - money; +} + +//정답 4 - prove-ability +function solution(price, money, count) { + let sum = 0; + for(let i = 1; i <= count; i++) { + sum += (i * price) + } + + return sum < money ? 0 : sum - money; +} + +//정답 5 - chaerin-dev +function solution(price, money, count) { + let totalPrice = 0; + for(let i=1; i<=count; i++){ + totalPrice += i * price; + } + return money > totalPrice ? 0 : totalPrice-money; +} + diff --git "a/build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" "b/build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" new file mode 100644 index 0000000..945278e --- /dev/null +++ "b/build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" @@ -0,0 +1,25 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(seoul) { + return `김서방은 ${seoul.indexOf("Kim")}에 있다`; +} + +//정답 2 - chaerin-dev +function solution(seoul) { + return `김서방은 ${seoul.indexOf("Kim")}에 있다`; +} + +//정답 3 - prove-ability +function solution(seoul) { + return `김서방은 ${seoul.findIndex(v => v === "Kim")}에 있다`; +} + +//정답 4 - jaewon1676 +function solution(seoul) { + var answer = ''; + for (let i=0; i<1000; i++){ + if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다'; + } + return 1; +} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" "b/build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" new file mode 100644 index 0000000..a5787d6 --- /dev/null +++ "b/build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" @@ -0,0 +1,72 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - ssi02014 +function solution(survey, choices) { + const points = [3, 2, 1, 0, 1, 2, 3]; + const pointBoard = { + R: 0, + T: 0, + C: 0, + F: 0, + J: 0, + M: 0, + A: 0, + N: 0, + }; + let result = ""; + + // 카테고리 별 점수 추가 + for (let i = 0; i < survey.length; i++) { + const categories = survey[i]; + + if (choices[i] < 4) { + pointBoard[categories[0]] += points[choices[i] - 1]; + } else if (choices[i] > 4) { + pointBoard[categories[1]] += points[choices[i] - 1]; + } + } + + const pointBoardEntries = Object.entries(pointBoard); + + // 지표에 맞게 결과 값 도출 + for (let i = 0; i < pointBoardEntries.length; i += 2) { + const [curCategory, curValue] = pointBoardEntries[i]; + const [nextCategory, nextValue] = pointBoardEntries[i + 1]; + + if (curValue < nextValue) { + result += nextCategory; + } else { + result += curCategory; + } + } + + return result; +} + +//정답 2 - codeisneverodd +function solution(survey, choices) { + const points = [-3, -2, -1, 0, 1, 2, 3]; + const types = ['RT', 'CF', 'JM', 'AN']; + const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {}); + survey.forEach((key, i) => { + const point = points[choices[i] - 1]; + Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point); + }); + return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join(''); +} + +//정답 3 - codisneverodd +function solution(survey, choices) { + const points = [-3, -2, -1, 0, 1, 2, 3]; + const types = ['RT', 'CF', 'JM', 'AN']; + const pointBoard = survey.reduce((a, key, i) => { + if (types.includes(key)) { + a[key] = (a[key] || 0) + points[choices[i] - 1]; + return a; + } + const rKey = key[1] + key[0]; + a[rKey] = (a[rKey] || 0) - points[choices[i] - 1]; + return a; + }, {}); + return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join(''); +} diff --git "a/build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" "b/build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" new file mode 100644 index 0000000..15a504d --- /dev/null +++ "b/build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" @@ -0,0 +1,85 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(nums) { + let answer = 0; + const length = nums.length; + for (let i = 0; i < length; i++) { + for (let j = i + 1; j < length; j++) { + for (let k = j + 1; k < length; k++) { + const sum = nums[i] + nums[j] + nums[k]; + if (isPrime(sum)) answer += 1; + } + } + } + + return answer; +} + +function isPrime(num) { + for (let i = 2; i <= Math.sqrt(num); i++) { + if (num % i === 0) return false; + } + return num >= 2; +} + +//정답 2 - jaewon1676 +// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript + +function solution(nums) { + let len = nums.length, answer = 0; + + for (let i = 0; i < len - 2; i++) { + for (let j = i + 1; j < len - 1; j++) { + for (let k = j + 1; k < len; k++) { + if (isPrime(nums[i] + nums[j] + nums[k])) { + answer++; + } + } + } + } + return answer; +} + +const isPrime = (n) => { + for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회 + if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다. + return false; + } + } + return true; +} +// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다. + +//정답 3 - chaerin-dev +// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수 +const getCombinations = function (arr, selectNumber) { + const results = []; + if (selectNumber === 1) return arr.map((el) => [el]); + arr.forEach((fixed, index, origin) => { + const rest = origin.slice(index + 1); + const combinations = getCombinations(rest, selectNumber - 1); + const attached = combinations.map((el) => [fixed, ...el]); + results.push(...attached); + }); + return results; +}; + +// num이 소수인지 여부를 반환하는 함수 +function isPrime(num) { + if (num === 1) return false; + for (let i = 2; i <= Math.sqrt(num); i++) { + if (num % i === 0) return false; + } + return true; +} + +function solution(nums) { + const combinationResult = getCombinations(nums, 3); + let answer = 0; + combinationResult.forEach((e) => { + const sum = e[0] + e[1] + e[2]; + if (isPrime(sum)) answer++; + }); + return answer; +} diff --git "a/build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" "b/build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" new file mode 100644 index 0000000..1774ae6 --- /dev/null +++ "b/build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" @@ -0,0 +1,100 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(numbers) { + let answer = 0; + const numArr = numbers.split(""); + const permutationAll = []; + for (let r = 1; r <= numbers.length; r++) { + const permutationR = Permutation(numArr, r).map((arr) => + parseInt(arr.join("")) + ); + for (let i = 0; i < permutationR.length; i++) + permutationAll.push(permutationR[i]); + } + const permutationSet = [...new Set(permutationAll)]; + for (const number of permutationSet) { + if (isPrime(number)) answer += 1; + } + return answer; +} + +function Permutation(arr, r) { + const result = []; + if (r === 1) return arr.map((num) => [num]); + arr.forEach((fixed, index, org) => { + const rest = [...org.slice(0, index), ...org.slice(index + 1)]; + const permutation = Permutation(rest, r - 1); + const attached = permutation.map((numbers) => [fixed, ...numbers]); + result.push(...attached); + }); + return result; +} + +function isPrime(num) { + for (let i = 2; i <= Math.sqrt(num); i++) { + if (num % i === 0) return false; + } + return num >= 2; +} + + +//정답 2 - chaerin-dev +// 소수인지 판별하는 함수 +function isPrime(x) { + for (let i = 2; i <= Math.sqrt(x); i++) { + if (x % i === 0) return false; + } + return true; +} +function solution(n) { + // 소수의 개수를 저장할 변수 + let answer = 0; + // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해 + for (let i = 2; i <= n; i++) { + // 소수이면 소수의 개수에 1 추가 + if (isPrime(i)) answer++; + } + return answer; +} + +//정답 3 - prove-ability +// 소수 판별 로직 +function isPrime(n) { + // n 제곱근 후 올림 + for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) { + if (n % i === 0) return false; + } + return true; +} + +function solution(n) { + let count = 0; + // 1부터 n까지 반복적으로 접근 - i + for(let i = 1; i <= n; i++) { + // i 가 소수인지 확인 후 count++ + if(isPrime(i)) count++; + } + + return count; +} + +//정답 4 - jaewon1676 +function solution(n) { + let arr = []; + + // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다. + for(let i=2; i<=n; i++) { + arr[i] = i; + } + for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다. + if (arr[i] === 0) continue; + + for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다. + arr[j] = 0; + } + } + + // filter를 이용해 0이아닌 수들의 개수를 return합니다. + return arr.filter(v => v!==0).length; +} diff --git "a/build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" "b/build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" new file mode 100644 index 0000000..aa3682c --- /dev/null +++ "b/build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" @@ -0,0 +1,39 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + let answer = ''; + for (let i = 0; i < n; i++) { + answer += i % 2 === 0 ? '수' : '박'; + } + return answer; +} + +//정답 2 - chaerin-dev +function solution(n) { + // "수박"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환 + return '수박'.repeat(n).substr(0, n); +} + +//정답 3 - jaewon1676 +function solution(n) { + let str = ''; + for (let i = 0; i < n; i++) { + // 삼항 연산자와 +로 문자열을 붙여주어 추가. + i % 2 == 0 ? (str = str + '수') : (str = str + '박'); + } + return str; +} + +//정답 4 - prove-ability +function solution(n) { + let answer = ''; + answer = '수박'.repeat(n / 2); + if (n % 2 !== 0) answer += '수'; + return answer; +} + +//정답 5 - yongchanson +function solution(n) { + return '수박'.repeat(n / 2) + '수'.repeat(n % 2); +} diff --git "a/build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" "b/build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" new file mode 100644 index 0000000..f78f6bf --- /dev/null +++ "b/build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" @@ -0,0 +1,102 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + const stringToNum = [ + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + ]; + for (let i = 0; i < 10; i++) { + s = s.split(stringToNum[i]).join(i); + } + return parseInt(s); +} + +//정답 2 - codeisneverodd +function solution(s) { + var answer = 0; + let answerString = s; + const stringToNum = [ + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + ]; + for (let i = 0; i < 10; i++) { + const regex = new RegExp(stringToNum[i], "g"); + answerString = answerString.replace(regex, i); + } + answer = Number(answerString); + return answer; +} + +//정답 3 - jaewon1676 +function solution(s) { + let answer = 0; + + s = s.replace(/zero/g, 0); + s = s.replace(/one/g, 1); + s = s.replace(/two/g, 2); + s = s.replace(/three/g, 3); + s = s.replace(/four/g, 4); + s = s.replace(/five/g, 5); + s = s.replace(/six/g, 6); + s = s.replace(/seven/g, 7); + s = s.replace(/eight/g, 8); + s = s.replace(/nine/g, 9); + + answer = Number(s); + return answer; +} + +//정답 4 - chaerin-dev +function solution(s) { + s = s + .replace(/zero/g, 0) + .replace(/one/g, 1) + .replace(/two/g, 2) + .replace(/three/g, 3) + .replace(/four/g, 4) + .replace(/five/g, 5) + .replace(/six/g, 6) + .replace(/seven/g, 7) + .replace(/eight/g, 8) + .replace(/nine/g, 9); + return parseInt(s); +} + +//정답 5 - yongchanson +function solution(s) { + let en = [ + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + ]; + + for (let i = 0; i < s.length * 2; i++) { + let p = i % en.length; + s = s.replace(en[p], p); + } + return Number(s); +} diff --git "a/build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" "b/build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" new file mode 100644 index 0000000..4c6e7a3 --- /dev/null +++ "b/build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - ssi02014 + +/** + * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화 + * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 + * (테스트 케이스 11 ~ 15 100ms~200ms 차이) + */ +function solution(X, Y) { + const commons = []; + const obj = {}; + + for (const el of X) { + obj[el] = (obj[el] || 0) + 1; + } + + for (const el of Y) { + if (obj[el]) { + commons.push(el); + obj[el]--; + } + } + + commons.sort((a, b) => b - a); + + if (!commons.length) return "-1"; + else if (commons[0] === "0") return "0"; + return commons.join(""); +} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" "b/build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" new file mode 100644 index 0000000..8667845 --- /dev/null +++ "b/build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" @@ -0,0 +1,88 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s, n) { + return s + .split("") + .map((element) => { + if (element === " ") return " "; + const code = element.charCodeAt(0); + if ((code + n > 90 && code <= 90) || code + n > 122) { + return String.fromCharCode(code + n - 26); + } else { + return String.fromCharCode(code + n); + } + }) + .join(""); +} + +//정답 2 - jaewon1676 +function solution(s, n) { + return s + .split("") + .map((el) => { + if (el == " ") return el; + let tmp = el.charCodeAt(); + return el.toLowerCase().charCodeAt() + n > 122 + ? String.fromCharCode(tmp + n - 26) + : String.fromCharCode(tmp + n); + }) + .join(""); +} + +/* 문자열 -> 아스키코드 : s.charCodeAt() +아스키코드 -> 문자열 : String.fromCharCode() +풀이과정 +1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다. +2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. + 대문자 아스키코드는 65가 A, 90이 Z이다. + 소문자 아스키코드는 97이 a, 122가 z이다. +3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고 + 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다. +*/ + +//정답 3 - chaerin-dev +function solution(s, n) { + let result = ""; + for (let i = 0; i < s.length; i++) { + if (s[i] === " ") result += " "; + else { + let charCode = s.charCodeAt(i); + // 원래 대문자였는데 + if (charCode <= 90) { + charCode += n; + // 변경 후 아스키코드값이 90보다 크다면 + if (charCode > 90) charCode -= 26; + } + // 원래 소문자였는데 + else { + charCode += n; + // 변경 후 아스키코드값이 122보다 크다면 + if (charCode > 122) charCode -= 26; + } + result += String.fromCharCode(charCode); + } + } + return result; +} + + +//정답 4 - prove-ability +function solution(s, n) { + var answer = ''; + for(let i = 0, len = s.length; i < len; i++) { + if(s[i] === " ") { + answer += " "; + continue; + } + let index = s[i].charCodeAt(); + // 65 - 90 + // 97 - 122 + if(index <= 90 && index + n > 90) index -= 26; + else if (index + n > 122) index -= 26; + + answer += String.fromCharCode(index + n) + } + return answer; +} + diff --git "a/build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" "b/build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" new file mode 100644 index 0000000..466f362 --- /dev/null +++ "b/build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" @@ -0,0 +1,167 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220830) - codeisneverodd +function solution(id_list, report, k) { + const reportResult = report.reduce((a, c) => { + const [user, reported] = c.split(' '); + a[reported] = a[reported] ? a[reported].add(user) : new Set().add(user); + return a; + }, {}); + + const mailed = Object.values(reportResult) + .filter(set => set.size >= k) + .flatMap(set => [...set]); + return id_list.map(id => mailed.filter(user => user === id).length); +} + +//정답 2 - jaewon1676 +function solution(id_list, report, k) { + let answer = new Array(id_list.length).fill(0); + let report_list = {}; // 신고당한 ID + + // key, value 형식의 report_list 객체를 만든다. + id_list.map(user => { + report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체 + }); + // report_list { muzi: [], frodo: [], apeach: [], neo: [] } + + // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다. + report.map(user => { + const [user_id, report_id] = user.split(' '); + // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다. + if (!report_list[report_id].includes(user_id)) { + report_list[report_id].push(user_id); + // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다. + } + }); + for (const key in report_list) { + // report_list의 index 순회 + if (report_list[key].length >= k) { + report_list[key].map(user => { + answer[id_list.indexOf(user)] += 1; + }); + } + } + return answer; +} + +//정답 3 - prove-ability +function solution(id_list, report, k) { + // 사용자 길이의 빈 배열을 만든다 0 + var answer = new Array(id_list.length).fill(0); + // 신고된 내용 정리할 객체 선언 + const obj = {}; + // 신고된 내용 정리할 객체 사용자 아이디로 초기화 + id_list.forEach(id => { + obj[id] = new Set(); + }); + // 신고 리스트를 조회하며 신고 내용 객체에 정리 + // set.add 를 활용해 같은 사용자의 중복 신고 제거 + report.forEach(str => { + const [reporter, target] = str.split(' '); + obj[target].add(reporter); + }); + // obj value 하나씩 접근 + for (const value of Object.values(obj)) { + // 신고당한 횟수가 정지 기준에 적합하다면 + if (value.size >= k) { + // 해당 유저를 신고한 사람들 + for (let item of value) { + // 인덱스 구해서 증가 + let index = id_list.indexOf(item); + answer[index]++; + } + } + } + + return answer; +} + +//정답 4 - prove-ability +function solution(id_list, report, k) { + // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기 + var answer = Array.from({ length: id_list.length }).fill(0); + // 신고 내용 객체 초기화 - 신고된 내용 정리 + const reportObj = {}; + // 신고건 반복문으로 하나씩 접근 + for (let i = 0, len = report.length; i < len; i++) { + const [userId, reportUserId] = report[i].split(' '); + // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가 + if (reportObj[reportUserId]) { + if (!reportObj[reportUserId].includes(userId)) { + reportObj[reportUserId] = [...reportObj[reportUserId], userId]; + } + // 신고 내용 객체에 신고당한 사람이 없다면 추가 + } else reportObj[reportUserId] = [userId]; + } + // 만들어진 신고 내용 객체로 반복적으로 접근 + for (const item of Object.values(reportObj) + .filter(v => v.length >= k) + .flatMap(v => v)) { + // 인덱스로 접근해 메일 카운트 증가 + const index = id_list.findIndex(v => v === item); + answer[index]++; + } + + return answer; +} + +//정답 5 - chaerin-dev +function solution(id_list, report, k) { + // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리 + let set = new Set(report); + report = Array.from(set); + + // 1. report를 2차원배열로 변형 + // 2. 각 유저가 신고당한 횟수 cnt에 저장 + // 3. 각 유저를 신고한 유저 who에 저장 + let cnt = Array.from({ length: id_list.length }, i => 0); + let who = Array.from({ length: id_list.length }, i => []); + for (let i = 0; i < report.length; i++) { + report[i] = report[i].split(' '); + cnt[id_list.indexOf(report[i][1])]++; + who[id_list.indexOf(report[i][1])].push(report[i][0]); + } + + // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장 + let mail = Array.from({ length: id_list.length }, i => 0); + for (let i = 0; i < cnt.length; i++) { + if (cnt[i] < k) continue; + for (let j = 0; j < who[i].length; j++) { + mail[id_list.indexOf(who[i][j])]++; + } + } + return mail; +} +//정답 6(🎩 refactor 220425) - codeisneverodd +function solution(id_list, report, k) { + //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장, + //각 id를 신고한 사람 array를 reportedBy에 저장, + //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장 + //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장. + const reportSet = new Set(report); + const reportedCount = {}; //{"id": Number(count)} + const reportedBy = {}; //{"id":[]} + const mailCount = {}; //{"id":Number(count)} + + id_list.forEach(element => { + reportedCount[element] = 0; + mailCount[element] = 0; + reportedBy[element] = []; + }); + + reportSet.forEach(element => { + const [id, reported] = element.split(' '); + reportedCount[reported] += 1; + reportedBy[reported].push(id); + }); + + for (const reportedId in reportedCount) { + if (reportedCount[reportedId] >= k) { + reportedBy[reportedId].forEach(reporter => { + mailCount[reporter] += 1; + }); + } + } + return id_list.map(id => mailCount[id]); +} diff --git "a/build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" "b/build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" new file mode 100644 index 0000000..4c4e506 --- /dev/null +++ "b/build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" @@ -0,0 +1,123 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220830) - codeisneverodd +function solution(new_id) { + const newId = new_id + .toLowerCase() + .replace(/[^\w_.-]/g, '') + .replace(/[.]{2,}/g, '.') + .replace(/^[.]+/, '') + .replace(/[.]+$/, '') + .replace(/^$/, 'a') + .substring(0, 15) + .replace(/[.]+$/, ''); + + return newId.padEnd(3, newId[newId.length - 1]); +} + +//정답 2 - codeisneverodd +function solution(new_id) { + let answer = ''; + answer = new_id.toLowerCase(); // step1 + const step2 = /[^0-9a-z._-]/g; + const step3 = /[.]+/g; + const step4_1 = /^\./; + const step4_2 = /\.$/; + answer = answer.replace(step2, ''); + answer = answer.replace(step3, '.'); + answer = answer.replace(step4_1, ''); + answer = answer.replace(step4_2, ''); + answer = answer === '' ? 'a' : answer; // step5 + answer = answer.length >= 16 ? answer.slice(0, 15) : answer; //step6 + answer = answer.replace(step4_2, ''); + switch ( + answer.length // step7 + ) { + case 1: + answer = answer + answer[0] + answer[0]; + break; + case 2: + answer = answer + answer[1]; + break; + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(new_id) { + // 1 소문자로 치환 + let answer = new_id + .toLowerCase() + + // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거. + .replace(/[^a-z0-9-_.]/gi, '') + + // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환 + .replace(/[.]{2,}/gi, '.') + + // 4 마침표(.)가 처음이나 끝에 위치하면 제거 + .replace(/^[.]|[.]$/gi, ''); + + // 5 빈 문자열이면 a 대입 + if (answer === '') answer = 'a'; + + // 6 length > 15이면 그 뒤의 문자들은 제거 + if (answer.length > 15) { + answer = answer.substring(0, 15); + // 마침표(.)가 끝에 위치하면 마침표(.)제거 + answer = answer.replace(/[.]$/gi, ''); + } + + // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임 + while (answer.length < 3) { + answer += answer[answer.length - 1]; + } + return answer; +} + +//정답 4 - chaerin-dev +function solution(new_id) { + // 1단계: 모든 대문자를 소문자로 + new_id = new_id.toLowerCase(); + + // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거 + new_id = new_id.replace(/[^\w\-\.]/g, ''); + + // 3단계: 연속되는 마침표는 마침표 하나로 + new_id = new_id.replace(/\.{2,}/g, '.'); + + // 4단계: 처음이나 끝에 마침표가 있으면 제거 + new_id = new_id.replace(/^\.|\.$/, ''); + + // 5단계: new_id가 빈 문자열이면 "a" 대입 + if (new_id.length === 0) new_id = 'a'; + + // 6단계: new_id의 길이가 16자 이상이면, + // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 + // 제거 후 끝에 마침표가 있으면 제거 + if (new_id.length >= 16) new_id = new_id.slice(0, 15); + new_id = new_id.replace(/\.$/, ''); + + // 7단계: new_id의 길이가 2자 이하이면, + // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임 + let len = new_id.length; + if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len); + + return new_id; +} +//정답 5(🎩 refactor 220425) - codeisneverodd +function solution(new_id) { + let answer = new_id + .toLowerCase() //step 1 + .replace(/[^0-9a-z._-]/g, '') // step 2 + .replace(/\.+/g, '.') //step 3 + .replace(/^\.|\.$/g, '') //step 4 + .replace(/^$/, 'a') //step 5 + .slice(0, 15) + .replace(/\.$/, ''); //step 6 + // step7 + if (answer.length === 1) answer = answer[0].repeat(3); + if (answer.length === 2) answer = answer + answer[1]; + + return answer; +} diff --git "a/build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" "b/build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" new file mode 100644 index 0000000..dbf3b99 --- /dev/null +++ "b/build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" @@ -0,0 +1,79 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(N, stages) { + let stageNFailRate = []; + for (let stage = 1; stage <= N; stage++) { + const playerReached = stages.filter((player) => player >= stage).length; + const playerChallenging = stages.filter( + (player) => player === stage + ).length; + stageNFailRate.push([stage, playerChallenging / playerReached]); + } + stageNFailRate.sort((a, b) => b[1] - a[1]); + return stageNFailRate.map((stage) => stage[0]); +} + +//정답 2 - codeisneverodd +function solution(N, stages) { + var answer = []; + let failRate = new Array(N + 2).fill(0); + let playerChallenging = new Array(N + 2).fill(0); + let playerReached = new Array(N + 2).fill(0); + + for (const stage of stages) { + for (let i = 1; i <= stage; i++) playerReached[i] += 1; + playerChallenging[stage] += 1; + } + for (let i = 1; i <= N + 1; i++) + failRate[i] = + playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i]; + const rateNIndex = failRate + .slice(1, N + 1) + .map((rate, stage) => [rate, stage + 1]); + const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]); + answer = sortedRate.map((stage) => stage[1]); + return answer; +} + +//정답 3 - jaewon1676 +function solution(N, stages) { + let map = Array.from(Array(N), () => Array(2).fill(0)); + let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수 + let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율 + let count = 0; + + stages.sort(function (a, b) { + return a - b; + }); // 난이도 오름차순 정렬 + for (let i = 1; i <= N; i++) { + while (1) { + // i 스테이지의 실패율 계산 + if (stages[0] == i) { + answer[i - 1] += 1; + count += 1; + stages.shift(); + } else break; + } + rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산 + + count = 0; + + map[i - 1][0] = i; + map[i - 1][1] = rate[i - 1]; + } + map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬 + let stack = []; // 답 + for (let i = 0; i < map.length; i++) { + stack.push(map[i][0]); + } + + return stack; +} + +/* 풀이 과정 +1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다. +2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다. +3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서. +4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다. +*/ diff --git "a/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" "b/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" new file mode 100644 index 0000000..097e9e9 --- /dev/null +++ "b/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" @@ -0,0 +1,60 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(left, right) { + let answer = 0; + for (let num = left; num <= right; num++) { + answer = Number.isInteger(Math.sqrt(num)) ? answer - num : answer + num; + } + return answer; +} + +//정답 2 - codeisneverodd +function solution(left, right) { + var answer = 0; + for (let num = left; num <= right; num++) { + divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num); + } + return answer; +} + +const divisorCounter = (num) => { + let count = 0; + const sqrt = Math.sqrt(num); + for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1; + return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2; +}; + +//정답 3 - jaewon1676 +function solution(left, right) { + var answer = 0; + + for (left; left <= right; left++) { + // left의 제곱근이 정수면 약수의 개수는 홀수 + if (Number.isInteger(Math.sqrt(left))) { + answer -= left; + } else { + answer += left; + } + } + return answer; +} + +// 정답 4 - prove-bility +function getDivisorCount(i) { + let count = 0; + for(let j = 1; j <= i; j++) { + if(i % j === 0) count++; + } + return count; +} + +function solution(left, right) { + let answer = 0; + for(let i = left; i <= right; i++) { + let count = getDivisorCount(i); + if(count % 2 === 0) answer += i; + else answer -= i; + } + return answer; +} diff --git "a/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" "b/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" new file mode 100644 index 0000000..db732a8 --- /dev/null +++ "b/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" @@ -0,0 +1,69 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + let answer = 0; + for (let divisor = 1; divisor <= n; divisor++) { + if (n % divisor === 0) answer += divisor; + } + return answer; +} + +//정답 2 - yongchanson +function solution(n) { + var answer = 0; + let i; + for (i = 1; i <= Math.sqrt(n); i++) { + if (n % i == 0) { + if (i * i == n) { + //i의 제곱이 n인경우 처리 + answer += i; + } else { + answer += i; + answer += n / i; + } + } + } + + return answer; +} + +//정답 3 - chaerin-dev +function solution(n) { + let result = 0; + let sqrtN = Math.sqrt(n); + // 효율성을 위해 1부터 n의 제곱근-1까지만 순회 + for (let i = 1; i < sqrtN; i++) { + if (n % i === 0) result += i + n / i; + } + // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌 + if (Number.isInteger(sqrtN)) result += sqrtN; + return result; +} + +//정답 4 - jaewon1676 +function solution(n) { + var answer = 0; + for (let i = 1; i <= n; i++) { + if (n % i == 0) { + // n으로 i를 나눴을 때, 나머지가 0이면 약수이다. + answer += i; + } + } + return answer; +} + +// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다. +// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다. +// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다. + + +//정답 4 - prove-ability +function solution(n) { + let answer = 0; + for(let i = 1; i <= n; i++) { + if(n % i === 0) answer += i; + } + return answer; +} + diff --git "a/build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" "b/build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" new file mode 100644 index 0000000..0e5fcff --- /dev/null +++ "b/build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" @@ -0,0 +1,59 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(numbers) { + return 45 - numbers.reduce((a, b) => a + b); +} + +//정답 2 - codeisneverodd +function solution(numbers) { + var answer = 0; + for (let i = 0; i < 10; i++) { + answer += numbers.includes(i) ? 0 : i; + } + return answer; +} + +//정답 3 - yongchanson +function solution(numbers) { + var answer = -1; + + let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; + let arr_sum = 0; + let numbers_sum = 0; + + for (i = 0; i < arr.length / 2; i++) { + if (arr[i] == arr[arr.length - 1 - i]) { + arr_sum += arr[i]; + } else { + arr_sum += arr[i] + arr[arr.length - 1 - i]; + } + } + + for (i = 0; i < numbers.length; i++) { + numbers_sum += numbers[i]; + } + + answer = arr_sum - numbers_sum; + return answer; +} + +//정답 4 - prove-ability +function solution(numbers) { + var answer = 0; + + for (let i = 0; i < 10; i++) { + if (!numbers.includes(i)) answer += i; + } + + return answer; +} + +//정답 5 - chaerin-dev +function solution(numbers) { + let answer = 0; + for (let i = 0; i <= 9; i++) { + if (!numbers.includes(i)) answer += i; + } + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" "b/build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" new file mode 100644 index 0000000..c774802 --- /dev/null +++ "b/build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" @@ -0,0 +1,48 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(d, budget) { + let answer = 0; + d.sort((a, b) => a - b); + for (const department of d) { + if (budget < department) break; + answer += 1; + budget -= department; + } + return answer; +} + + +//정답 2 - prove-ability +function solution(d, budget) { + let sum = 0; + let count = 0; + // 오름차순 정렬 + d.sort((a, b) => a - b); + for(let i = 0, len = d.length; i < len; i++) { + // 작은 수 부터 하나씩 더해준다 + sum += d[i]; + // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환 + if(sum > budget) return count; + count++; + } + + return count; +} + +//정답 3 - jaewon1676 +function solution(d, budget) { + let count = 0; // 최대 물품 지원 할 수 있는 부서 수 + d.sort((a, b) => a - b) // 오름차순 정렬 + for (let i=0; i (v === participant[i] ? a + 1 : a), + 0 + ); + // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면 + // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다 + if (count > 1 && max < count) { + answer = participant[i]; + // 조건에 맞는 동명이인 수 저장 + max = count; + } + } + return answer; +} + +//완벽한 정답이 아닙니다. +//정답 4 - chaerin-dev +function solution(participant, completion) { + var answer = ""; + // 두 배열을 정렬한다! + participant.sort(); + completion.sort(); + // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!! + // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로 + // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만 + // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음! + for (let i = 0; i < participant.length; i++) { + if (participant[i] != completion[i]) { + answer = participant[i]; + break; + } + } + return answer; +} diff --git "a/build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" "b/build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" new file mode 100644 index 0000000..59dc770 --- /dev/null +++ "b/build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" @@ -0,0 +1,69 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(absolutes, signs) { + return absolutes.reduce( + (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1), + 0 + ); +} + +//정답 2 - codeisneverod +function solution(absolutes, signs) { + var answer = 0; + for (let i = 0; i < absolutes.length; i++) { + answer += signs[i] ? absolutes[i] : -1 * absolutes[i]; + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(absolutes, signs) { + var answer = 0; + for (var i = 0; i < absolutes.length; i++) { + if (signs[i] === false) { + answer = answer - absolutes[i]; + } else { + answer = answer + absolutes[i]; + } + } + + return answer; +} + +// 정답 4 - prove-ability +function solution(absolutes, signs) { + var answer = 0; + + for (let i = 0, len = absolutes.length; i < len; i++) { + if (!signs[i]) answer += absolutes[i] * -1; + else answer += absolutes[i]; + } + + return answer; +} + +// 정답 5 - prove-ability +function solution(absolutes, signs) { + let answer = 0; + absolutes.forEach((absolute, i) => { + if(!signs[i]) absolute *= -1; + answer += absolute; + }) + return answer; +} + +// 정답 6 - chaerin-dev +function solution(absolutes, signs) { + // 연산 결과를 저장할 변수 + let result = 0; + // signs의 각 요소에 대해 + signs.forEach((e, i) => { + // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌 + if (e) result += absolutes[i]; + // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌 + else result -= absolutes[i]; + }); + // result 반환 + return result; +} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" "b/build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" new file mode 100644 index 0000000..565d4f4 --- /dev/null +++ "b/build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" @@ -0,0 +1,87 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + return s + .split(" ") + .map((word) => + word + .split("") + .map((char, index) => + index % 2 === 0 + ? word[index].toUpperCase() + : word[index].toLowerCase() + ) + .join("") + ) + .join(" "); +} + +//정답 2 - chaerin-dev +// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..! +function solution(s) { + let result = ""; + let flag = true; + for (let i = 0; i < s.length; i++) { + if (s[i] === " ") { + flag = false; + result += s[i]; + } else if (flag) { + result += s[i].toUpperCase(); + } else { + result += s[i].toLowerCase(); + } + flag = !flag; + } + return result; +} + +//정답 3 - jaewon1676 +function solution(s) { + return s + .split(" ") + .map((el) => + el + .split("") + .map((el, index) => + index % 2 == 0 ? el.toUpperCase() : el.toLowerCase() + ) + .join("") + ) + .join(" "); +} + +/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ] + +.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 +[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]] + +.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()) +//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다! +//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다. +[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]] + +.join('') 작은 배열들을 합쳐줍니다. +['TrY', 'HeLlO', 'WoRlD'] + +.join(' ') 큰 배열들을 합쳐줍니다. +"TrY HeLlO WoRlD" + +대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 +문자열을 연습하는데 좋은 문제입니다. +*/ + + +//정답 4 - prove-ability +function solution(s) { + let answer = ''; + s.split(" ").forEach((word) => { + for(let i = 0, len = word.length; i < len; i++) { + if(i % 2 === 0) answer+=word[i].toUpperCase(); + else answer+=word[i].toLowerCase(); + } + answer += " "; + }) + answer = answer.slice(0, answer.length - 1) + return answer; +} diff --git "a/build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" "b/build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" new file mode 100644 index 0000000..920c207 --- /dev/null +++ "b/build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" @@ -0,0 +1,39 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + return n + .toString() + .split("") + .map((x) => parseInt(x)) + .reduce((acc, curr) => acc + curr, 0); +} + +//정답 2 - chaerin-dev +function solution(n) { + // 숫자 -> 문자열 -> 배열 -> 각 요소를 정수로 변환한 후 더한 누적 결과값 반환 + return String(n) + .split("") + .reduce((acc, item) => (acc += parseInt(item)), 0); +} + +//정답 3 - chaerin-dev +function solution(n) { + let result = 0; + while (n > 0) { + result += n % 10; + n = Math.floor(n / 10); + } + return result; +} + +// 정답 4 - prove-ability +function solution(n) { + var answer = 0; + n.toString() + .split("") + .forEach((v) => { + answer += parseInt(v); + }); + return answer; +} diff --git "a/build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" "b/build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" new file mode 100644 index 0000000..a6eb8bb --- /dev/null +++ "b/build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" @@ -0,0 +1,66 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + return n + .toString() + .split("") + .reverse() + .map((x) => parseInt(x)); +} + +//정답 2 - chaerin-dev +function solution(n) { + // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환 + return String(n) + .split("") + .reverse() + .map((item) => parseInt(item)); +} + +//정답 3 - jaewon1676 +function solution(n) { + var answer = []; + // 정수형 => 문자형 => 하나씩 잘라서 뒤집어서 모아준다. + n = n.toString().split("").reverse().join(""); + for (let i = 0; i < n.length; i++) { + answer.push(parseInt(n[i])); // n은 지금 문자형이기때문에 Push 하기전에 정수형으로 바꿔줌 + // answer.push(n[i]) 로 해주면 현재 n[i]는 문자형이기때문에 결과는 ["5","4","3","2","1"] 가 됩니다. + // answer(parseInt(n[i])) 로 해준다면 n[i]는 문자형 => 정수형으로 변하기 때문에 결과는 [5, 4, 3, 2, 1] 가 됩니다. + // 문자형과 정수형의 차이는 숫자에 큰 따옴표가 있느냐 없느냐의 차이입니다. + } + return answer; +} + +//정답 4 - jaewon1676 +function solution(n) { + return (n = n + .toString() + .split("") + .reverse() + .map((o) => (o = parseInt(o)))); +} + +// 정답 5 - prove-ability +function solution(n) { + // 1. 문자열 변환 + // 2. 배열로 변환 + // 3. 배열 반전 + // 4. 정수로 변환 + return n + .toString() + .split("") + .reverse() + .map((v) => parseInt(v)); +} + +//정답 6 - yongchanson +function solution(n) { + let answer = []; + let string = n.toString(); + for (let i = string.length - 1; i >= 0; i--) { + let slice = string.substr(i, 1) * 1; + answer.push(slice); + } + return answer; +} diff --git "a/build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" "b/build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" new file mode 100644 index 0000000..4b8b08d --- /dev/null +++ "b/build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" @@ -0,0 +1,28 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + return parseInt( + n + .toString() + .split("") + .sort((a, b) => b - a) + .join("") + ); +} + +//정답 2 - chaerin-dev +function solution(n) { + // 정수 -> 문자열 -> 배열 + let arrN = String(n).split(""); + // 배열 내림차순 정렬 + arrN.sort((a, b) => b - a); + // 배열 -> 문자열 -> 정수 + return parseInt(arrN.join("")); +} + +//정답 3 - prove-ability +function solution(n) { + return parseInt(n.toString().split("").sort((a, b) => b - a).join(""), 10); +} + diff --git "a/build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" "b/build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" new file mode 100644 index 0000000..95c9d82 --- /dev/null +++ "b/build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" @@ -0,0 +1,39 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n) { + return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1; +} + +//정답 2 - chaerin-dev +function solution(n) { + // n의 제곱근값을 x에 저장 + let x = Math.sqrt(n); + // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환 + return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1; +} + +//정답 3 - prove-ability +function solution(n) { + // n의 제곱근을 x 초기화 + const x = Math.sqrt(n); + // 양의 정수라면 x + 1 제곱 반환 + if(Number.isInteger(x)) return Math.pow(x + 1, 2) + // 아니라면 -1 반환 + return -1; +} + +//정답 4 - jaewon1676 +function solution(n) { + let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인 + if (s ** 2 === n) return ((s+1) ** 2) + + return -1; +} + +//정답 5 - yongchanson +function solution(n) { + const sqrt = Math.sqrt(n); + //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수 + return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1; +} diff --git "a/build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" "b/build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" new file mode 100644 index 0000000..b979bc2 --- /dev/null +++ "b/build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" @@ -0,0 +1,68 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(arr) { + const index = arr.indexOf(Math.min(...arr)); + arr.splice(index, 1); + return arr.length === 0 ? [-1] : arr; +} + +//정답 2 - jaewon1676 +function solution(arr) { + var answer = []; + + let min = Math.min(...arr); + while (1) { + for (let i = 0; i < arr.length; i++) { + if (min == arr[i]) { + arr.splice(i, 1); + if (arr.length == 0) { + return [-1]; + } else { + return arr; + } + } + } + } + return -1; +} + +/* 풀이과정 +1. 배열의 최솟값을 min 변수에 담아줍니다. +2. 배열을 순회하며 최솟값을 찾아 splice 메서드를 사용해 최솟값의 자리만 제거해줍니다. +3. 최솟값 제거 후 배열 크기가 0이면 -1, 그렇지 않으면 배열 그대로 반환합니다. */ + +//정답 3 - jaewon1676 +function solution(arr) { + arr.splice(arr.indexOf(Math.min(...arr)), 1); + if (arr.length < 1) return [-1]; + return arr; +} + +/* 풀이과정 arr [4,3,2,1] 일경우 +Math.min(...arr)은 1 +arr.indexOf(1), 1이 있는 index가 3이므로 3 반환. +arr.splice(3, 1) arr의 3번째 index만 제거 해준다. +arr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */ + +//정답 4 - chaerin-dev +function solution(arr) { + // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제 + arr.splice(arr.indexOf(Math.min(...arr)), 1); + // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환 + return arr.length ? arr : [-1]; +} + +//정답 3 - prove-ability +function solution(arr) { + // 최솟값 찾기 + const min = Math.min(...arr); + // arr 중 min 과 같은 요소의 인덱스 제거 + arr.splice( + arr.findIndex((num) => num === min), + 1 + ); + // 만약 arr 가 비어있다면 [-1] 반환 + if (arr.length === 0) return [-1]; + return arr; +} diff --git "a/build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" "b/build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" new file mode 100644 index 0000000..4562ac1 --- /dev/null +++ "b/build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" @@ -0,0 +1,54 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - chaerin-dev +process.stdin.setEncoding("utf8"); +process.stdin.on("data", (data) => { + const n = data.split(" "); + const a = Number(n[0]), + b = Number(n[1]); + // 정답을 저장할 문자열 answer + answer = ""; + // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복 + for (let i = 0; i < b; i++) { + // 가로 길이만큼 문자열에 별 더해주기 + for (let j = 0; j < a; j++) answer += "*"; + // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기 + answer += "\n"; + } + // 정답 출력 + console.log(answer); +}); + +//정답 2 - prove-ability +process.stdin.setEncoding('utf8'); +process.stdin.on('data', data => { + const nums = data.split(" "); + const n = Number(nums[0]), m = Number(nums[1]); + + let result = ""; + // 2차원으로 접근 + // 세로 길이만큼 반복 + for(let i = 0; i < m; i++) { + // 가로 길이만큼 별 더하기 + for(let j = 0; j < n; j++) { + result += "*"; + } + // 가로가 끝나면 줄내림 + result += "\n"; + } + console.log(result) +}); + +//정답 3 - yongchanson +process.stdin.setEncoding("utf8"); +process.stdin.on("data", (data) => { + const n = data.split(" "); + const a = Number(n[0]), + b = Number(n[1]); + console.log(("*".repeat(a) + `\n`).repeat(b)); +}); +/* +<풀이과정> +repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count); +'*'.repeat(a) : *를 a만큼 반복한다. +*/ diff --git "a/build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" "b/build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" new file mode 100644 index 0000000..377141c --- /dev/null +++ "b/build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" @@ -0,0 +1,29 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(num) { + return num % 2 === 0 ? "Even" : "Odd"; +} + +//정답 2 - chaerin-dev +function solution(num) { + return num % 2 == 0 ? "Even" : "Odd"; +} + +//정답 3 - jaewon1676 +function solution(num) { + let answer; + num % 2 == 0 ? (answer = "Even") : (answer = "Odd"); + // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환. + return answer; +} + +//정답 4 - prove-ability +function solution(num) { + return num % 2 === 0 ? "Even" : "Odd"; +} + +//정답 5 - yongchanson +function solution(num) { + return num % 2 ? "Odd" : "Even"; +} diff --git "a/build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" "b/build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" new file mode 100644 index 0000000..5baa4f6 --- /dev/null +++ "b/build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" @@ -0,0 +1,127 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n, lost, reserve) { + let answer = 0; + let studentClothes = new Array(n + 2).fill(1); + for (const student of reserve) studentClothes[student] += 1; + for (const student of lost) studentClothes[student] -= 1; + for (let i = 1; i < n + 1; i++) { + if (studentClothes[i] === 0) { + if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) { + if (studentClothes[i - 1] === 2) { + studentClothes[i - 1] -= 1; + studentClothes[i] += 1; + } else { + studentClothes[i + 1] -= 1; + studentClothes[i] += 1; + } + } + } + } + for (const student of studentClothes) { + answer += student > 0 ? 1 : 0; + } + answer -= 2; + return answer; +} + +//정답 2 - prove-ability +function solution(n, lost, reserve) { + // students 초기화 - 학생들은 체육복 개수 1로 초기화 + let students = Array.from({ length: n }).fill(1); + + // 읽어버린 학생 개수 반영 + lost.forEach((target) => { + students[target - 1]--; + }); + + // 여별 체육복 개수 반영 + reserve.forEach((target) => { + students[target - 1]++; + }); + + // 학생들 순차적으로 접근 + for (let i = 0, len = students.length; i < len; i++) { + // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue + if (students[i] === 0 || students[i] === 1) continue; + // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 + if (i !== 0 && students[i - 1] === 0) { + // 이전 학생 증가 + students[i - 1]++; + // 자신은 대여해줬으니 감소 + students[i]--; + } + // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 + if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) { + // 다음 학생 증가 + students[i + 1]++; + // 자신은 대여해줬으니 감소 + students[i]--; + } + } + // 체육복 1개 이상을 가진 학생들의 수 반환 + return students.filter((v) => v >= 1).length; +} + +//정답 3 - jaewon1676 +function solution(n, lost, reserve) { + let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다 + let cnt = 0; + for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복 + answer[reserve[i]-1] += 1 + } + for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1 + answer[lost[i]-1] -= 1 + } + for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다. + if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){ + answer[i] = 1 + answer[i+1] = 1 + } + } + for(let i = 0; i < answer.length; i++){ + (answer[i] >= 1 ? cnt += 1 : null) + } + return cnt + } + //그리디 + // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다. + // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. + +//정답 4 - chaerin-dev +function solution(n, lost, reserve) { + // 학생들의 체육복 개수를 저장할 배열 students + // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정 + // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음 + const students = Array.from({ length: n + 1 }, () => 1); + + // 체육복 분실/여분 정보 students 배열에 반영 + lost.forEach((lostStudent) => students[lostStudent]--); + reserve.forEach((reserveStudent) => students[reserveStudent]++); + + // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt + let cnt = 0; + students.forEach((student, i) => { + // 현재 인덱스의 학생이 체육복이 없다면 + if (student === 0) { + // 바로 앞 학생이 체육복 여분이 있다면 + if (students[i - 1] === 2) { + // 바로 앞 학생에게 체육복 빌리기 + students[i - 1]--; + student++; + } + // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면 + else if (students[i + 1] === 2) { + // 바로 뒤 학생에게 체육복 빌리기 + students[i + 1]--; + student++; + } + // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음 + else cnt++; + } + }); + + // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수 + return n - cnt; +} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" "b/build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" new file mode 100644 index 0000000..2a1955e --- /dev/null +++ "b/build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" @@ -0,0 +1,33 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(n, m) { + const gcd = greatestCommonDivisor(n, m); + return [gcd, (n * m) / gcd]; +} + +const greatestCommonDivisor = (a, b) => { + if (b === 0) return a; + else return greatestCommonDivisor(b, a % b); +}; + +//정답 2 - chaerin-dev +function solution(n, m) { + // 최대공약수 구하기 + let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m)); + // 최소공배수 구하기 + let lcm = (n, m) => (n * m) / gcd(n, m); + // 결과 출력 + return [gcd(n, m), lcm(n, m)]; +} + +//정답 3 - yongchanson +function solution(a, b) { + let gcd = 0; + for (let i = 1; i <= Math.min(a, b); i++) { + if ((a % i) + (b % i) === 0) { + gcd = i; + } + } + return [gcd, (a / gcd) * b]; +} diff --git "a/build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" "b/build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" new file mode 100644 index 0000000..6f0a7d4 --- /dev/null +++ "b/build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" @@ -0,0 +1,32 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220830) - codeisneverodd +function solution(sizes) { + const maxWidth = Math.max(...sizes.map(card => Math.min(...card))); + const maxHeight = Math.max(...sizes.map(card => Math.max(...card))); + return maxWidth * maxHeight; +} + +// 정답 2 - prove-ability +function solution(sizes) { + // 가로, 세로 중 큰 값을 가로 길이로 변경(스압) + sizes.forEach(([width, height], index) => { + if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]]; + }); + + // 가로, 세로 각각 큰 값 추출 + const widthMax = Math.max(...sizes.map(v => v[0])); + const widthHeight = Math.max(...sizes.map(v => v[1])); + + return widthMax * widthHeight; +} +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(sizes) { + for (let card of sizes) { + if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]]; + } + + const maxWidth = Math.max(...sizes.map(card => card[0])); + const maxHeight = Math.max(...sizes.map(card => card[1])); + return maxWidth * maxHeight; +} diff --git "a/build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" "b/build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" new file mode 100644 index 0000000..27f96d5 --- /dev/null +++ "b/build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" @@ -0,0 +1,75 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(num) { + let answer = 0; + while (answer <= 500) { + if (num === 1) return answer; + num = num % 2 === 0 ? num / 2 : num * 3 + 1; + answer += 1; + } + return -1; +} + +//정답 2 - chaerin-dev +function solution(num) { + // 작업을 반복한 횟수를 저장할 변수 + let cnt = 0; + // num이 1이 되면 반복 종료 + while (num > 1) { + // 작업을 500번 반복해도 1이 되지 않으면 -1 반환 + if (cnt == 500) return -1; + // 작업 반복 횟수 증가 + cnt++; + // 입력된 수가 짝수이면 2로 나누기 + if (num % 2 == 0) num /= 2; + // 입력된 수가 홀수이면 3을 곱하고 1을 더하기 + else { + num *= 3; + num++; + } + } + // 작업을 반복한 횟수 반환 + return cnt; +} + +//정답 3 - jaewon1676 +function solution(num) { + var answer = 0; + // num이 1이 아니고, answer이 500이 아니면 진행. + // 두 가지 조건중 하나라도 맞지 않으면 while문 종료. + while (num != 1 && answer != 500) { + //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다. + num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1); + answer++; + } + return num == 1 ? answer : -1; +} + +//정답 4 - prove-ability +function solution(num) { + let count = 0; + + // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. + while (num !== 1) { + // 입력된 수가 짝수라면 2로 나눕니다. + if (num % 2 === 0) num /= 2; + // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. + else num = num * 3 + 1; + count++; + // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요 + if (count > 500) return -1; + } + + return count; +} + +//정답 5 - yongchanson +function solution(num) { + let count = 0; + while (num !== 1) { + if (count++ === 500) return -1; + num = num % 2 ? num * 3 + 1 : num / 2; + } + return count; +} diff --git "a/build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" "b/build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" new file mode 100644 index 0000000..efdcfcc --- /dev/null +++ "b/build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" @@ -0,0 +1,84 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(board, moves) { + let answer = 0; + const length = board.length + let basket = [] + moves.forEach(move => { + for (let i = 0; i < length; i++) { + const item = board[i][move - 1] + if (item !== 0) { + if (basket[basket.length - 1] !== item) { + basket.push(item) + } else { + basket.pop() + answer += 2 + } + board[i][move - 1] = 0 + break + } + } + }) + + return answer; +} + +//정답 2 - jaewon1676 +function solution(board, moves) { + var answer = 0; // 인형을 터뜨린 횟수 + let basket = []; // 바구니 + let crane = 0; // 크레인의 행의 위치 + for (let i = 0; i < moves.length; i++) { + crane = moves[i] - 1; // crane = 0 + for (let j = 0; j < board.length; j++) { + if (board[j][crane] == 0) + else if (board[j][crane] != 0) { + basket.push(board[j][crane]) + board[j][crane] = 0 + if (basket[basket.length - 1] == basket[basket.length - 2]) { + basket.pop(); + basket.pop(); + answer += 2; + } + break; + } + } + } + + return answer; +} + +/* 풀이 과정 +1. 입력받은 moves의 length만큼 for문을 돌린다. +2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다. +3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다. +4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */ + +//정답 3 - chaerin-dev +function solution(board, moves) { + let n = board.length; + + // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경 + board = board.flat(); + let rotatedBoard = Array.from({ length: n }, (i) => []); + for (let i = 0; i < board.length; i++) { + if (board[i]) rotatedBoard[i % n].push(board[i]); + } + + // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기 + let stack = []; + let cnt = 0; + for (let move of moves) { + let doll = rotatedBoard[move - 1].shift(); + if (doll === undefined) continue; + if (stack[stack.length - 1] === doll) { + stack.pop(); + cnt += 2; + } else { + stack.push(doll); + } + } + + return cnt; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" "b/build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" similarity index 76% rename from "build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" rename to "build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" index 1662686..00dc63c 100644 --- "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260/chaerin-dev.js" +++ "b/build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" @@ -1,3 +1,42 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220830) - codeisneverodd +function solution(numbers, hand) { + let [l, r] = [10, 12]; + const moveL = n => { + l = n; + return 'L'; + }; + + const moveR = n => { + r = n; + return 'R'; + }; + return numbers + .map(n => { + if (n === 0) n = 11; + const to = n => { + const numLocation = numToLocation(n); + const lDistance = distanceBtwLocation(numToLocation(l), numLocation); + const rDistance = distanceBtwLocation(numToLocation(r), numLocation); + if (lDistance < rDistance) return moveL(n); + if (rDistance > lDistance) return moveR(n); + return hand === 'left' ? moveL(n) : moveR(n); + }; + return num % 3 === 1 ? leftTo(num) : num % 3 === 0 ? rightTo(num) : to(num); + }) + .join(''); +} + +function numToLocation(num) { + return [Math.floor((num - 1) / 3), (num - 1) % 3]; +} + +function distanceBtwLocation(a, b) { + return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]); +} + +//정답 2 - chaerin-dev function solution(numbers, hand) { // 키패드를 4행 3열의 이차원 배열이라고 생각 diff --git "a/build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" "b/build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" new file mode 100644 index 0000000..e613264 --- /dev/null +++ "b/build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" @@ -0,0 +1,32 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(arr) { + return arr.reduce((acc, curr) => acc + curr) / arr.length; +} + +//정답 2 - jaewon1676 +function solution(arr) { + var answer = 0; + for (var i = 0; i < arr.length; i++) { + answer += arr[i]; + } + return answer / arr.length; +} + +//정답 3 - chaerin-dev +function solution(arr) { + // arr의 모든 요소를 sum에 더힘 + let sum = arr.reduce((sum, e) => sum + e); + // sum을 arr의 요소의 갯수로 나눈 후 반환 + return sum / arr.length; +} + +// 정답 4 - prove-ability +function solution(arr) { + var answer = 0; + arr.forEach((num) => { + answer += num; + }); + return answer / arr.length; +} diff --git "a/build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" "b/build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" new file mode 100644 index 0000000..c99d311 --- /dev/null +++ "b/build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" @@ -0,0 +1,59 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(nums) { + const numLen = nums.length; + const setLen = [...new Set(nums)].length; + return numLen / 2 >= setLen ? setLen : numLen / 2; +} + +//정답 2 - jaewon1676 +function solution(nums) { + let max = nums.length / 2; // N / 2 + let set = [...new Set(nums)]; // 중복을 없앤다. + return set.length > max ? max : set.length; +} + +/* 풀이 과정 +1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다. +2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다. +3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 + 두가지 경우의 수로 좁혀진다. */ + +// 정답 3 - prove-ability +function solution(nums) { + var answer = 0; + // set 을 사용해 중복 제거 + const set = new Set(); + nums.forEach((num) => { + set.add(num); + }); + // set 의 사이즈가 N/2 보다 크다면 N/2 반환 + // 그렇지 않다면 set size 반환 + if (set.size > nums.length / 2) answer = nums.length / 2; + else answer = set.size; + + return answer; +} + +// 정답 4 - yongchanson +function solution(nums) { + const unique = nums.filter((element, index) => { + return nums.indexOf(element) === index; + }); + + return unique.length > nums.length / 2 ? nums.length / 2 : unique.length; +} + +//정답 5 - chaerin-dev +function solution(nums) { + // 가질 수 있는 폰켓몬의 수 + const getCnt = nums.length / 2; + // 폰켓몬 종류의 수 + const setSize = new Set(nums).size; + // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면 + // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음 + // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면 + // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수 + return setSize > getCnt ? getCnt : setSize; +} diff --git "a/build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" "b/build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" new file mode 100644 index 0000000..d1b0ad8 --- /dev/null +++ "b/build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" @@ -0,0 +1,50 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(x) { + const sum = x + .toString() + .split("") + .map((x) => parseInt(x)) + .reduce((acc, curr) => acc + curr); + return x % sum === 0; +} + +//정답 2 - chaerin-dev +function solution(x) { + // x의 각 자리에 접근하기 위해 x를 문자열로 변환 + let x_str = x.toString(); + // 각 자릿수의 합을 저장할 변수 + let sum_of_digits = 0; + // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌 + for (let i = 0; i < x_str.length; i++) { + sum_of_digits += Number(x_str[i]); + } + // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환 + return x % sum_of_digits == 0; +} + +//정답 3 - jaewon1676 +function solution(x) { + let sum = 0; + let arr = String(x).split(""); // 숫자를 하나씩 분리한다. + + for (var i = 0; i < arr.length; i++) { + sum += Number(arr[i]); // 각 숫자를 더해준다. + } + + return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수 +} + +//정답 4 - prove-ability +function solution(x) { + var answer = true; + // 모든 자릿수의 합을 구한다 + const sum = x + .toString() + .split("") + .reduce((acc, cur) => acc + parseInt(cur, 10), 0); + // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환 + if (x % sum !== 0) return false; + return answer; +} diff --git "a/build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" "b/build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" new file mode 100644 index 0000000..0d5e21a --- /dev/null +++ "b/build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" @@ -0,0 +1,22 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(phone_number) { + return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); +} + +//정답 2 - chaerin-dev +function solution(phone_number) { + // "*"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과 + // phone_number의 -4인덱스부터 끝까지 추출한 문자열을 + // 이어붙인 후 반환 + return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); +} + +// 정답 3 - prove-ability +function solution(phone_number) { + var answer = ""; + answer += "*".repeat(phone_number.length - 4); + answer += phone_number.slice(phone_number.length - 4, phone_number.length); + return answer; +} diff --git "a/build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" "b/build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" new file mode 100644 index 0000000..92ce3ff --- /dev/null +++ "b/build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" @@ -0,0 +1,50 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(arr1, arr2) { + const answer = []; + arr1.forEach((row, rowIndex) => { + answer.push(row.map((col, colIndex) => col + arr2[rowIndex][colIndex])); + }); + return answer; +} + +//정답 2 - codeisneverodd +function solution(arr1, arr2) { + var answer = new Array(arr1.length); + for (let i = 0; i < arr1.length; i++) { + answer[i] = new Array(arr1[0].length); + } + for (let row = 0; row < answer.length; row++) { + for (let col = 0; col < answer[0].length; col++) { + answer[row][col] = arr1[row][col] + arr2[row][col]; + } + } + return answer; +} + +//정답 3 - chaerin-dev +function solution(arr1, arr2) { + var answer = []; + for (let i = 0; i < arr1.length; i++) { + let ans_row = []; + for (let j = 0; j < arr1[0].length; j++) { + ans_row.push(arr1[i][j] + arr2[i][j]); + } + answer.push(ans_row); + } + return answer; +} + +//정답 4 - yongchanson +function solution(A, B) { + let answer = []; + + for (let i = 0; i < A.length; i++) { + answer[i] = []; + for (let j = 0; j < A[0].length; j++) { + answer[i][j] = A[i][j] + B[i][j]; + } + } + return answer; +} diff --git "a/build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" "b/build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" new file mode 100644 index 0000000..5bf2450 --- /dev/null +++ "b/build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" @@ -0,0 +1,62 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + var answer = ''; + const oneTwoFour = ['4', '1', '2'] + while (n > 0) { + const remainder = n % 3 + answer = oneTwoFour[remainder] + answer; + n = Math.floor((n - 1) / 3) //나누어떨어지지 않을 때에도 -1해도 상관없음 + } + return answer; +} + +//정답 2 - codeisneverodd +function solution(n) { + var answer = ''; + const oneTwoFour = ['4', '1', '2'] + while (n > 0) { + const remainder = n % 3 + answer = oneTwoFour[remainder] + answer; + if (remainder === 0) { + n = Math.floor((n - 1) / 3) + } else { + n = Math.floor(n / 3) + } + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(n) { + const number = [ 4, 1, 2]; + let answer = ""; + + while(n){ // + answer = number[n%3] + answer; + n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3); + } + + return answer +} + +//정답 4- RyanDeclan +// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용 +// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드 +let result = ""; +function solution(n) { + let remainder = n % 3; + let quotient = Math.floor(n / 3) + if(!remainder){ + quotient = Math.floor(n / 3) - 1; + remainder = 3 + } + result += remainder; + if( quotient <= 3){ + if(quotient)result += quotient + result = result.replace(/["3"]/g,"4") + return result.split("").reverse().join("") + } + return solution(quotient); +} diff --git "a/build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" "b/build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" similarity index 79% rename from "build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" rename to "build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" index bf5be3f..aeacf60 100644 --- "a/build/solutions/level-3/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" +++ "b/build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" @@ -1,3 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - jaewon1676 function solution(n) { let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력, if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다. diff --git "a/build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" "b/build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" new file mode 100644 index 0000000..425f875 --- /dev/null +++ "b/build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" @@ -0,0 +1,17 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - le2sky +function solution(numbers) { + const answer = []; + numbers.forEach((num) => { + if (num % 2 == 0) answer.push(num + 1); + else { + let binary = ["0", ...num.toString(2)]; + let last = binary.lastIndexOf("0"); + binary[last] = "1"; + binary[last + 1] = "0"; + answer.push(parseInt(binary.join(""), 2)); + } + }); + return answer; +} diff --git "a/build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" "b/build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" new file mode 100644 index 0000000..9d2fe52 --- /dev/null +++ "b/build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" @@ -0,0 +1,18 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(n) { + if (n % 2 !== 0) return 0; + + const getCount = n => { + const k = n / 2; + const count = [3, 11, ...Array(k - 2)]; + const divider = 1000000007; + for (let i = 2; i < k; i++) { + count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider; + } + return count[count.length - 1]; + }; + + return getCount(n); +} diff --git a/build/oldSols/level-2/H-Index&42747&.js b/build/oldSols/level-2/H-Index&42747&.js new file mode 100644 index 0000000..1af72bc --- /dev/null +++ b/build/oldSols/level-2/H-Index&42747&.js @@ -0,0 +1,37 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(citations) { + var answer = 0; + citations.sort((a, b) => b - a) + let h = 0 + while (h + 1 <= citations[h]) h++ + answer = h + return answer; +} + +//정답 2 - codeisneverodd +function solution(citations) { + var answer = 0; + let h = 0 + let length = 0 + while (length >= h) { + h++ + length = citations.filter(citation => citation >= h).length + } + answer = h - 1 + return answer; +} + +//정답 3 - jaewon1676 +function solution(citations) { + var answer = 0; + citations.sort((a,b)=>(b-a)) + + for(var i=0; i word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ') + //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다. + return answer; +} + +//정답 2 - jaewon1676 +function solution(s) { + s = s.split(' ').map(el => el.split('').map((el, index) => + index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ') + return s; +} +// 문자열을 연습하기에 좋은 문제입니다. + +// s.split(' ') // 띄어쓰기를 기준으로 나눕니다. +// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 +// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase()) +// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. +// .join('') 작은 배열들을 합쳐줍니다. +// .join(' ') 큰 배열들을 합쳐줍니다. + +//정답 3 - yongchanson +function solution(s) { + let answer = []; + s = s.split(" "); + + for (let i = 0; i < s.length; i++) { + answer.push( + s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase() + ); + } + return answer.join(" "); +} + +//정답 4 - RyanDeclan + +function solution(s) { + return s.toLowerCase().split(" ").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : "").join(" "); +} + +// 이 문제에서 제일 핵심은 "공백문자가 연속해서 나올 수 있습니다." 입니다. 이 부분을 꼭 고려하셔야합니다. +// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다. +// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. +//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다. diff --git a/build/solutions/level-3/N-Queen/codeisneverodd.js b/build/oldSols/level-2/N-Queen&12952&.js similarity index 93% rename from build/solutions/level-3/N-Queen/codeisneverodd.js rename to build/oldSols/level-2/N-Queen&12952&.js index 425ebc0..8d36ad5 100644 --- a/build/solutions/level-3/N-Queen/codeisneverodd.js +++ b/build/oldSols/level-2/N-Queen&12952&.js @@ -1,3 +1,6 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd function solution(n) { /* 1. 0번째 행에 0번째 queen을 놓는다. diff --git "a/build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" "b/build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" new file mode 100644 index 0000000..239fc80 --- /dev/null +++ "b/build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" @@ -0,0 +1,21 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(arr) { + var answer = 0; + answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1) + return answer; +} + +function leastCommonMultiple(a, b) { + return a * b / greatestCommonDivisor(a, b) +} + +function greatestCommonDivisor(a, b) { + while (b > 0) { + let r = a % b; + a = b; + b = r; + } + return a; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" "b/build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" new file mode 100644 index 0000000..3636716 --- /dev/null +++ "b/build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" @@ -0,0 +1,78 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(str1, str2) { + var answer = 0; + let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2) + const union = new Set([...compare1, ...compare2]) + let multiIntersectionLen = 0, multiUnionLen = 0 + for (const slice of union) { + const compare1Count = compare1.filter(x => x === slice).length, + compare2Count = compare2.filter(x => x === slice).length + multiIntersectionLen += Math.min(compare1Count, compare2Count) + multiUnionLen += Math.max(compare1Count, compare2Count) + } + answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536) + return answer; +} + +function verifiedSlices(str) { + const onlyAlphabet = /[a-zA-Z]{2}/ + let result = [] + for (let i = 0; i < str.length - 1; i++) { + const slice = str.slice(i, i + 2) + if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase()) + } + return result +} + +//정답 2 - jaewon1676 +function solution(str1, str2) { + + str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌. + str2 = str2.toUpperCase(); + let arr1 = new Array() // 빈 객체를 만들어줌. + let arr2 = new Array() + + for (var i = 0; i < str1.length - 1; i++) { + let tmp = str1.substr(i, 2) // i부터 2개 ( i, i+1 ) + if (tmp.search(/[^A-Z]/g) >= 0) { + // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) + // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환. + continue + } + arr1.push(tmp) + } + + for (var i = 0; i < str2.length - 1; i++) { + let tmp = str2.substr(i, 2) + if (tmp.search(/[^A-Z]/g) >= 0) { + continue + } + arr2.push(tmp) + } + arr1.sort() + arr2.sort() + var a = [] // 중복포함, 교집합 배열 + var b = [] // 중복포함, 합집합 배열 + + for (var i = 0; i < arr2.length; i++) { + if (arr1.indexOf(arr2[i]) >= 0) { + // arr1 객체에 arr2[i]과 같은 값이 있는지 확인. + // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. + a.push(arr1.splice(arr1.indexOf(arr2[i]), 1)) + } + // 교집합이 성립되지 않으면 실행. + b.push(arr2[i]) + } + + for (var i = 0; i < arr1.length; i++) { + b.push(arr1[i]) + } + + // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함 + if (b.length === 0) return 65536 + if (a.length === 0) return 0 + + return Math.floor((a.length / b.length) * 65536) +} diff --git "a/build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" "b/build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" new file mode 100644 index 0000000..ece168f --- /dev/null +++ "b/build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" @@ -0,0 +1,58 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(cacheSize, cities) { + var answer = 0; + let cache = [] + if (cacheSize === 0) return 5 * cities.length + for (const city of cities) { + const cityLC = city.toLowerCase() + if (cache.includes(cityLC)) { + cache.splice(cache.indexOf(cityLC), 1) + cache.unshift(cityLC) + answer += 1 + } else { + if (cache.length >= cacheSize) cache.pop() + cache.unshift(cityLC) + answer += 5 + } + } + return answer; +} + +//정답 2 - jaewon1676 +function solution(cacheSize, cities) { + var answer = 0; + let cache = []; + + //캐시 크기가 0인 경우는 따로 처리 + if (cacheSize === 0) return cities.length * 5; + + while (cities.length != 0) { + // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다. + const city = cities.shift().toLowerCase(); + // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss) + if (cache.includes(city)) { + // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고, + cache.splice(cache.indexOf(city), 1); + // 맨 뒤로 push 해준다. + cache.push(city); + // cache hit + answer += 1; + } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다. + if (cache.length === cacheSize) { + cache.shift(); + } + // 새로운 캐시 맨 뒤로 push + cache.push(city); + // cache miss + answer += 5; + } + } + return answer; + } + /* LRU 알고리즘 + n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다. + n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면 + 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */ + \ No newline at end of file diff --git "a/build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" "b/build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" new file mode 100644 index 0000000..41b4753 --- /dev/null +++ "b/build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" @@ -0,0 +1,47 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(m, n, board) { + board = board.map(r => r.split('')); + const getSquare = ([r, c]) => [ + [r, c], + [r, c + 1], + [r + 1, c], + [r + 1, c + 1], + ]; + + const isSquare = ([r, c]) => { + if (board[r][c] === '@') return false; + return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1; + }; + + const remove = () => { + const removeArr = []; + for (let r = 0; r < m - 1; r++) { + for (let c = 0; c < n - 1; c++) { + if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v)); + } + } + removeArr.forEach(([r, c]) => { + board[r][c] = '@'; + }); + return removeArr.length !== 0; + }; + + const pull = () => { + for (let c = 0; c < n; c++) { + const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@'); + const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn]; + resultColumn.forEach((v, r) => { + board[r][c] = v; + }); + } + return board; + }; + + while (remove()) { + pull(); + } + + return board.flat().filter(v => v === '@').length; +} diff --git "a/build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" "b/build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" new file mode 100644 index 0000000..9bea2b8 --- /dev/null +++ "b/build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" @@ -0,0 +1,16 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, t, m, p) { + let queue = [], result = [], currentNumDecimal = -1, turn = 0 + while (result.length < t) { + if (queue.length === 0) { + currentNumDecimal++ + currentNumDecimal.toString(n).split('').forEach(x => queue.push(x)) + } + const currentChar = queue.shift() + if (turn % m === p - 1) result.push(currentChar) + turn++ + } + return result.join('').toUpperCase() +} \ No newline at end of file diff --git "a/build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" "b/build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" new file mode 100644 index 0000000..20404da --- /dev/null +++ "b/build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" @@ -0,0 +1,42 @@ +// https://github.com/codeisneverodd/programmers-coding-test +// 완벽한 정답이 아닙니다. +// 정답 1 - minjongbaek +function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수 + return m + .replace(/C#/g, 'c') + .replace(/D#/g, 'd') + .replace(/F#/g, 'f') + .replace(/G#/g, 'g') + .replace(/A#/g, 'a'); +} + +function solution(m, musicinfos) { + + // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다. + // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다. + // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다. + + const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다. + + const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다. + for (const info of musicinfos) { + const [start, finish, title, _score] = info.split(','); + // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다. + const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5)))); + + const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다. + + // 재생된 멜로디를 구합니다. + // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다. + // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다. + const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration); + if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다. + map.set(title, {score, playScore}); + } + } + + // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다. + // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다. + const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length); + return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다. +} \ No newline at end of file diff --git "a/build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" "b/build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" new file mode 100644 index 0000000..75ad8eb --- /dev/null +++ "b/build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" @@ -0,0 +1,55 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(msg) { + const outputs = []; + const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))]; + let [start, end] = [0, 1]; + + const doesDictHave = (start, end) => dict.includes(msg.substring(start, end)); + + const getInput = (start, end) => { + if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end]; + return getInput(start, end + 1); + }; + + const addToDict = (start, end) => { + if (doesDictHave(start, end)) return; + dict.push(msg.substring(start, end)); + }; + + const addToOutputs = (start, end) => { + if (!doesDictHave(start, end)) return; + outputs.push(dict.indexOf(msg.substring(start, end))); + }; + + while (start < msg.length) { + [start, end] = getInput(start, end); + addToDict(start, end + 1); + addToOutputs(start, end); + start = end; + } + return outputs; +} + +// 정답 2 - ssi02014 +function solution(msg) { + const result = []; + const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i)) + + // 시간 복잡도 O(N^2) + const lastWordAndCompression = msg.split("").reduce((acc, cur) => { + const nextWord = acc + cur; + const nextWordIdx = dict.indexOf(nextWord); + const prevWordIdx = dict.indexOf(acc); + + if (nextWordIdx !== -1) return acc + cur; + dict.push(nextWord); + + if (prevWordIdx !== -1) result.push(prevWordIdx + 1); + return cur; + }, ""); + + result.push(dict.indexOf(lastWordAndCompression) + 1); + return result; +} diff --git "a/build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" "b/build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" new file mode 100644 index 0000000..a645429 --- /dev/null +++ "b/build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" @@ -0,0 +1,14 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(files) { + var answer = []; + const numberRegex = /[0-9]+/ + answer = files.sort((a, b) => { + const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)] + const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()] + const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])] + return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0 + }) + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" "b/build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" new file mode 100644 index 0000000..5425443 --- /dev/null +++ "b/build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" @@ -0,0 +1,23 @@ +// https://github.com/codeisneverodd/programmers-coding-test +// 완벽한 정답이 아닙니다. +// 정답 1 - minjongbaek +function isPrime(number) { // 소수를 판별하는 함수 + if (number < 2) return false; + for (let i = 2; i * i <= number; i += 1) { + if (number % i === 0) { + return false; + } + } + return true; +} + +function solution(n, k) { + // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만, + // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다. + // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다. + + // (n).toString(k) // n을 k진수로 변환합니다. + // .split('0') // 0을 기준으로 나눕니다. + // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다. + return (n).toString(k).split('0').filter((number) => isPrime(+number)).length; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" "b/build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" new file mode 100644 index 0000000..1fff1ad --- /dev/null +++ "b/build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" @@ -0,0 +1,13 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - jaewon1676 +function solution (n, left, right) { + const answer = []; + + for (let i=left; i <= right; i++) { // left부터 right까지를 구한다. + let row = parseInt(i/n); // 행(row)을 구한다. + let column = i%n; // 열(column)을 구한다. + answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다. + } + return answer +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" "b/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" new file mode 100644 index 0000000..d6b7ce3 --- /dev/null +++ "b/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" @@ -0,0 +1,53 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(numbers) { + var answer = ''; + numbers.sort(sortFunc) + answer = numbers.join('') + if (answer[0] === '0') return '0' + return answer; +} + +const sortFunc = (a, b) => { + const compareA = parseInt(a.toString() + b.toString()) + const compareB = parseInt(b.toString() + a.toString()) + return compareB - compareA +} + + +// 정답 2 - createhb21 +function solution(numbers) { + let stringNum = + numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b)); + + return stringNum[0] === '0' ? '0' : stringNum.join(''); +} + +// 정답 3 - prove-ability +function solution(numbers) { + if(numbers.every(v => v === 0)) return "0"; + return numbers.sort((a, b) => { + if(a === b) return 0; + let stringA = a.toString(10), stringB = b.toString(10); + if(stringA[0] === stringB[0]) { + let aIndex = 1, bIndex = 1; + while(true) { + if(!stringA[aIndex]) --aIndex; + if(!stringB[bIndex]) --bIndex; + if(stringA[aIndex] === stringB[bIndex]) { + aIndex++, bIndex++; + continue; + } + if(stringA[aIndex] < stringB[bIndex]) return 1; + else return -1; + } + } + return stringB[0] - stringA[0] + }).join(""); +} + +// 정답 4 - prove-ability +function solution(numbers) { + return numbers.every(v => v === 0) ? "0" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(""); +} diff --git "a/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" "b/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" new file mode 100644 index 0000000..e63b228 --- /dev/null +++ "b/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" @@ -0,0 +1,12 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(board) { + for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능 + for (let col = 0; col < board[0].length; col++) { + if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined))) + board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1; + } + } + return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대 +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" "b/build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" new file mode 100644 index 0000000..3569835 --- /dev/null +++ "b/build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" @@ -0,0 +1,21 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(places) { + var answer = []; + answer = places.map(place => { + return place.some((row, rowIndex) => + row.split('').some((mark, colIndex, rowArr) => { + if (mark === 'X') return false + const countPeopleAround = [ + rowArr[colIndex - 1] || '', + rowArr[colIndex + 1] || '', + (place[rowIndex - 1] || '')[colIndex], + (place[rowIndex + 1] || '')[colIndex], + ].filter(mark => mark === 'P').length + return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1) + }) + ) ? 0 : 1 + }) + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" "b/build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" new file mode 100644 index 0000000..38689bc --- /dev/null +++ "b/build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" @@ -0,0 +1,40 @@ +// https://github.com/codeisneverodd/programmers-coding-test +//정답 1 - prove-ability +function solution(maps) { + // BFS 활용 + const row = maps.length - 1, col = maps[0].length - 1; + + // 큐 - 시작 위치 y, x, 이동 거리 + const queue = [[0, 0, 1]]; + + while(queue.length) { + // 큐 추출 + let [y, x, count] = queue.shift(); + // 상대 팀 진영이라면 + if(y === row && x === col) return count; + // 동서남북 확인 + for(let i = 0; i < 4; i++) { + const [dy, dx] = DIRECTION[i]; + // 다음 길 위치 + const nextY = dy + y, nextX = dx + x; + // 맵 밖으로 나간다면 + if(isOut(nextY, nextX, row, col)) continue; + // 도착한 곳이 벽이라면 + if(maps[nextY][nextX] === 0) continue; + // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지 + maps[nextY][nextX] = 0; + // 다음에 확인해야하는 곳 큐에 추가 + // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 + queue.push([nextY, nextX, count + 1]); + // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음.. + } + } + + return -1; +} + +// 상 우 하 좌 +const DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]]; + +// 사용이 가능한 길인지 확인하는 함수 +const isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col; \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" "b/build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" new file mode 100644 index 0000000..7d8de37 --- /dev/null +++ "b/build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" @@ -0,0 +1,64 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(p) { + if (p.length === 0) return p + let bracketCount = 0 + let isURight = true + for (let i = 0; i < p.length; i++) { + bracketCount = p[i] === '(' ? bracketCount + 1 : bracketCount - 1 + if (bracketCount < 0) isURight = false + if (bracketCount === 0) { + const [u, v] = [p.slice(0, i + 1), p.slice(i + 1)] + if (isURight) { + return u + solution(v) + } else { + let emptyString = '(' + solution(v) + ')' + const slicedReversedString = u + .slice(1, u.length - 1) + .split('') + .map(bracket => bracket === '(' ? ')' : '(') + .join('') + return emptyString + slicedReversedString + } + } + } +} + +//정답 2 - codeisneverodd +function solution(p) { + if (p.length === 0) { + return p + } else { + const sliceIndex = balancedIndex(p) + const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)] + if (isRight(u)) { + return u + solution(v) + } else { + let emptyString = '(' + solution(v) + ')' + const slicedReversedString = u + .slice(1, u.length - 1) + .split('') + .map(bracket => bracket === '(' ? ')' : '(') + .join('') + return emptyString + slicedReversedString + } + } +} + +const isRight = (str) => { + if (str[0] === ')') return false + let stack = 0 + for (let i = 0; i < str.length; i++) { + stack = str[i] === '(' ? stack + 1 : stack - 1 + if (stack < 0) return false + } + return stack === 0 +} +const balancedIndex = (str) => { + let count = 0 + for (let i = 0; i < str.length; i++) { + count = str[i] === '(' ? count + 1 : count - 1 + if (count === 0) return i + } +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" "b/build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" new file mode 100644 index 0000000..fc826c4 --- /dev/null +++ "b/build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" @@ -0,0 +1,38 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s) { + let answer = 0; + let sArr = s.split('') + if (isRight(sArr.join(''))) answer += 1 + for (let i = 0; i < sArr.length - 1; i++) { + sArr.push(sArr.shift()) + if (isRight(sArr.join(''))) answer += 1 + } + return answer; +} + +function isRight(str) { + const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')'] + let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}] + for (let sIndex = 0; sIndex < str.length; sIndex++) { + for (let bIndex = 0; bIndex < 3; bIndex++) { + if (str[sIndex] === bracketOpen[bIndex]) { + status[bIndex].open = true + status[bIndex].openOrder.push(sIndex) + } + if (str[sIndex] === bracketClose[bIndex]) { + if (status[bIndex].openOrder.length > 0) { + if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0) + return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘 + status[bIndex].openOrder.pop() + status[bIndex].open = false + } else { + return false //열리기 전에 닫힘 + } + } + } + } + for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음 + return true +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" "b/build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" new file mode 100644 index 0000000..f01e731 --- /dev/null +++ "b/build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" @@ -0,0 +1,43 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(line) { + const getCrossPoint = ([A, B, E], [C, D, F]) => { + if (A * D - B * C === 0) return [Infinity, Infinity]; + return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)]; + }; //문제 설명 최하단 참조 + + const crossPoints = line.flatMap((lineA, i) => + line + .slice(i + 1) + .map(lineB => getCrossPoint(lineA, lineB)) + .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y)) + ); + + const generateCanvas = crossPoints => { + const xPoints = [...crossPoints.map(([x, y]) => x)]; + const yPoints = [...crossPoints.map(([x, y]) => y)]; + const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)]; + const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)]; + const xLength = Math.abs(maxX - minX) + 1; + const yLength = Math.abs(maxY - minY) + 1; + + return { + canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')), + draw([x, y], value) { + this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value; + }, + print() { + return this.canvas.map(row => row.join('')); + }, + }; + }; + + const canvas = generateCanvas(crossPoints); + + crossPoints.forEach(point => { + canvas.draw(point, '*'); + }); + + return canvas.print(); +} diff --git "a/build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" "b/build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" new file mode 100644 index 0000000..3bfd2a7 --- /dev/null +++ "b/build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" @@ -0,0 +1,66 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - jaewon1676 +function solution(people, limit) { + let cnt = 0; + + people.sort((a, b) => {return a - b}) // 몸무게 오름차순 + + while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 + if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기 + people.pop() + people.shift() + } else { + people.pop() // 무거운사람을 뺴주자 + } + cnt++; + } + return cnt; +} // 4주차 2번 문제와 유사함 + +// 정답 2- prove-ability +function solution(people, limit) { + let count = 0; + // 오름차순 정렬 + people.sort((a, b) => a - b); + + // people 배열 요소가 있다면? + while(people.length) { + + // 요소 중 가장 큰 수인 마지막 요소를 가져온다 + let sum = people.pop(); + + // 요소 중 가장 작은 수를 더한다 + sum += people[0] + + // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거 + if(sum <= limit) people.shift(); + + count++; + } + + return count; +} + +// 정답 3 - iHoHyeon +function solution(people, limit) { + people.sort((a, b) => a - b); // 오름차순 정렬 + + let cnt = 0; // 구명보트 개수 + + let front = 0; // 가장 몸무게가 작은 사람의 index + let last = people.length; // 가장 몸무게가 큰 사람의 index + + while (last > front) { + cnt++; + + const now = people.pop(); + last--; + + if (now + people[front] <= limit) { + front++; // shift() 연산의 비효율로 인해 front 사용 + } + } + + return cnt; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" "b/build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" new file mode 100644 index 0000000..1cc3df1 --- /dev/null +++ "b/build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" @@ -0,0 +1,153 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd - 시간복잡도 감소 +function solution(progresses, speeds) { + var answer = []; + const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index])) + console.log(remainDays) + let maxDay = remainDays[0] + answer.push(0) + for (let i = 0; i < remainDays.length; i++) { + if (remainDays[i] <= maxDay) { + answer[answer.length - 1] += 1 + } else { + answer.push(1) + maxDay = remainDays[i] + } + } + return answer; +} + +//정답 2 - codeisneverodd +function solution(progresses, speeds) { + var answer = []; + while (progresses.length > 0) { + let done = 0 + progresses = progresses.map((prog, index) => prog + speeds[index]) + const length = progresses.length + for (let i = 0; i < length; i++) { + if (progresses[0] >= 100) { + progresses.shift() + speeds.shift() + done += 1 + } else { + break + } + } + if (done > 0) answer.push(done) + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(progresses, speeds) { + let answer = []; + + while(speeds.length > 0) { + for(let i=0;i= 100) { + progresses.shift(); + speeds.shift(); + count++; + } + if(count > 0) { // 결과 배열에 넣어주기 + answer.push(count); + } + } + return answer; +} + +// 정답 4 - createhb21 +function solution(progresses, speeds) { + // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열 + var answer = []; + // 각각의 기능이 몇 일 소요되는지 담은 큐 + let queue = []; + + for (let i = 0; i < speeds.length; i++) { + // 각각의 기능이 몇 일 걸리는지 계산 + let task = Math.ceil((100 - progresses[i]) / speeds[i]); + // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다. + queue.push(task); + + // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push() + // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화 + if(task > queue[0]) { + answer.push(queue.length-1); + // 큐 초기화 + queue = [task]; + } + } + + answer.push(queue.length); + return answer; + } + +// 정답 5 - chaerin-dev +function solution(progresses, speeds) { + // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장 + const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i])); + + // 최초 배포날은 daysLeftArr의 첫 번째 요소 + let deployDay = daysLeftArr[0]; + // 각 배포에 몇 개의 기능이 배포될지 셀 변수 + let cnt = 0; + // 각 배포에 몇 개의 기능이 배포될지 저장할 배열 + const answer = []; + + // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포 + daysLeftArr.forEach((daysLeft) => { + if (deployDay < daysLeft) { + deployDay = daysLeft; + answer.push(cnt); + cnt = 0; + } + cnt++; + }); + answer.push(cnt); + + // 정답 반환 + return answer; +} + +// 정답 6 - RyanDeclan +// 예제1) 입력값 : [93, 30, 55], [1, 30, 5] +function solution(progresses, speeds) { + // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열 + let countBox = []; + let completeBox = []; + for(k=1; k<100; k++){ + let complete = [] + for(i=0; i= 100){ + complete.push([i,k]); + progresses.splice(i,1,"end") + } + } + if(complete[0] != null)completeBox.push(...complete) + } + completeBox.sort((a,b) => a[0] - b[0]) + + //여기까지 한다면 console.log(completeBox) [ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. + // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 + + // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 + let count = 0; + completeBox.reduce((acc, cur, i) => { + if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 + if(i) countBox.push(count) + acc[0] = cur[1]; + count = 0; + count++ + }else{count++} + if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. + return acc + } ,[0]) + return countBox; +} diff --git "a/build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" "b/build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" new file mode 100644 index 0000000..e8b5cd6 --- /dev/null +++ "b/build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" @@ -0,0 +1,55 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(bridge_length, weight, truck_weights) { + let [tick, onBridge, weightOnBridge] = [0, [{weight: 0, timeToOut: 0}], 0] + while (onBridge.length > 0 || truck_weights.length > 0) { + if (onBridge[0].timeToOut === tick) weightOnBridge -= onBridge.shift().weight + if (weightOnBridge + truck_weights[0] <= weight) { + weightOnBridge += truck_weights[0] + onBridge.push({weight: truck_weights.shift(), timeToOut: tick + bridge_length}) + } else { + if (onBridge[0]) tick = onBridge[0].timeToOut - 1 // 시간을 줄이는 포인트 + } + tick++ + } + return tick +} + +//정답 2 - codeisneverodd +function solution(bridge_length, weight, truck_weights) { + const bridge = new Array(bridge_length).fill(0) + let tick = 0 + do { + tick++ + bridge.pop() + bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ? + bridge.unshift(truck_weights.shift()) : bridge.unshift(0) + } while (bridge.reduce((a, b) => a + b) !== 0) + return tick; +} + +//정답 3 - jaewon1676 +function solution(bridge_length, weight, truck_weights) { + var answer = 0; // 총 걸리는 시간 + let bridge = []; // 다리를 건너는 트럭 + let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게 + + while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다. + answer++; // 1초 추가 + if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다. + bridge_weight -= bridge.shift(); + } + if (bridge_weight + truck_weights[0] > weight) { + bridge.push(0); + continue; + } + let truck_weight = truck_weights.shift(); + bridge.push(truck_weight); + bridge_weight += truck_weight; + } + + answer += bridge_length; + + return answer; + } \ No newline at end of file diff --git "a/build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" "b/build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" new file mode 100644 index 0000000..860c9e4 --- /dev/null +++ "b/build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" @@ -0,0 +1,50 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + let answer = n; + const nCountOne = n.toString(2).match(/1/g).length + while (true) { + answer++ + if (nCountOne === (answer).toString(2).match(/1/g).length) break + } + return answer; +} + +//정답 2 - codeisneverodd +function solution(n) { + var answer = 0; + let find = false + const nCountOne = countOne(n.toString(2)) + let counter = 1 + while (!find) { + if (nCountOne === countOne((n + counter).toString(2))) { + answer = n + counter + find = true + } + counter++ + } + return answer; +} + +const countOne = (str) => { + return str.split('').reduce((sum, currentChar) => + currentChar === '1' ? sum += 1 : sum, 0) +} + +//정답 3 - prove-ability +function solution(n) { + let i = n; + n = n.toString(2).match(/1/g).length; + while(true) { + i++; + const value = i.toString(2).match(/1/g).length; + if(n === value) return i; + } +} + +//정답 4 = ryan-dia +function solution(n) { + const count = (num) => num.toString(2).match(/1/g).length; + for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i +} diff --git "a/build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" "b/build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" new file mode 100644 index 0000000..82a2ffe --- /dev/null +++ "b/build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" @@ -0,0 +1,31 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(queue1, queue2) { + const getSum = arr => arr.reduce((a, c) => a + c, 0); + + if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1; + + const queue = [...queue1, ...queue2, ...queue1, ...queue2]; + const maxCount = queue.length; + const average = getSum(queue) / 4; + let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length]; + + const pop = () => { + currentSum -= queue[start]; + start += 1; + count += 1; + }; + const insert = () => { + currentSum += queue[end]; + end += 1; + count += 1; + }; + + while (count <= maxCount) { + if (currentSum < average) insert(); + if (currentSum > average) pop(); + if (currentSum === average) return count; + } + return -1; +} diff --git "a/build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" "b/build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" new file mode 100644 index 0000000..8bf1c07 --- /dev/null +++ "b/build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" @@ -0,0 +1,29 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - jaewon1676 +function solution(land) { + var answer = 0; + + for (i = 1; i < land.length; i++){ + land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3])); + land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3])); + land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3])); + land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2])) + } + answer = land[land.length - 1] + return Math.max(...answer) +} +/* 풀이 과정 +1. land의 행만큼 반복문을 돌린다. +2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다. +3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/ + +//정답 2 - codeisneverodd +function solution(land) { + for (let rowIndex = 1; rowIndex < land.length; rowIndex++) { + for (let colIndex = 0; colIndex < land[0].length; colIndex++) { + land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1)) + } + } + return Math.max(...land[land.length - 1]) +} diff --git "a/build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" "b/build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" new file mode 100644 index 0000000..c9ba82a --- /dev/null +++ "b/build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" @@ -0,0 +1,12 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(n) { + if (n < 2) return 1; + const count = [0, 1, 2, ...Array(n - 2).fill(0)]; + count.forEach((_, i) => { + if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567; + }); + return count[n]; +} +//재귀를 사용하면 콜스택 오버플로우가 발생합니다. diff --git "a/build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" "b/build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" new file mode 100644 index 0000000..539fb20 --- /dev/null +++ "b/build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" @@ -0,0 +1,65 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(w, h) { + var answer = 1; + const gcd = greatestCommonDivisor(w, h) + answer = w * h - (h + w - gcd) + return answer; +} + +let greatestCommonDivisor = (a, b) => { + while (b > 0) { + let r = a % b; + a = b; + b = r; + } + return a; +} + +//정답 2 - codeisneverodd +function solution(w, h) { + var answer = 1; + const gcd = greatestCommonDivisor2(w, h) + const erasedBoxInUnit = h / gcd + w / gcd - 1 + answer = w * h - erasedBoxInUnit * gcd + return answer; +} + +let greatestCommonDivisor2 = (a, b) => { + while (b > 0) { + let r = a % b; + a = b; + b = r; + } + return a; +} + +//정답 3 - jaewon1676 +// 유클리드 호제법을 이용한 최대 공약수 구하기 +function gcd(w, h) { + let mod = w % h; // w와 h의 나머지를 구합니다. + + if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다. + return h; + } + // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다. + return gcd(h, mod); +} +function solution(w, h) { + const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다. + return w * h - (w + h - gcdVal); +} + +//정답 4 - yongchanson +function solution(w,h){ + const slope = h / w; + let cnt = 0; + //대각선 아래에 위치한 도형의 개수를 구합니다. + //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다. + for(let i = 1; i <= w; i++){ + cnt += Math.ceil(slope * i); + } + //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다. + return ((w*h - cnt) * 2); +} diff --git "a/build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" "b/build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" new file mode 100644 index 0000000..9c0aa7d --- /dev/null +++ "b/build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" @@ -0,0 +1,35 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(orders, course) { + var answer = []; + for (const selectNum of course) { + let combinations = [] + for (const order of orders) { + getCombinations(Array.from(order), selectNum) + .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다. + .forEach(combString => combinations.push(combString)) + } + const combCounts = combinations.reduce((counts, combination) => { + counts[combination] = (counts[combination] || 0) + 1; + return counts; + }, {}); + let maxCount = 0, maxComb = [] + for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb] + for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb) + answer.push(...maxComb) + } + answer = answer.sort() + return answer; +} + +const getCombinations = (array, selectNum) => { + const result = []; + if (selectNum === 1) return array.map((element) => [element]); + array.forEach((fixed, index, origin) => { + const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1); + const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]); + result.push(...attached); + }); + return result; +} diff --git "a/build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" "b/build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" new file mode 100644 index 0000000..e1df7ce --- /dev/null +++ "b/build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(word) { + const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 }; + const price = calculatePrice([1], 5); + return word + .split("") + .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet]) + .reduce((acc, curr) => acc + curr, 0); +} +const calculatePrice = (result = [1], targetLength) => { + if (result.length === targetLength) return result; + return calculatePrice([result[0] * 5 + 1, ...result], targetLength); +}; +/* +각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까? +4번째 자리 - 1 +3번째 자리 - 1*5 + 1 = 6 +2번째 자리 - 6*5 + 1 = 31 +1번째 자리 - 31*5 + 1 = 156 +0번째 자리 - 156*5 + 1 = 781 + +검증(1부터 시작하므로 1 + 비용) +I => (1 + 781 * 2) = 1563 +EIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189 +AAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10 +AAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6 +추천 레퍼런스: https://seongho96.tistory.com/50 +*/ diff --git "a/build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" "b/build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" new file mode 100644 index 0000000..05381fc --- /dev/null +++ "b/build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" @@ -0,0 +1,71 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s) { + var answer = 0; + let lengthArr = [] + for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length) + answer = Math.min(...lengthArr) + return answer; +} + +function compressedString(str, unitNum) { + let count = 1 + let result = [''] + for (let repeat = 0; repeat <= str.length / unitNum; repeat++) { + const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum) + if (result[result.length - 1] === slicedGroup) { + count++ + } else { + if (count > 1) result[result.length - 1] = count + result[result.length - 1] + result.push(slicedGroup) + count = 1 + } + } + return result.join('') +} + +//정답 2 - chaerin-dev +function solution(s) { + // len: 압축 전 문자열 길이 + const len = s.length; + // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화) + let shortenLen = len; + + // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행 + for (let i = 1; i <= len / 2; i++) { + // cnt: 단위가 반복되는 횟수를 카운트할 변수 + let cnt = 1; + // temp: 현재 단위 문자열을 임시로 저장해둘 변수 + let temp = s.slice(0, i); + // shhortenS: 압축 후 문자열을 저장할 변수 + let shortenS = ""; + + // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단 + for (let j = i; j < len; j += i) { + // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가 + if (temp === s.slice(j, j + i)) cnt++; + // 현재 단위 문자열과 일치하지 않으면 + else { + // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고 + if (cnt === 1) shortenS += temp; + else shortenS += cnt + temp; + + // 단위가 반복되는 횟수는 다시 1로 초기화 + cnt = 1; + // 현재 단위 문자열 업데이트 + temp = s.slice(j, j + i); + } + } + + // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함 + if (cnt === 1) shortenS += temp; + else shortenS += cnt + temp; + + // 압축 후 문자열 길이의 최솟값 업데이트 + shortenLen = Math.min(shortenLen, shortenS.length); + } + + // 압축 후 문자열 길이의 최솟값 반환 + return shortenLen; +} diff --git "a/build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" "b/build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" new file mode 100644 index 0000000..116fd33 --- /dev/null +++ "b/build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" @@ -0,0 +1,37 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(dirs) { + const move = ([x, y], dir) => { + let next = [x, y]; + if (dir === 'U') next = [x, y + 1]; + if (dir === 'D') next = [x, y - 1]; + if (dir === 'R') next = [x + 1, y]; + if (dir === 'L') next = [x - 1, y]; + if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y]; + return next; + }; + + const isSameRoute = ([s1, e1], [s2, e2]) => { + const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2; + return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1)); + }; + + const trace = { + visited: [], + visit(start, end) { + if (start[0] === end[0] && start[1] === end[1]) return; + if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]); + }, + }; + + let current = [0, 0]; + + dirs.split('').forEach(dir => { + const next = move(current, dir); + trace.visit(current, next); + current = next; + }); + + return trace.visited.length; +} diff --git "a/build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" "b/build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" new file mode 100644 index 0000000..fb70325 --- /dev/null +++ "b/build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" @@ -0,0 +1,190 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. + +//정답 1 - pereng11 +// 다익스트라 + 최소힙 O( N * logN ) + // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 +class MinHeap{ + constructor () + { + this.heap = [ null ]; + } + // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬 + push ( val ) + { + this.heap.push(val); + let childIdx = this.heap.length-1; + let parentIdx = Math.floor(childIdx / 2); + while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){ + this.swap( childIdx, parentIdx ); + childIdx = parentIdx; + parentIdx = Math.floor(childIdx / 2); + } + } + pop () + { + if ( this.heap.length === 1 ) + { + return undefined; + } + // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬 + const minNode = this.heap[ 1 ]; + this.heap[ 1 ] = this.heap[ this.heap.length - 1 ]; + this.heap.pop(); + let parentIdx = 1; + let leftChildIdx = 2; + let rightChildIdx = 3; + while ( parentIdx < this.heap.length ) + { + // 자식이 없는 경우 + if ( !this.heap[ leftChildIdx ] ) + { + break; + } // 왼쪽 자식만 있는 경우 + else if ( !this.heap[ rightChildIdx ] ) + { + if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] ) + { + this.swap( parentIdx, leftChildIdx ); + } + break; + // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬 + } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] ) + { + const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx; + this.swap( parentIdx, minChildIdx ); + parentIdx = minChildIdx; + leftChildIdx = parentIdx * 2 + rightChildIdx = parentIdx * 2 + 1; + } else + { + // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지 + break; + } + } + return minNode; + } + swap ( idx1, idx2 ) + { + [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ]; + } + length () + { + return this.heap.length; + } +} + +function solution ( N, road, K ) +{ + const roadsTable = {}; //전체 도로 정보 + + // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 + for ( let i = 1; i <= N; i++ ) + { + roadsTable[ i ] = []; + } + road.forEach( road => + { + let [ sp, ep, dist ] = road; + roadsTable[ sp ].push( [ ep, dist ] ); + roadsTable[ ep ].push( [ sp, dist ] ); + } ); + + function djikstra ( sp ) + { + const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열 + const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 + const heap = new MinHeap(); + + //시작점 삽입 + heap.push( [sp, 0] ); + + // 가장 가까운 목적지부터 순서대로 방문 + while ( heap.length() > 1 ) + { + //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리] + const [ ep, val ] = heap.pop(); + //아직 방문하지 않은 곳만 처리 + if ( !visited[ ep ] ) + { + //방문처리, 거리 저장 + visited[ ep ] = true; + dist[ ep ] = val; + //방문 지점을 거쳐서 가는 다른 목적지 구하기 + const nexts = roadsTable[ ep ]; + if ( nexts ) + { + nexts.forEach( n => + { + let [ nextEp, nextVal ] = n; + if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 + { + heap.push( [ nextEp, val + nextVal ] ); + } + }) + } + } + } + // 거리가 K이하인 지점의 개수 반환 + const result = dist.filter( d => d <= K ).length; + return result; + } + + const answer = djikstra( 1 ); + return answer; +} + +//정답 2 - pereng11 O(N * N); +//다익스트라 + 선형탐색 +function solution ( N, road, K ) +{ + const roadsTable = {}; //전체 도로 정보 + + // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 + for ( let i = 1; i <= N; i++ ) + { + roadsTable[ i ] = []; + } + road.forEach( road => + { + let [ sp, ep, dist ] = road; + roadsTable[ sp ].push( [ ep, dist ] ); + roadsTable[ ep ].push( [ sp, dist ] ); + } ); + + function djikstra ( sp ) + { + const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 + const queue = []; + + queue.push( [sp, 0] ); + + while ( queue.length > 0 ) + { + const [ ep, val ] = queue.shift(); + if ( dist[ ep ] > val ) + { + dist[ ep ] = val; + const nexts = roadsTable[ ep ]; + if ( nexts ) + { + nexts.forEach( n => + { + let [ nextEp, nextVal ] = n; + //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 + if ( dist[ nextEp ] > val + nextVal ) + { + queue.push( [ nextEp, val + nextVal ] ); + } + } ); + } + } + } + // 거리가 K이하인 지점의 개수 반환 + const result = dist.filter( d => d <= K ).length; + return result; + } + + const answer = djikstra( 1 ); + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" "b/build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" new file mode 100644 index 0000000..8281b8c --- /dev/null +++ "b/build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" @@ -0,0 +1,76 @@ +// https://github.com/codeisneverodd/programmers-coding-test +// 완벽한 정답이 아닙니다. +// 정답 1 - minjongbaek + +// 빛의 이동을 위한 DX, DY 변수를 선언합니다. +const DX = [-1, 1, 0, 0]; +const DY = [0, 0, -1, 1]; + +function solution(grid) { + + // DFS에 4방향을 고려하여 문제를 풉니다. + // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다. + + const answer = []; + + // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]] + const visited = Array.from({ length: grid.length }, () => []).map((v) => { + for (let i = 0; i < grid[0].length; i += 1) { + v.push(new Array(4).fill(false)); + } + return v + }); + + for (let x = 0; x < grid.length; x += 1) { + for (let y = 0; y < grid[0].length; y += 1) { + for (let d = 0; d < 4; d += 1) { + // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다. + if (!visited[x][y][d]) { + const stack = []; + stack.push([x, y, d]); + + let cnt = 0; + while (stack.length !== 0) { + const [currentX, currentY, currentD] = stack.pop(); + if (!visited[currentX][currentY][currentD]) { + visited[currentX][currentY][currentD] = true; + cnt += 1; + + const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다. + const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다. + + stack.push([nextX, nextY, nextD]) + } + + } + answer.push(cnt); + } + } + } + } + return answer.sort((a, b) => a - b); +} + +// 다음 행선지를 구하는 함수 +function getNextXY(x, y, d, xLength, yLength) { + x += DX[d]; + y += DY[d]; + + // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다. + if (x < 0) x = xLength - 1; + if (x >= xLength) x = 0; + if (y < 0) y = yLength - 1; + if (y >= yLength) y = 0; + + return [x, y]; +} + +// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수 +function getNextD(command, d) { + if (command === 'L') { + d = [2, 3, 1, 0][d] + } else if (command === 'R') { + d = [3, 2, 0, 1][d] + } + return d +} diff --git "a/build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" "b/build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" new file mode 100644 index 0000000..c381952 --- /dev/null +++ "b/build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" @@ -0,0 +1,40 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + const snail = Array.from(Array(n), (_, index) => Array(index + 1)); + let currentNum = 0; + let [currentRow, currentCol] = [-1, 0]; + let shouldMove = n; + while (shouldMove > 0) { + for (let i = 0; i < shouldMove; i++) + snail[++currentRow][currentCol] = ++currentNum; + for (let i = 0; i < shouldMove - 1; i++) + snail[currentRow][++currentCol] = ++currentNum; + for (let i = 0; i < shouldMove - 2; i++) + snail[--currentRow][--currentCol] = ++currentNum; + shouldMove -= 3; + } + return snail.flatMap((num) => num); +} + +//정답 2 - jaewon1676 +function solution(n) { + const answer = new Array(n).fill().map((e, i) => new Array(i + 1)); + // 이차원배열을 만들어준다 + + let count = 0; + let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다. + let y = 0; // 열 + while (n > 0) { + for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다. + for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다. + for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다. + + n -= 3; + } + return answer.flatMap(e => e); + // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. + // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] + // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7] +} diff --git "a/build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" "b/build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" new file mode 100644 index 0000000..5849a47 --- /dev/null +++ "b/build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" @@ -0,0 +1,33 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(expression) { + var answer = 0; + const mathExp = ['*', '+', '-'] + let priorityArr = Permutation(mathExp, 3) + const calculated = [] + for (const priority of priorityArr) { + const expressionArr = expression.split(/(\D)/) + for (const exp of priority) { + while (expressionArr.includes(exp)) { + const index = expressionArr.indexOf(exp) + expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join(''))) + } + } + calculated.push(Math.abs(expressionArr[0])) + } + answer = Math.max(...calculated) + return answer +} + +function Permutation(arr, r) { + const result = [] + if (r === 1) return arr.map((num) => [num]) + arr.forEach((fixed, index, org) => { + const rest = [...org.slice(0, index), ...org.slice(index + 1)] + const permutation = Permutation(rest, r - 1) + const attached = permutation.map((numbers) => [fixed, ...numbers]) + result.push(...attached) + }) + return result +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" "b/build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" new file mode 100644 index 0000000..97d5caa --- /dev/null +++ "b/build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" @@ -0,0 +1,51 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(infos, queries) { + const infoData = {}; + + const fetchInfoData = (keyArr, score, start) => { + const key = keyArr.join(''); + + infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]); + + for (let i = start; i < keyArr.length; i++) { + fetchInfoData( + keyArr.map((v, index) => (index === i ? '-' : v)), + score, + i + 1 + ); + } + }; + + const getPassCount = (key, passScore) => { + const scores = infoData[key]; + + if (!scores) return 0; + + let [left, right] = [0, scores.length]; + + while (left < right) { + const mid = Math.floor((left + right) / 2); + scores[mid] >= passScore ? (right = mid) : (left = mid + 1); + } + + return scores.length - left; + }; + + infos + .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]]) + .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0)); + + Object.keys(infoData).forEach(key => { + infoData[key].sort((a, b) => a - b); + }); + + return queries + .map(query => query.replace(/ and /g, '').split(' ')) + .map(([key, passScore]) => getPassCount(key, +passScore)); +} +// 주의 할 점 +// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림 +// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림. +// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음. diff --git "a/build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" "b/build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" new file mode 100644 index 0000000..7bb5d51 --- /dev/null +++ "b/build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" @@ -0,0 +1,32 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - iHoHyeon +function solution(begin, end) { + return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx)); + // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다. +} + +const calc = (number) => { + if (number === 1) return 0; + // 1번째 위치는 무조건 0블록이 위치 + + for (let i = 2; i <= Math.sqrt(number); i++) { + if (number % i === 0 && number / i <= 10_000_000) return number / i; + // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외 + } + + return 1; +}; + +/* + 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는 + 시간 / 공간 복잡도가 급상승 + + -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자 + + -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다. + + -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다. + + + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다. +*/ diff --git "a/build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" "b/build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" new file mode 100644 index 0000000..93b5e62 --- /dev/null +++ "b/build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" @@ -0,0 +1,52 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { //수학적 풀이는 별도로 하지 않았습니다. + var answer = 0; + for (let i = 1; i <= n; i++) { + let sum = 0 + for (let j = i; j <= n; j++) { + sum += j + if (sum >= n) { + if (sum === n) answer++ + break + } + } + } + return answer; +} + +//정답 2 - prove-ability +function solution(n) { + let answer = 0; + for(let i = 1; i <= n; i++) { + let sum = 0; + for(let j = i; j <= n; j++) { + sum += j; + if(sum > n) break; + if(n === sum) { + answer++; + break; + } + } + } + return answer; +} + +//정답 3 - yongchanson +function solution(n) { + /* + 정답 = n의 홀수 약수의 개수 + 15의 홀수 약수 : 1,3,5,15 + 1+2+3+4+5=15 (중간값 3) + 4+5+6=15 (중간값 5) + 7+8=15 (연속된 값) + 15=15 (15) + */ + let result = 0; + + for (let i = 1; i <= n; i++) { + if (n % i == 0 && i % 2 == 1) result++; + } + return result; +} diff --git "a/build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" "b/build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" new file mode 100644 index 0000000..7143bb8 --- /dev/null +++ "b/build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" @@ -0,0 +1,16 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(skill, skill_trees) { + var answer = 0; + for (const tree of skill_trees) { + let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x)) + if (checkOrder(check)) answer += 1 + } + return answer; +} + +function checkOrder(checkArr) { + for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false + return true +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" "b/build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" new file mode 100644 index 0000000..3ac8103 --- /dev/null +++ "b/build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" @@ -0,0 +1,72 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +// 문제 풀이 전략 +// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다. +// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다. +// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다. +// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다. +// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다. +// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다 +// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다. +// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다. +function solution(possibleArrows, apeachComb) { + const compareTable = apeachComb.map(apeachArrow => ({ + apeachArrow, + ryanArrow: 0, + })); + const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows); + const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff)); + const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff); + if (maxScoreDiff <= 0) return [-1]; + const getIndexOfLastArrow = arrowTable => + arrowTable.length - + arrowTable + .slice() + .reverse() + .findIndex(x => x !== 0); + return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable; +} +function getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) { + const { apeachArrow } = compareTable[currentIndex]; + const lastIndex = compareTable.length - 1; + const possibleRyanArrows = [ + 0, + numberOfArrowLeft > apeachArrow && apeachArrow + 1, + numberOfArrowLeft >= apeachArrow && apeachArrow, + ]; + + if (currentIndex === lastIndex || numberOfArrowLeft === 0) { + if (numberOfArrowLeft > 0) { + compareTable[compareTable.length - 1] = { + apeachArrow, + ryanArrow: numberOfArrowLeft, + }; + } + const appeachScore = compareTable.reduce( + (acc, { apeachArrow, ryanArrow }, index) => + apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc, + 0 + ); + const ryanScore = compareTable.reduce( + (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc), + 0 + ); + return [ + { + scoreDiff: ryanScore - appeachScore, + ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow), + }, + ]; + } + return [ + ...possibleRyanArrows.flatMap(ryanUsedArrow => { + const nextCompareTable = [...compareTable]; + nextCompareTable.splice(currentIndex, 1, { + apeachArrow, + ryanArrow: ryanUsedArrow, + }); + return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow); + }), + ]; +} diff --git "a/build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" "b/build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" new file mode 100644 index 0000000..d3a5449 --- /dev/null +++ "b/build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" @@ -0,0 +1,13 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, words) { + var answer = []; + let turn = 1 + for (let i = 1; i < words.length; i++) { + let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i])) + if (i % n === 0) turn++ + if (!pass) return [i % n + 1, turn] + } + return [0, 0]; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" "b/build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" new file mode 100644 index 0000000..c2072b6 --- /dev/null +++ "b/build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" @@ -0,0 +1,42 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd + +function solution(n, a, b) { + let currentRound = 1; + const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호 + while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다. + if (myNextNumber(a) === myNextNumber(b)) break + a = myNextNumber(a) + b = myNextNumber(b) + currentRound++ + } + return currentRound +} + +//정답 2 - le2sky +function solution(n, a, b) { + let arr = Array.from({ length: n }, () => 0) + arr[b - 1] = "B" + arr[a - 1] = "A" + + const isDiff = () => { + return ( + (arr.indexOf("A") + 1 > arr.length / 2 && arr.indexOf("B") + 1 <= arr.length / 2) || + (arr.indexOf("A") + 1 <= arr.length / 2 && arr.indexOf("B") + 1 > arr.length / 2)) ? true : false + }; + const isLeft = () => { + return (arr.indexOf("A") + 1 > arr.length / 2) ? false : true + }; + + //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴 + while (!isDiff()) { + if (isLeft()) { + arr.splice(arr.length / 2) + } else { + arr.splice(0, arr.length / 2) + } + } + return Math.log2(arr.length) +} + \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" "b/build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" new file mode 100644 index 0000000..259d864 --- /dev/null +++ "b/build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" @@ -0,0 +1,83 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(record) { + var answer = []; + const users = {} + record.map(history => { + const [action, id, name] = history.split(' ') + if (action !== 'Leave') users[id] = name + }) + record.map(history => { + const [action, id, name] = history.split(' ') + if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`) + if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`) + }) + return answer; +} + +//정답 2 - jaewon1676 +function solution(record) { + let answer = []; + const map = new Map(); + + for (let i = 0; i < record.length; ++i) { + const [state, uid, name] = record[i].split(' '); + + if (state == 'Leave') { + answer.push([uid, '님이 나갔습니다.']); + + continue; + } + + if (state == 'Enter') { + answer.push([uid, '님이 들어왔습니다.']); + } + map.set(uid, name); + } + return answer.map(ele => map.get(ele[0]) + ele[1]); +} + +//정답 3 - chaerin-dev +function solution(record) { + // 최종 메시지를 저장할 배열 + let result = []; + // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열 + let resultId = []; + // 유저의 아이디: 닉네임 쌍을 저장할 Map + let idNameMap = new Map(); + + // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환 + record = record.map((e) => e.split(" ")); + + // record의 각 요소에 대해 + record.forEach((e) => { + // 각 요소의 첫 번째 요소(Enter/Leave/Change)가 + switch (e[0]) { + // Enter이면 + case "Enter": + // resultID 배열에 들어온 유저의 아이디 저장 + resultId.push(e[1]); + // result 배열에 닉네임을 제외하고 표시될 메시지 저장 + result.push("님이 들어왔습니다."); + // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장 + idNameMap.set(e[1], e[2]); + break; + // Leave이면 + case "Leave": + // resultID 배열에 들어온 유저의 아이디 저장 + resultId.push(e[1]); + // result 배열에 닉네임을 제외하고 표시될 메시지 저장 + result.push("님이 나갔습니다."); + break; + // Change이면 + case "Change": + // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경 + idNameMap.set(e[1], e[2]); + break; + } + }); + + // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환 + return result.map((e, i) => idNameMap.get(resultId[i]) + e); +} diff --git "a/build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" "b/build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" new file mode 100644 index 0000000..c982ca6 --- /dev/null +++ "b/build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" @@ -0,0 +1,12 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1(🎩 refactor 220425) - codeisneverodd +function solution(s) { + let opened = 0; + for (const bracket of s) { + if (bracket === "(") opened += 1; + if (bracket === ")") opened -= 1; + if (opened < 0) return false; + } + return opened === 0; +} diff --git "a/build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" "b/build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" new file mode 100644 index 0000000..1466598 --- /dev/null +++ "b/build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" @@ -0,0 +1,89 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(clothes) { + var answer = 1; + const spyWear = {}; + for (const clothNPart of clothes) + spyWear[clothNPart[1]] = (spyWear[clothNPart[1]] || 0) + 1; + for (const part in spyWear) answer *= spyWear[part] + 1; + return answer - 1; +} + +//정답 2 - codeisneverodd +function solution(clothes) { + var answer = 0; + const spyWear = {}; + for (const clothNPart of clothes) { + if (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = []; + spyWear[clothNPart[1]].push(clothNPart[0]); + } + const clothesCount = []; + for (const part in spyWear) clothesCount.push(spyWear[part].length + 1); + answer = + clothesCount.reduce((previous, current) => previous * current, 1) - 1; + return answer; +} +// 정답 3 - hyosung +function solution(clothes) { + let answer = 1; + // 옷 종류 + const types = {}; + // 반복문 최적화 - length, 비교연산 제거 + const length = clothes.length; + for (let i = length; i--; ) { + // 해당 옷의 종류가 없다면 종류 1 + if (!types[clothes[i][1]]) types[clothes[i][1]] = 1; + // 해당 옷의 종류가 있다면 종류 증가 + else types[clothes[i][1]] += 1; + } + // (종류 별 값 + 1 ) 을 다 곱셈 + Object.values(types).forEach((v) => { + answer *= v + 1; + }); + + return answer - 1; +} + +//정답 4 - jaewon1676 +function solution(clothes) { + var answer = 1; + var obj={}; + for(var i=0;i + clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1) + ); + + // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐 + // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나) + // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨 + let answer = 1; + for (let key of Object.keys(clothsObj)) { + answer *= clothsObj[key] + 1; + } + + // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기 + return answer - 1; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" "b/build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" new file mode 100644 index 0000000..1b98e04 --- /dev/null +++ "b/build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" @@ -0,0 +1,32 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(s) { + const removeZero = s => { + const removed = s + .split('') + .filter(n => n !== '0') + .join(''); + return { removed, count: s.length - removed.length }; + }; + + const convertToBinary = (s, turnCount, removedCount) => { + if (s === '1') return [turnCount, removedCount]; + const { removed, count } = removeZero(s); + return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count); + }; + + return convertToBinary(s, 0, 0); +} + +// 정답 2 - RyanDeclan +function solution(s) { + let box = [0,0] + while(s.length > 1){ + let reamain = s.replace(/0/g,"").length + box[0] += 1 + box[1] += (s.length - reamain) + s = reamain.toString(2) + } + return box; +} diff --git "a/build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" "b/build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" new file mode 100644 index 0000000..f57dd57 --- /dev/null +++ "b/build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" @@ -0,0 +1,29 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(n, wires) { + const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b); + + const convertWiresToTree = wires => [...new Set(wires.flat())]; + + const generateTree = (wires, tree) => { + if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree; + + const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire)); + const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))]; + + return [...new Set(generateTree(nextWires, nextTree))]; + }; + + let minDiff = Infinity; + const length = convertWiresToTree(wires).length; + + wires.forEach((_, i) => { + const [initWire, ...remainWires] = wires.filter((_, j) => j !== i); + const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length; + const diff = Math.abs(lengthA - (length - lengthA)); + minDiff = Math.min(diff, minDiff); + }); + + return minDiff; +} diff --git "a/build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" "b/build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" new file mode 100644 index 0000000..9de65a0 --- /dev/null +++ "b/build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" @@ -0,0 +1,25 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + var ans = 0; + while (n > 0) { + if (n % 2 !== 0) { + n = (n - 1) / 2 + ans++ + } else { + n = n / 2 + } + } + return ans; +} + +//정답 2 - yongchanson +function solution(n) { + let result = 0; + while (n > 0) { + result += n % 2; + n = Math.floor(n / 2); + } + return result; +} diff --git "a/build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" "b/build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" new file mode 100644 index 0000000..334f36b --- /dev/null +++ "b/build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" @@ -0,0 +1,25 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(name) { + var answer = 0; + const length = name.length; + let upDownCount = 0 + let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때 + for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i]) + for (let startOfA = 0; startOfA < name.length; startOfA++) { + let endOfA = startOfA + 1; + while (endOfA < length && name[endOfA] === 'A') endOfA++; + const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA] + leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1 + leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A.. + } + answer = upDownCount + Math.min(...leftRightCountList) + return answer; +} + +function minUpOrDownCount(destination) { + const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + const index = Alphabet.indexOf(destination) + return Math.min(index, Alphabet.length - index) +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" "b/build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" new file mode 100644 index 0000000..d93a2cf --- /dev/null +++ "b/build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" @@ -0,0 +1,65 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - ljw0096 + +function solution(fees, records) { + const answer = [] + + const parkingTable = getParkingTable(records) + const sortedKeys = Object.keys(parkingTable).sort() + + for (const targetCar of sortedKeys) { + if (parkingTable[targetCar].length % 2 === 1) { + parkingTable[targetCar].push(['23:59', 'OUT']) + } + const totalTime = getTotalTime(parkingTable, targetCar) + const fee = calculateFee(totalTime, fees) + answer.push(fee) + } + + return answer +} + +function getParkingTable(records) { + const parkingTable = {} + + records.forEach((val) => { + const info = val.split(' ') + if (Object.keys(parkingTable).includes(info[1])) { + parkingTable[info[1]].push([info[0], info[2]]) + } else { + parkingTable[info[1]] = [[info[0], info[2]]] + } + }) + + return parkingTable +} + +function getTotalTime(parkingTable, targetCar) { + let totalTime = 0 + for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) { + totalTime += calculateTotalTime( + parkingTable[targetCar][i][0], + parkingTable[targetCar][i + 1][0] + ) + } + return totalTime +} + +function calculateTotalTime(time1, time2) { + const [hour1, minute1] = time1.split(':').map((val) => parseInt(val)) + const [hour2, minute2] = time2.split(':').map((val) => parseInt(val)) + + return hour2 * 60 + minute2 - (hour1 * 60 + minute1) +} + +function calculateFee(totalTime, feeInfo) { + let fee = 0 + if (feeInfo[0] >= totalTime) { + fee = feeInfo[1] + } else { + fee = + feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3] + } + return fee +} diff --git "a/build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" "b/build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" new file mode 100644 index 0000000..bc7b2e5 --- /dev/null +++ "b/build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" @@ -0,0 +1,39 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - codeisneverodd +function solution(n, k) { + const getFactorial = n => { + const result = [1, 1, 2, ...Array(n - 2)]; + result.forEach((_, i) => { + if (i > 2) result[i] = result[i - 1] * i; + }); + return result; + }; + + const getDivision = (dividend, divisor) => { + const quotient = Math.floor(dividend / divisor); + const remainder = dividend % divisor; + return [quotient, remainder]; + }; + + const stepCount = getFactorial(n).reverse(); + + const generateSteps = (k, step) => { + const [q, r] = getDivision(k, stepCount[step]); + if (r === 0) return [q]; + return [q, ...generateSteps(r, step + 1)]; + }; + + const answer = []; + + const steps = generateSteps(k - 1, 0); + + const notUsedNums = Array.from({ length: n }, (_, i) => i + 1); + + steps.slice(1).forEach(q => { + answer.push(notUsedNums[q]); + notUsedNums.splice(q, 1); + }); + + return [...answer, ...notUsedNums]; +} diff --git "a/build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" "b/build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" new file mode 100644 index 0000000..66569b8 --- /dev/null +++ "b/build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" @@ -0,0 +1,47 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s) { + var answer = -1; + let notPairStack = [] + for (let i = 0; i < s.length; i++) notPairStack[notPairStack.length - 1] === s[i] ? notPairStack.pop() : notPairStack.push(s[i]) + answer = notPairStack.length === 0 ? 1 : 0 + return answer; +} + +//정답 2 - codeisneverodd +function solution(s) { + var answer = -1; + let notPairStack = [] + notPairStack.push(s[0]) + for (let i = 1; i < s.length; i++) { + if (notPairStack[notPairStack.length - 1] === s[i]) { + notPairStack.pop() + } else { + notPairStack.push(s[i]) + } + } + answer = notPairStack.length === 0 ? 1 : 0 + return answer; +} + +//정답 3 - jaewon1676 + +function solution(s){ + let cnt = 0; // 빼준 부분을 카운트 해줍니다 + let answer; + let stack = [] + for (let i of s){ + if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다 + stack.pop(); + cnt++;; + } else { + stack.push(i) + } + } + + (s.length / 2 == cnt ? answer = 1 : answer = 0 ) + // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다 + return answer; + } + // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다 \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" "b/build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" new file mode 100644 index 0000000..d2c0a52 --- /dev/null +++ "b/build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" @@ -0,0 +1,40 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s) { + var answer = ''; + const arr = s.split(' ') + answer = Math.min(...arr) + ' ' + Math.max(...arr) + return answer; +} + +//정답 2 - codeisneverodd +function solution(s) { + var answer = ''; + const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b) + answer = arr[0] + ' ' + arr[arr.length - 1] + return answer; +} + +//정답 3 - jaewon1676 +function solution(s) { + s = s.split(' ') + s.sort((a, b) => {return a - b}) // 오름차순 정렬 + let small = s[0] // s의 최솟값 + let large = s[s.length - 1] // s의 최댓값 + return (small + ' ' + large) +} + +//정답 4 - prove-ability +function solution(s) { + s = s.split(" ").map((v) => parseInt(v, 10)) + return `${Math.min(...s)} ${Math.max(...s)}`; +} + +//정답 5 - yongchanson +function solution(s) { + let arr = s.split(" ").sort((a, b) => a - b); + arr.splice(1, arr.length - 2, " "); + let result = arr.join(""); + return result; +} diff --git "a/build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" "b/build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" new file mode 100644 index 0000000..c7bf910 --- /dev/null +++ "b/build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(A, B) { + var answer = 0; + A = A.sort((a, b) => a - b) + B = B.sort((a, b) => b - a) + for (let i = 0; i < A.length; i++) answer += A[i] * B[i] + return answer; +} + +//정답 2 - prove-ability +function solution(A,B){ + let sum = 0; + A.sort((a, b) => a - b); + B.sort((a, b) => b - a); + + for(let i = 0, len = A.length; i < len; i++) { + sum += A[i] * B[i]; + } + + return sum; +} + +//정답 3 - yongchanson +function solution(A, B) { + A.sort((a, b) => a - b); + B.sort((a, b) => b - a); + return A.reduce((t, n, i) => t + n * B[i], 0); +} diff --git "a/build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" "b/build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" new file mode 100644 index 0000000..147962f --- /dev/null +++ "b/build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" @@ -0,0 +1,41 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(brown, yellow) { + var answer = []; + const size = brown + yellow + answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0] + return answer; +} + +function widthHeightPair(size) { + let result = [] + for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i]) + return result +} + +//정답 2 - jaewon1676 +function solution(brown, yellow) { + var answer = []; + let sum = brown + yellow; + + //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색) + for(let height=3; height { + const length = matrix.length; + const half = length / 2; + const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0])); + + if (pass(matrix)) return [matrix[0][0]]; + if (length <= 2) return matrix; + + const startPoints = [ + [0, 0], + [0, half], + [half, 0], + [half, half], + ]; + + return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half)))); + }; + return quad(arr) + .flat(Infinity) + .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]); +} diff --git "a/build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" "b/build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" new file mode 100644 index 0000000..1bedf83 --- /dev/null +++ "b/build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" @@ -0,0 +1,36 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(number, k) { + var answer = ''; + let answerStack = [0] + let deleteCount = -1 + for (let i = 0; i < number.length; i++) { + while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) { + answerStack.pop() + deleteCount++ + } + if (answerStack.length < number.length - k) answerStack.push(number[i]) + } + answer = answerStack.join('') + return answer; +} + +//정답 4 - jaewon1676 +function solution(number, k) { + const stack = []; + let answer = ''; + + for(let i=0; i 0 && stack[stack.length-1] < el){ + stack.pop(); + k--; + } + stack.push(el); + } + stack.splice(stack.length-k, k); + answer = stack.join(""); + return answer; +} + \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" "b/build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" new file mode 100644 index 0000000..4120a91 --- /dev/null +++ "b/build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" @@ -0,0 +1,46 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1(🎩 refactor 220830) - codeisneverodd +function solution(numbers, target) { + const dfs = (index, sum) => { + if (index === numbers.length) return sum === target ? 1 : 0; + return dfs(index + 1, sum + numbers[index]) + dfs(index + 1, sum - numbers[index]); + }; + return dfs(0, 0); +} + +//정답 2 - ssi02014 +function solution(numbers, target) { + let answer = 0; + + dfs(0, 0); + return answer; + + function dfs(index, sum) { + // 재귀 종료 + if (index === numbers.length) { + if (sum === target) { + answer++; + } + return; + } + + dfs(index + 1, sum + numbers[index]); + dfs(index + 1, sum - numbers[index]); + } +} + +//정답 3 - codeisneverodd +function solution(numbers, target) { + var answer = 0; + const binaryLength = numbers.length; + const binary = 2 ** binaryLength; + for (let i = 0; i < binary; i++) { + const numSlice = numbers.slice(); + const binaryString = i.toString(2).padStart(binaryLength, '0'); + for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null; + const calculated = numSlice.reduce((prev, current) => prev + current); + if (calculated === target) answer += 1; + } + return answer; +} diff --git "a/build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" "b/build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" new file mode 100644 index 0000000..bcdce86 --- /dev/null +++ "b/build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" @@ -0,0 +1,33 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(s) { + var answer = []; + let sets = s + .slice(2, -2) + .split('},{') + .map(set => set.split(',').map(x => parseInt(x))) + .sort((a, b) => a.length - b.length) + for (const set of sets) answer.push(...set.filter(x => !answer.includes(x))) + return answer; +} + +//정답 2 - chaerin-dev +function solution(s) { + // 문자열 -> 정수 이차원 배열 + const sArr = s + .substring(2, s.length - 2) + .split("},{") + .map((e) => e.split(",").map((e) => parseInt(e))) + .sort((a, b) => a.length - b.length); + // 정답을 저장할 배열 + const answer = []; + // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가 + for (let i = 0; i < sArr.length; i++) { + for (let j = 0; j < sArr[i].length; j++) { + const temp = sArr[i][j]; + if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]); + } + } + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" "b/build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" new file mode 100644 index 0000000..d29b243 --- /dev/null +++ "b/build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" @@ -0,0 +1,136 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(priorities, location) { + var answer = 0; + let documents = priorities.map((priority, index) => ({location: index, priority: priority})) + let locationPrinted = false + while (!locationPrinted) { + const shifted = documents.shift() + let printAvailable = true + if (documents.some((document) => shifted.priority < document.priority)) printAvailable = false + if (printAvailable) { + answer += 1 + if (shifted.location === location) locationPrinted = true + } else { + documents.push(shifted) + } + } + return answer; +} + +//정답 2 - codeisneverodd +function solution(priorities, location) { + var answer = 0; + let documents = priorities.map((priority, documentLocation) => [documentLocation, priority]) + let locationPrinted = false + while (!locationPrinted) { + const shifted = documents.shift() + let printAvailable = true + for (let i = 0; i < documents.length; i++) { + if (shifted[1] < documents[i][1]) { + printAvailable = false + break + } + } + if (printAvailable) { + answer += 1 + if (shifted[0] === location) locationPrinted = true + } else { + documents.push(shifted) + } + } + return answer; +} + +//정답 3 - jaewon1676 +function solution(priorities, location) { + var answer = 0; + while (true) { + + if (priorities[0] < Math.max(...priorities)) { + if (location - 1 < 0) location = priorities.length + priorities.push(priorities.shift()) + location--; + } else { + answer++; + if (location - 1 < 0) { + return answer; + } + priorities.shift() + location--; + } + console.log(priorities, location, answer) + + } + return answer +} + +// 정답 4 - createhb21 +function solution(priorities, location) { + var answer = priorities.map((priority, index) => { + return { + index, + priority + }; + }); + + let queue = []; + + while(answer.length > 0){ + const first = answer.shift(); + const isPriority = answer.some((p) => p.priority > first.priority); + isPriority ? answer.push(first) : queue.push(first); + } + const idx = queue.findIndex(p => p.index === location) + 1; + return idx; + } + +//정답 5 - codeisneverodd +//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다. +function solution(priorities, location) { + let answer = 0; + const printer = new Queue; + priorities.forEach((priority, index) => { + printer.enqueue([priority, index]) + }) + while (printer.size() > 0) { + const check = printer.dequeue() + const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length + if (countHigherPriority > 0) { + printer.enqueue(check) + } else { + answer += 1 + if (check[1] === location) break + } + + } + return answer; +} + +class Queue { + constructor() { + this.queue = [] + this.front = 0 + this.rear = 0 + } + + enqueue(value) { + this.queue[this.rear++] = value + } + + dequeue() { + const value = this.queue[this.front] + delete this.queue[this.front] + this.front += 1 + return value + } + + peek() { + return this.queue(this.front) + } + + size() { + return this.rear - this.front + } +} diff --git "a/build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" "b/build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" new file mode 100644 index 0000000..94a234d --- /dev/null +++ "b/build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" @@ -0,0 +1,28 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - pereng11 +//완전 탐색, greedy O(N^2) +function solution(currentFatigue, dungeons) { + return getMaxCount(currentFatigue, 0, dungeons); +} + +function getMaxCount(currentFatigue, visitedCount, dungeons) { + const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue); + if (possibleDungeons.length === 0) return visitedCount; + + const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => { + const [_, usedFatigue] = curr; + const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex); + const currentCount = getMaxCount( + currentFatigue - usedFatigue, + visitedCount + 1, + nextDungeons + ); + return Math.max(currentCount, prevCount); + }, 0); + + return maxCount; +} + + + diff --git "a/build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" "b/build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" new file mode 100644 index 0000000..ec16495 --- /dev/null +++ "b/build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + var answer = 0; + answer = fibonacci1234567(n) + return answer; +} + +function fibonacci1234567(n) { //재귀적으로 하면 시간초과 + let fiboArr = new Array(n + 1).fill(0) + fiboArr[0] = 0 + fiboArr[1] = 1 + for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과 + return fiboArr[n] +} + +//정답 2 - jaewon1676 +function solution(n) { + let f_1 = 0; + let f_2 = 1; + + for (let i=2; i<=n; i++) { + let temp = (f_1 + f_2) % 1234567; + f_1 = f_2; + f_2 = temp; + } + + return f_2; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" "b/build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" new file mode 100644 index 0000000..5b57c2d --- /dev/null +++ "b/build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" @@ -0,0 +1,28 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n) { + return move(1, 3, 2, n); +} +const move = (departure, destination, waypoint, numberOfPlate) => { + if (numberOfPlate === 1) return [[departure, destination]]; + return [ + ...move(departure, waypoint, destination, numberOfPlate - 1), + ...move(departure, destination, waypoint, 1), + ...move(waypoint, destination, departure, numberOfPlate - 1), + ]; +}; +//재귀를 생각해보기에 좋은 문제입니다. +//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi +/* +n개가 있다면 +1. 1->2로 n-1개를 옮김 +2. 1->3으로 가장 큰 1개를 옮김 +3. 2->1로 n-2개를 옮김 +4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김 +의 반복 + +결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨. +a->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 +함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음. +*/ diff --git "a/build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" "b/build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" new file mode 100644 index 0000000..0a90412 --- /dev/null +++ "b/build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" @@ -0,0 +1,27 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(rows, columns, queries) { + var answer = []; + let matrix = new Array(rows) + for (let i = 0; i < rows; i++) matrix[i] = new Array(columns) + for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1 + for (const query of queries) { + let order = [] + const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1] + //fill order (row1->row2, col1->col2, row2->row2, col2->col1) + for (let i = row1; i <= row2; i++) order.push(matrix[i][col1]) + for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i]) + for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2]) + for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i]) + //rotate clockwise + order.push(order.shift()) + answer.push(Math.min(...order)) + //change value in matrix + for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift() + for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift() + for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift() + for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift() + } + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" "b/build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" new file mode 100644 index 0000000..fb1e167 --- /dev/null +++ "b/build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" @@ -0,0 +1,33 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(arr1, arr2) { + const [row, col] = [arr1.length, arr2[0].length] + let answer = new Array(row); + for (let i = 0; i < row; i++) answer[i] = new Array(col) + //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값 + for (let i = 0; i < row; i++) { + for (let j = 0; j < col; j++) { + answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0) + } + } + return answer; +} + +//정답 2 - prove-ability +function solution(arr1, arr2) { + var answer = []; + // 행만큼 반복 + for(let i = 0, len = arr1.length; i < len; i++) { + const arr = [] + // 열만큼 반복 + for(let j = 0, len = arr1[i].length; j < len; j++) { + // 각의 배열에서 행을 더해서 arr push + arr.push(arr1[i][j] + arr2[i][j]) + } + // 열 만큼 추가된 arr 를 answer 가 추가 + answer.push(arr) + } + + return answer; +} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" "b/build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" new file mode 100644 index 0000000..b0d86e8 --- /dev/null +++ "b/build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" @@ -0,0 +1,50 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(relation) { + //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다. + //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다. + //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다. + const keys = [] + const totalAttrCount = relation[0].length + const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1] + + //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수 + const isUnique = (relation, attrIndexComb) => { + let result = Array.from(Array(relation.length), x => '') + for (const attrIndex of attrIndexComb) { + relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음. + } + return result.length === [...new Set(result)].length + } + + //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다. + const isMinimal = (attrComb) => { + for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false + return true + } + + //가능한 모든 조합을 검사 + for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) { + const combinations = getCombinations(indexList, attrCount) + for (const attrComb of combinations) { + if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb) + } + } + + return keys.length +} + +//Fn for 1. 조합을 반환하는 함수 +const getCombinations = (array, selectNumber) => { + const result = []; + if (selectNumber === 1) { + return array.map((element) => [element]); + } + array.forEach((fixed, index, origin) => { + const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1); + const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]); + result.push(...attached); + }); + return result; +} diff --git "a/build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" "b/build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" new file mode 100644 index 0000000..f454cf7 --- /dev/null +++ "b/build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" @@ -0,0 +1,23 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, edge) { + const graph = Array.from(Array(n + 1), () => []) + for (const [src, dest] of edge) { + graph[src].push(dest) + graph[dest].push(src) + } + const distance = Array(n + 1).fill(0) + distance[1] = 1 + const toBeSearched = [1] + while (toBeSearched.length > 0) { + const src = toBeSearched.shift() + for (const dest of graph[src]) { + if (distance[dest] === 0) { + distance[dest] = distance[src] + 1 + toBeSearched.push(dest) + } + } + } + return distance.filter(x => x === Math.max(...distance)).length +} \ No newline at end of file diff --git "a/build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" "b/build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" new file mode 100644 index 0000000..a4fa59d --- /dev/null +++ "b/build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, computers) { + let answer = 0 + const visited = new Array(n).fill(false) + const newNetwork = (startComputer) => { + //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다. + const toBeVisited = [startComputer] + while (toBeVisited.length > 0) { + //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다 + const currentComputer = toBeVisited.pop() + visited[currentComputer] = true + for (let nextComputer = 0; nextComputer < n; nextComputer++) { + if (!visited[nextComputer] && computers[currentComputer][nextComputer]) { + toBeVisited.push(nextComputer) + } + } + } + } + + for (let startComputer = 0; startComputer < n; startComputer++) { + if (!visited[startComputer]) { + newNetwork(startComputer) + //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다. + answer++ + } + } + return answer +} \ No newline at end of file diff --git "a/build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" "b/build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" new file mode 100644 index 0000000..eb6f1b4 --- /dev/null +++ "b/build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" @@ -0,0 +1,34 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - jaewon1676 +function solution(routes) { + let cctv = 1; // cctv의 개수는 최소 1개 + routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬 + // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ] + let out = routes[0][1]; // -15 + // 나간 시점(out)은 첫 차량의 나간시점으로 초기화 + + for(let i = 1; i < routes.length; i++) { + // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치 + if(out < routes[i][0]) { + cctv++; + out = routes[i][1]; // out 시점 업데이트 + } + + // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 + if(out > routes[i][1]) { + out = routes[i][1]; // out 시점 업데이트 + } + } + + return cctv; +} +// 그리디 + +// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다. +// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 +// 나간시점만 검사 해주면 됩니다. + +// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다. +// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면) +// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다. \ No newline at end of file diff --git "a/build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" "b/build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" new file mode 100644 index 0000000..5b45d5b --- /dev/null +++ "b/build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" @@ -0,0 +1,48 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(genres, plays) { + var answer = []; + const songs = [] + const genreSumHash = {} + const genreSumArr = [] + + //고유번호, 장르, 플레이수를 담은 songs + genres.forEach((genre, id) => { + songs.push({id: id, genre: genre, play: plays[id]}) + genreSumHash[genre] = genreSumHash[genre] === undefined ? plays[id] : genreSumHash[genre] + plays[id] + }) + + //장르별 플레이수 합으로 정렬하기 위해 생성한 배열 genreSumArr + for (const genre in genreSumHash) genreSumArr.push([genre, genreSumHash[genre]]) + genreSumArr.sort((a, b) => b[1] - a[1]) + + //각 장르안에서 각 노래의 play수가 높은 순으로 정렬하고 앞에서부터 2개까지 정답에 고유번호를 push + for (const genre of genreSumArr) { + const sorted = songs.filter(song => song.genre === genre[0]).sort((a, b) => b.play - a.play) + for (let i = 0; i < 2 && i < sorted.length; i++) answer.push(sorted[i].id) + } + return answer; +} + +//정답 2 - codeisneverodd +//Map과 고차함수를 적극적으로 이용한 풀이 +function solution(genres, plays) { + const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]} + genres + .map((genre, id) => [genre, plays[id]]) + .forEach(([genre, play], id) => { + const data = genreMap.get(genre) || {totalPlay: 0, songs: []} + genreMap.set(genre, { + totalPlay: data.totalPlay + play, + songs: [...data.songs, {play: play, id: id}] + .sort((a, b) => b.play - a.play) + .slice(0, 2) + }) + }) + + return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...] + .sort((a, b) => b[1].totalPlay - a[1].totalPlay) + .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs] + .map(song => song.id) +} \ No newline at end of file diff --git "a/build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" "b/build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" new file mode 100644 index 0000000..2317d7b --- /dev/null +++ "b/build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" @@ -0,0 +1,24 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(tickets) { + const routes = [] //최종 가능 루트들을 담을 배열 + const makeRoutes = (currentDepart, remainTickets, currentRoute) => { + //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수 + if (remainTickets.length > 0) { + remainTickets.forEach(([depart, nextDepart], index) => { + if (depart === currentDepart) + //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정 + makeRoutes( + nextDepart, + [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)], + [...currentRoute, currentDepart]) + }) + } else { + //티켓을 모두 사용하면 최종 가능 루트에 포함 + routes.push([...currentRoute, currentDepart]) + } + } + makeRoutes("ICN", tickets, []) + return routes.sort()[0] +} \ No newline at end of file diff --git "a/build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" "b/build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" new file mode 100644 index 0000000..560abe0 --- /dev/null +++ "b/build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" @@ -0,0 +1,34 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - jaewon1676 +function solution(operations) { + var answer = []; + for (let i = 0; i < operations.length; i++) { + // 숫자 삽입 + if (operations[i][0] == 'I') { + let m = operations[i].substring(2, operations[i].length); + answer.push(m); + } + // if 최댓값 삭제 + else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) { + answer.pop(); + } + // if 최솟값 삭제 + else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) { + answer.shift(); + } + + answer.sort((a, b) => { + return a - b; + }); + } + if (answer.length == 0) return [0, 0]; + else { + return [parseInt(answer.pop()), parseInt(answer.shift())]; + } +} +/* 풀이 과정 +1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다. +2. answer 배열을 정렬 해준다 +3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다. +*/ diff --git "a/build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" "b/build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" new file mode 100644 index 0000000..0a93d02 --- /dev/null +++ "b/build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" @@ -0,0 +1,19 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +function solution(n, times) { + //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right + let [left, right] = [1, Math.max(...times) * n]; + while (left <= right) { + const mid = Math.floor((left + right) / 2); + const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0); + //sum은 mid 시간 동안 처리 할 수 있는 사람의 수 + if (sum < n) { + left = mid + 1; + } else { + right = mid - 1; + } + } + // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다. + return left; +} diff --git "a/build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" "b/build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" new file mode 100644 index 0000000..77e4b6e --- /dev/null +++ "b/build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" @@ -0,0 +1,73 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - ryong9rrr +class Node { + constructor(value = '') { + this.value = value + this.children = new Map() + this.count = 0 + } +} + +class Trie { + constructor() { + this.root = new Node() + } + + insert(string) { + let currentNode = this.root + for (const char of string) { + if (!currentNode.children.has(char)) { + currentNode.children.set(char, new Node(currentNode.value + char)) + } + currentNode = currentNode.children.get(char) + currentNode.count++ + } + } + + startsWithCount(prefix) { + let currentNode = this.root + for (const char of prefix) { + if (!currentNode.children.has(char)) { + return 0 + } + currentNode = currentNode.children.get(char) + } + return currentNode.count + } +} + +function reverseString(string) { + return [...string].reverse().join('') +} + +function solution(words, queries) { + const table = {} + const reverseTable = {} + const counter = {} + + words.forEach((word) => { + const key = word.length + if (!table[key]) table[key] = new Trie() + if (!reverseTable[key]) reverseTable[key] = new Trie() + table[key].insert(word) + reverseTable[key].insert(reverseString(word)) + if (counter[key] === undefined) counter[key] = 0 + counter[key]++ + }) + + return queries.map((query) => { + const key = query.length + if (!table[key]) { + return 0 + } + const tQuery = query.replace(/\?/g, '') + if (!tQuery) { + return counter[key] + } + if (query[query.length - 1] === '?') { + return table[key].startsWithCount(tQuery) + } + return reverseTable[key].startsWithCount(reverseString(tQuery)) + }) +} \ No newline at end of file diff --git "a/build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" "b/build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" new file mode 100644 index 0000000..ce5fae8 --- /dev/null +++ "b/build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" @@ -0,0 +1,31 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - codeisneverodd +//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90 +function solution(strs, t) { + const tLength = t.length; //자주 쓰는 값 미리 계산 + //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다. + const minCountToIndex = new Array(tLength).fill(Infinity); + for (let currentIndex = 0; currentIndex < tLength; currentIndex++) { + //내가 검사할 부분은 t의 0~currentIndex 영역 + const currentSlice = t.slice(0, currentIndex + 1); + for (const str of strs) { + //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면 + if (currentSlice.endsWith(str)) { + //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이 + const frontLength = currentIndex - str.length + 1; + if (frontLength === 0) { + //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각 + minCountToIndex[currentIndex] = 1; + } else { + //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값 + minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1); + } + } + } + } + //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴 + return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1]; +} + +//리드미 테스트용 코멘트 diff --git "a/build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" "b/build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" new file mode 100644 index 0000000..54b4060 --- /dev/null +++ "b/build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" @@ -0,0 +1,30 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//더 좋은 풀이가 존재할 수 있습니다. +//정답 1 - ryong9rrr +function solution(food_times, k) { + const total = food_times.reduce((a, b) => a + b) + if (total <= k) { + return -1 + } + + // stack으로 풀기 + const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA) + + let prev = 0 + while (stack.length > 0 && k >= 0) { + const [time] = stack[stack.length - 1] + const acc = (time - prev) * stack.length + if (k < acc) { + break + } + stack.pop() + k -= acc + prev = time + } + + const result = stack + .reverse() + .map(([_, order]) => order) + .sort((orderA, orderB) => orderA - orderB) + return result[k % result.length] +} \ No newline at end of file diff --git "a/build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" "b/build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" new file mode 100644 index 0000000..168bc5f --- /dev/null +++ "b/build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" @@ -0,0 +1,7 @@ +//https://github.com/codeisneverodd/programmers-coding-test +//완벽한 정답이 아닙니다. +//정답 1 - cg10036 +function solution(n) { + const fact = n => n ? BigInt(n) * fact(n - 1) : 1n; + return fact(n * 2) / (fact(n) * fact(n + 1)); +} diff --git a/build/run.js b/build/run.js index cb0ff5c..de7df1b 100644 --- a/build/run.js +++ b/build/run.js @@ -1 +1,10 @@ -export {}; +import { dbToFile, writeDB } from './utils/db.js'; +import { deleteDir } from './utils/file.js'; +import { oldSolsToDB } from './utils/oldSols.js'; +const run = () => { + const db = oldSolsToDB(); + deleteDir('solutions'); + writeDB(db); + dbToFile(db); +}; +run(); diff --git "a/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 5482f35..f74287a 100644 --- "a/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(num_list, n) { result = [...result, num_list.slice(i * n, i * n + n)]; } return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" index d92af68..f3d9db0 100644 --- "a/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" +++ "b/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(order) { return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" index 699a5a4..2d6afdb 100644 --- "a/build/solutions/level-0/7\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(array) { return [...array.join('')].filter(a => a === '7').length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index d3dfa7f..f0b8d07 100644 --- "a/build/solutions/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(before, after) { const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); return sort(before) === sort(after) ? 1 : 0; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" "b/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" index 3723803..c73df1b 100644 --- "a/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" +++ "b/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(quiz) { const [formula, answer] = q.split('='); return eval(formula) === +answer ? 'O' : 'X'; }); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" index 405a2fd..f0c914e 100644 --- "a/build/solutions/level-0/k\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(i, j, k) { count += [...('' + num)].filter(n => +n === k).length; } return count; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" index 4209c3e..4c7c207 100644 --- "a/build/solutions/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(n, numlist) { return numlist.filter(num => num % n === 0); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" index 57be8dd..872ec19 100644 --- "a/build/solutions/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(array, n) { const minDiff = Math.min(...array.map(a => Math.abs(a - n))); return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" rename to "build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" index ecb5b86..af79354 100644 --- "a/build/solutions/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(rsp) { const win = { 0: 5, 2: 0, 5: 2 }; return [...rsp].map(num => win[num]).join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" index 030cc7c..d18ad17 100644 --- "a/build/solutions/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(array) { const max = Math.max(...array); return [max, array.indexOf(max)]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" index e6b6797..5e9eb2b 100644 --- "a/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(angle) { if (angle > 90) return 3; if (angle === 90) return 2; return 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" "b/build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" rename to "build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" index f6af630..c1baea7 100644 --- "a/build/solutions/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(hp) { const second = Math.floor((hp - first * 5) / 3); const third = hp - first * 5 - second * 3; return first + second + third; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" rename to "build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" index 07ba70e..a79838d 100644 --- "a/build/solutions/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" @@ -5,4 +5,4 @@ function solution(lines) { }, {}); return Object.values(visited).filter(v => v > 1).length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" index 4db3521..5a0ddb6 100644 --- "a/build/solutions/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(numbers, k) { let current = 0; for (let i = 0; i < k - 1; i++) current = goNext(current); return numbers[current]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" index 40bc29a..05ef94d 100644 --- "a/build/solutions/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" @@ -5,4 +5,4 @@ function solution(balls, share) { for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i); return Number(fact[n] / (fact[n - m] * fact[m])); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" index 471bd94..d8dd9ed 100644 --- "a/build/solutions/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(num1, num2) { return num1 % num2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" "b/build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" rename to "build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" index 31c9260..bdc69b8 100644 --- "a/build/solutions/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(age) { return 2022 - age + 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" rename to "build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" index 4c69c58..9b3eb8c 100644 --- "a/build/solutions/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(common) { return isAP(common) ? common[common.length - 1] + common[1] - common[0] : common[common.length - 1] * (common[1] / common[0]); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" index 03de0fb..de2a5ee 100644 --- "a/build/solutions/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -16,4 +16,4 @@ function solution(polynomial) { const plus = x !== '' && num !== '' ? ' + ' : ''; return x + plus + num; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220/codeisneverodd.js" "b/build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200 \354\206\214\353\254\270\354\236\220/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220/codeisneverodd.js" rename to "build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200 \354\206\214\353\254\270\354\236\220/codeisneverodd.js" diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" rename to "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" index 5446c6a..2ed849b 100644 --- "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(num1, num2) { return num1 * num2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" rename to "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" index cd5418a..86ea34c 100644 --- "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(num1, num2) { return Math.floor((num1 / num2) * 1000); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" rename to "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" index 456a44d..3c3dd1e 100644 --- "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(num1, num2) { return num1 - num2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" rename to "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" diff --git "a/build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" index ad80462..f23b44f 100644 --- "a/build/solutions/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" @@ -6,4 +6,4 @@ function solution(score) { .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a)); return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" "b/build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" rename to "build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" index 0f4877c..79764a4 100644 --- "a/build/solutions/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" @@ -2,4 +2,4 @@ function solution(id_pw, db) { const [id, pw] = id_pw; if (!db.find(([_id]) => _id === id)) return 'fail'; return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw'; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" "b/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" rename to "build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" index 8e53237..3921adb 100644 --- "a/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(array, height) { return array.filter(a => a > height).length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" "b/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" rename to "build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" index e89a61e..6341132 100644 --- "a/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" @@ -10,4 +10,4 @@ function solution(letter) { .split(' ') .map(l => morse[l]) .join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" "b/build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" index bbbe8c5..af96994 100644 --- "a/build/solutions/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(my_string) { return my_string.replace(/[aeiou]/g, ''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" index d15a720..102c9f9 100644 --- "a/build/solutions/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(num1, num2) { return Math.floor(num1 / num2); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" index 44bbf33..a2dc148 100644 --- "a/build/solutions/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(my_string, n) { return [...my_string].map(char => char.repeat(n)).join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" index 50bd5cc..72ffd26 100644 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(my_string) { return eval(my_string); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" index bc890f0..6881f84 100644 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(my_string) { return [...my_string].reverse().join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" index 6468be1..a8b222e 100644 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" @@ -6,4 +6,4 @@ function solution(A, B) { } return -1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" index af7729e..b94a668 100644 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(my_string) { .match(/[0-9]/g) .map(str => +str) .sort((a, b) => a - b); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" index 4050cb3..77cca4e 100644 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(my_string) { .map(char => char.toLowerCase()) .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) .join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" rename to "build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" index ea9090a..aeb1248 100644 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(str1, str2) { return str1.includes(str2) ? 1 : 2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 9268c20..d553862 100644 --- "a/build/solutions/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(numbers) { return numbers.map(n => n * 2); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" index 2be0b8d..2d33ea8 100644 --- "a/build/solutions/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(num_list) { return num_list.reverse(); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" rename to "build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" index 4c06f2e..878b4d9 100644 --- "a/build/solutions/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(strlist) { return strlist.map(s => s.length); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" index cd58694..464f79c 100644 --- "a/build/solutions/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(numbers, num1, num2) { return numbers.slice(num1, num2 + 1); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" index b9c9a79..a12e1b1 100644 --- "a/build/solutions/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" @@ -2,4 +2,4 @@ function solution(numbers, direction) { return direction === 'right' ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)] : [...numbers.slice(1), numbers[0]]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" rename to "build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" index 1732e52..025ae42 100644 --- "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(s1, s2) { return s1.filter(s => s2.includes(s)).length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" rename to "build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" index 2e262da..572c1cc 100644 --- "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(numbers) { return numbers.reduce((a, c) => a + c, 0) / numbers.length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" rename to "build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" index 475ded2..00c1f4e 100644 --- "a/build/solutions/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" +++ "b/build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(denum1, num1, denum2, num2) { const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b)); const gcd = getGCD(denum, num); return [denum / gcd, num / gcd]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" rename to "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" index 79b9622..a3216cc 100644 --- "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(sides) { const max = Math.max(...sides); return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" rename to "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" index 58761b3..5e57afc 100644 --- "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(sides) { return Math.min(...sides) * 2 - 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" "b/build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" similarity index 95% rename from "build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" rename to "build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" index 77a9bc3..7d81def 100644 --- "a/build/solutions/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(n, t) { return n * 2 ** t; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" "b/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" index 14b4d29..0dd3b5b 100644 --- "a/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" @@ -23,4 +23,4 @@ const funcC = async () => { }; window.addEventListener('DOMContentLoaded', async () => { console.log(await funcC()); -}); +}); \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" index b3fd964..3eb8645 100644 --- "a/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" @@ -5,4 +5,4 @@ function solution(n) { } if (n % Math.sqrt(n) === 0) count += 1; return count; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" rename to "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" index 6836f7d..22e52cc 100644 --- "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(my_string) { return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" rename to "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" index ff760aa..cb7be2d 100644 --- "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(my_string) { const nums = my_string.match(/[0-9]+/g); return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" index 5d38198..a06524e 100644 --- "a/build/solutions/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(num1, num2) { return num1 === num2 ? 1 : -1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" index 6c5f022..612ef6c 100644 --- "a/build/solutions/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(num, k) { const index = [...('' + num)].findIndex(n => +n === k); return index === -1 ? -1 : index + 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" "b/build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" rename to "build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" index 2570aca..509c4da 100644 --- "a/build/solutions/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(money) { return [Math.floor(money / 5500), money % 5500]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" "b/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" index e103c21..8cc13a8 100644 --- "a/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" @@ -24,4 +24,4 @@ function solution(board) { } } return count; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" "b/build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" rename to "build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" index 94fd584..576a3bc 100644 --- "a/build/solutions/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(cipher, code) { return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), ''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" index 88c9708..621a86a 100644 --- "a/build/solutions/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -5,4 +5,4 @@ function solution(n) { } if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)]; return answer.sort((a, b) => a - b); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" "b/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" index 6e95d1a..0403771 100644 --- "a/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(n, k) { return n * 12000 + (k - Math.floor(n / 10)) * 2000; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" "b/build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" rename to "build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" index 47c6a11..f9f1f83 100644 --- "a/build/solutions/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" @@ -2,4 +2,4 @@ function solution(num, total) { const numArr = Array.from({ length: num }, (_, i) => i); const sum = numArr.reduce((a, c) => a + c); return numArr.map(n => n - (sum - total) / num); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" "b/build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" rename to "build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" index 8363892..63cc07c 100644 --- "a/build/solutions/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" @@ -2,4 +2,4 @@ function solution(numbers) { const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 }; const regex = new RegExp(Object.keys(nums).join('|'), 'g'); return +numbers.replace(regex, key => nums[key]); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" index d354f14..ee84307 100644 --- "a/build/solutions/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(price) { if (price >= 300000) return Math.floor(price * 0.9); if (price >= 100000) return Math.floor(price * 0.95); return price; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" index dd68691..7d0e932 100644 --- "a/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" @@ -9,4 +9,4 @@ function solution(babbling) { }; return babbling.filter(b => canPronounce(b)).length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" "b/build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" rename to "build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" index b403da1..b7619b2 100644 --- "a/build/solutions/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(spell, dic) { const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230 \353\202\230\354\235\264/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264/codeisneverodd.js" rename to "build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230 \353\202\230\354\235\264/codeisneverodd.js" diff --git "a/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" index 7379134..eba7d3d 100644 --- "a/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" @@ -20,4 +20,4 @@ function solution(a, b) { }; return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" index 53f9e12..085b0f6 100644 --- "a/build/solutions/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(bin1, bin2) { return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" index 342dd09..4f9ba6e 100644 --- "a/build/solutions/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(my_string, num1, num2) { [str[num1], str[num2]] = [str[num2], str[num1]]; return str.join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" index d425f0e..b34fe52 100644 --- "a/build/solutions/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(n) { return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" index b607d24..5b3f033 100644 --- "a/build/solutions/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" @@ -2,4 +2,4 @@ function solution(my_str, n) { let result = []; for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)]; return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" "b/build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" rename to "build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" index 886e3ce..0c20fc5 100644 --- "a/build/solutions/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" @@ -8,4 +8,4 @@ function solution(n) { } return num; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" index 2f3bf31..e0b30d2 100644 --- "a/build/solutions/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -2,4 +2,4 @@ function solution(dot) { const [x, y] = dot; if (y > 0) return x > 0 ? 1 : 2; return x < 0 ? 3 : 4; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" index 57a0e8f..c24becf 100644 --- "a/build/solutions/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(n) { return Number.isInteger(Math.sqrt(n)) ? 1 : 2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" similarity index 95% rename from "build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" index 80a1c07..2667b22 100644 --- "a/build/solutions/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(M, N) { return M * N - 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" index c8b3d79..dfe38d5 100644 --- "a/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(box, n) { return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" index 0099921..fb13cc1 100644 --- "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(my_string) { return [...new Set(my_string)].join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" index b07a5fb..4620ee4 100644 --- "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(array, n) { return array.filter(a => a === n).length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" index f782bbd..ba80a60 100644 --- "a/build/solutions/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(array) { return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" index b8a9b9c..913fce9 100644 --- "a/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" @@ -10,4 +10,4 @@ rl.on('line', function (line) { input = line.split(' '); }).on('close', function () { for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i)); -}); +}); \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" index c7508d7..46e34d2 100644 --- "a/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(dots) { const width = Math.max(...xDots) - Math.min(...xDots); const height = Math.max(...yDots) - Math.min(...yDots); return width * height; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" index 46d02b0..bef7fec 100644 --- "a/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(emergency) { const sorted = [...emergency].sort((a, b) => b - a); return emergency.map(e => sorted.findIndex(s => s === e) + 1); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" rename to "build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" index aeabe7a..7dfda36 100644 --- "a/build/solutions/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(num_list) { const evenLength = num_list.filter(n => n % 2 === 0).length; return [evenLength, num_list.length - evenLength]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" "b/build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" rename to "build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" index 181171d..93e9fa3 100644 --- "a/build/solutions/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(n) { if (i % 2 === 1) nums = [...nums, i]; } return nums; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" "b/build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" rename to "build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" index d03dff6..4b2aa7f 100644 --- "a/build/solutions/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(n) { if (i % 2 === 0) answer += i; } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" rename to "build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" index df18bad..101f21b 100644 --- "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(numbers) { const sorted = numbers.sort((a, b) => a - b); return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" rename to "build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" index ed1e14e..c9c6096 100644 --- "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" @@ -1,4 +1,4 @@ function solution(numbers) { const [first, second, ...rest] = numbers.sort((a, b) => b - a); return first * second; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" index af187ff..8605514 100644 --- "a/build/solutions/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(array) { const max = Math.max(...Object.values(counts)); const modes = Object.keys(counts).filter(key => counts[key] === max); return modes.length === 1 ? +modes[0] : -1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" "b/build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" rename to "build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" index 3ddb663..98a7917 100644 --- "a/build/solutions/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" @@ -5,4 +5,4 @@ function solution(chicken) { return service + order(service + (coupons % 10)); }; return order(chicken); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" "b/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" rename to "build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" index 4fb32c1..80334e9 100644 --- "a/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" @@ -19,4 +19,4 @@ function solution(keyinput, board) { }); return pos; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" "b/build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" rename to "build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" index 2b81e1c..da760e2 100644 --- "a/build/solutions/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270/codeisneverodd.js" +++ "b/build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" @@ -2,4 +2,4 @@ function solution(s) { const arr = s.split(' '); while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2); return arr.map(n => +n).reduce((a, c) => a + c, 0); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" "b/build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" rename to "build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" index d89fc4c..46bc5f3 100644 --- "a/build/solutions/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(numlist, n) { if (aDiff === bDiff) return b - a; return aDiff - bDiff; }); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" index 7c98d35..cc6a0d7 100644 --- "a/build/solutions/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(my_string, letter) { return my_string.replaceAll(letter, ''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" "b/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" index 6581749..8ccd6d8 100644 --- "a/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" @@ -3,4 +3,4 @@ function solution(n) { for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i; return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" "b/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" index d2b45a3..b6e70ff 100644 --- "a/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(message) { return message.length * 2; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" "b/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" index adbb802..66a0001 100644 --- "a/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" @@ -9,4 +9,4 @@ function solution(dots) { }) ? 1 : 0; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" similarity index 96% rename from "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" rename to "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" index c9ffc15..363990b 100644 --- "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(n) { return Math.floor((n - 1) / 7) + 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" rename to "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" index a2b7622..69fefc4 100644 --- "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" @@ -6,4 +6,4 @@ function solution(n) { }; return getLCM(n, 6) / 6; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" rename to "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" index 3c815ad..0247993 100644 --- "a/build/solutions/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" @@ -1,3 +1,3 @@ function solution(slice, n) { return Math.floor((n - 1) / slice) + 1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" "b/build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" rename to "build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" index 305ff8e..f7a2de2 100644 --- "a/build/solutions/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" @@ -4,4 +4,4 @@ function solution(s) { .filter(key => count[key] === 1) .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) .join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" rename to "build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" index b82db9f..6ce099d 100644 --- "a/build/solutions/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" @@ -13,4 +13,4 @@ function solution(n) { } return count; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" deleted file mode 100644 index ea9bc73..0000000 --- "a/build/solutions/level-1/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" "b/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" index 5d7b168..dade482 100644 --- "a/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" +++ "b/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" @@ -8,5 +8,4 @@ function solution(a, b) { // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌 passedDays += b - 1; return week[(5 + passedDays) % 7]; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/2016\353\205\204/codeisneverodd.js" "b/build/solutions/level-1/2016\353\205\204/codeisneverodd.js" new file mode 100644 index 0000000..cb0ee09 --- /dev/null +++ "b/build/solutions/level-1/2016\353\205\204/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(a, b) { + let count = 0; + const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; + const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + for (let i = 1; i < a; i++) count += month[i]; + count += b; + return day[(count + 4) % 7]; // 금요일 부터 1일 이므로 +} \ No newline at end of file diff --git "a/build/solutions/level-1/2016\353\205\204/prove-ability.js" "b/build/solutions/level-1/2016\353\205\204/prove-ability.js" index fcc6dc0..9f59709 100644 --- "a/build/solutions/level-1/2016\353\205\204/prove-ability.js" +++ "b/build/solutions/level-1/2016\353\205\204/prove-ability.js" @@ -12,4 +12,4 @@ function solution(a, b) { // totalDays 와 해당 일을 더해주고 7로 나눈 나머지 const dayIndex = (totalDays + b) % 7; return days[dayIndex]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/2016\353\205\204/yongchanson.js" "b/build/solutions/level-1/2016\353\205\204/yongchanson.js" index eb80093..167ce11 100644 --- "a/build/solutions/level-1/2016\353\205\204/yongchanson.js" +++ "b/build/solutions/level-1/2016\353\205\204/yongchanson.js" @@ -11,5 +11,4 @@ function solution(a, b) { sum += month[i]; return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다. -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" rename to "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" index 5009283..92ee17f 100644 --- "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" @@ -13,5 +13,4 @@ const decimalToTernaryReversed = (num) => { } ternary += num.toString(); return ternary; -}; - +}; \ No newline at end of file diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" similarity index 96% rename from "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" index 52360c0..d894103 100644 --- "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" @@ -2,6 +2,4 @@ function solution(n) { var answer = n.toString(3).split("").reverse().join(""); return parseInt(answer, 3); -} - - +} \ No newline at end of file diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" similarity index 97% rename from "build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" rename to "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" index e15f522..a642e19 100644 --- "a/build/solutions/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" @@ -1,3 +1,3 @@ function solution(n) { return parseInt(n.toString(3).split("").reverse().join(""), 3) -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" index 5632b2a..6bb46f1 100644 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" @@ -10,4 +10,4 @@ function solution(array, commands) { ); } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..00a6a06 --- /dev/null +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" @@ -0,0 +1,6 @@ +function solution(array, commands) { + return commands.map((cmd) => { + const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b); + return arrCmd[cmd[2] - 1]; + }); +} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" index acd9243..32a27c3 100644 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" @@ -1,4 +1,3 @@ - function solution(array, commands) { let answer = []; for (let i = 0; i < commands.length; i++) { @@ -7,5 +6,4 @@ function solution(array, commands) { answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]); } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" index 101242d..74bb8d0 100644 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" @@ -9,5 +9,4 @@ function solution(array, commands) { result.push(temp[commands[i][2] - 1]); } return result; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" index 5a3c5cb..841af4c 100644 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" +++ "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" @@ -5,5 +5,4 @@ function solution(array, commands) { answer.push(su); }); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" new file mode 100644 index 0000000..946059a --- /dev/null +++ "b/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" @@ -0,0 +1,23 @@ +function solution(dartResult) { + const regex = /\d{1,2}[SDT]{1}[*|#]?/g; + let result = []; + for (const dart of dartResult.match(regex)) { + const game = [...dart.split(/([SDT]{1})/)]; + const score = game[0]; + let bonus = 1; + let option = 1; + if (game[1] === "S") bonus = 1; + if (game[1] === "D") bonus = 2; + if (game[1] === "T") bonus = 3; + + if (game[2] === "*") { + if (result.length !== 0) result[result.length - 1] *= 2; + option = 2; + } + if (game[2] === "#") option = -1; + + result.push(score ** bonus * option); + } + + return result.reduce((a, b) => a + b); +} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" "b/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" rename to "build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" index dd38907..283de5a 100644 --- "a/build/solutions/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204/jaewon1676.js" +++ "b/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" @@ -29,4 +29,4 @@ function solution(dartResult) { //3개의 점수 합산 answer = cnt.reduce((acc, cur) => acc + cur, 0); return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" "b/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" rename to "build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" index 00b7f0e..daff149 100644 --- "a/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" +++ "b/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" @@ -20,5 +20,4 @@ function solution(n, arr1, arr2) { } answer = answer2D.map((row) => row.join("")); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" "b/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" similarity index 97% rename from "build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" rename to "build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" index a1ff0c4..9e892cf 100644 --- "a/build/solutions/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" +++ "b/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" @@ -19,4 +19,4 @@ function solution(n, arr1, arr2) { /* 풀이 과정 1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다. 2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다. -3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/ +3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/ \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" rename to "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" index da131d6..0d9c333 100644 --- "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/chaerin-dev.js" +++ "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" @@ -7,5 +7,4 @@ function solution(x, n) { x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가 } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" new file mode 100644 index 0000000..cf1c3d9 --- /dev/null +++ "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(x, n) { + return Array.from(Array(n), (_, index) => x * (index + 1)); +} \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" similarity index 98% rename from "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" rename to "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" index 8e83739..fba7202 100644 --- "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/jaewon1676.js" +++ "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" @@ -5,5 +5,4 @@ function solution(n) { i % 2 == 0 ? (str = str + "수") : (str = str + "박"); } return str; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" rename to "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" index e3d8eed..259c816 100644 --- "a/build/solutions/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220/prove-ability.js" +++ "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" @@ -8,4 +8,4 @@ function solution(x, n) { i++; } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" similarity index 97% rename from "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" index 1f427ca..163f3c9 100644 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" @@ -2,5 +2,4 @@ function solution(s) { return s.length % 2 ? s[parseInt(s.length / 2)] : s[s.length / 2 - 1] + s[s.length / 2]; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..371c2cd --- /dev/null +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,5 @@ +function solution(s) { + return s.length % 2 !== 0 + ? s[Math.floor(s.length / 2)] + : s.slice(s.length / 2 - 1, s.length / 2 + 1); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" index 93fc145..cad7fdd 100644 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" @@ -7,4 +7,4 @@ function solution(s) { answer = s[parseInt(s.length / 2)]; // 홀수일 경우 } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" index 53d44c9..a2a1fbf 100644 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" @@ -7,5 +7,4 @@ function solution(s) { // 홀수인 경우 - 중간지점 else answer = s[point]; return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" similarity index 98% rename from "build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" rename to "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" index a983d46..e4f54bf 100644 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" +++ "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" @@ -6,5 +6,4 @@ function solution(s) { s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" rename to "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" index 4cec076..9091f00 100644 --- "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/chaerin-dev.js" +++ "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" @@ -3,5 +3,4 @@ function solution(arr) { // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용 // 첫 번째 요소의 경우 undefined와 비교 return arr.filter((item, index) => item !== arr[index - 1]); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" rename to "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" index 441f5fa..3ef3014 100644 --- "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/codeisneverodd.js" +++ "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" @@ -5,5 +5,4 @@ function solution(arr) { answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" rename to "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" index 980ab41..c353a43 100644 --- "a/build/solutions/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264/prove-ability.js" +++ "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" @@ -14,4 +14,4 @@ function solution(arr) { } answer.push(arr[arr.length - 1]); return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" similarity index 52% rename from "build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" rename to "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" index 98a999b..ce8a792 100644 --- "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/codeisneverodd.js" +++ "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" @@ -6,14 +6,4 @@ function solution(arr, divisor) { answer.length === 0 ? answer.push(-1) : null; answer.sort((a, b) => a - b); return answer; -} - -//정답 3. chaerin-dev -function solution(arr, divisor) { - let answer = []; - arr.forEach((e) => { - if (e % divisor === 0) answer.push(e); - }); - return answer.length ? answer.sort((a, b) => a - b) : [-1]; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" new file mode 100644 index 0000000..dc80adc --- /dev/null +++ "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" @@ -0,0 +1,7 @@ +function solution(arr, divisor) { + let answer = []; + arr.forEach((e) => { + if (e % divisor === 0) answer.push(e); + }); + return answer.length ? answer.sort((a, b) => a - b) : [-1]; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" similarity index 98% rename from "build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" rename to "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" index 88caaad..a5a2d7a 100644 --- "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264/prove-ailbity.js" +++ "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" @@ -2,4 +2,4 @@ function solution(arr, divisor) { var answer = []; arr.forEach((v) => v % divisor === 0 && answer.push(v)) return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b); -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..078e719 --- /dev/null +++ "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(n) { + + let answer = 0; + for (let divisor = n - 1; divisor >= 2; divisor--) { + if (n % divisor === 1) answer = divisor; + } + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" similarity index 96% rename from "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" index bcf5526..eb35178 100644 --- "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" @@ -4,6 +4,4 @@ function solution(n) { if(n%i === 1) return i // 나머지가 1이 되면 i를 출력합니다 } return -1 -} - - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/prove-ability.js" index 090cddf..39760d1 100644 --- "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/prove-ability.js" @@ -9,5 +9,4 @@ function solution(n) { i++; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/chaerin-dev.js" "b/build/solutions/level-1/\353\202\264\354\240\201/chaerin-dev.js" index 7cb44be..891cd62 100644 --- "a/build/solutions/level-1/\353\202\264\354\240\201/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\202\264\354\240\201/chaerin-dev.js" @@ -1,3 +1,3 @@ function solution(a, b) { return a.reduce((acc, e, i) => acc + e * b[i], 0); -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" "b/build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" new file mode 100644 index 0000000..7407dcd --- /dev/null +++ "b/build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(a, b) { + return a.reduce((x, y, i) => x + y * b[i], 0); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" "b/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" index 32931ee..74c1300 100644 --- "a/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" +++ "b/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" @@ -4,5 +4,4 @@ function solution(a, b) { answer += (a[i] * b[i]) // a[i]와 b[i]를 곱한다. } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/prove-ability.js" "b/build/solutions/level-1/\353\202\264\354\240\201/prove-ability.js" index 597711a..ac8b3b6 100644 --- "a/build/solutions/level-1/\353\202\264\354\240\201/prove-ability.js" +++ "b/build/solutions/level-1/\353\202\264\354\240\201/prove-ability.js" @@ -6,5 +6,4 @@ function solution(a, b) { } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/yongchanson.js" "b/build/solutions/level-1/\353\202\264\354\240\201/yongchanson.js" index b7703c6..d1732c8 100644 --- "a/build/solutions/level-1/\353\202\264\354\240\201/yongchanson.js" +++ "b/build/solutions/level-1/\353\202\264\354\240\201/yongchanson.js" @@ -5,5 +5,4 @@ function solution(a, b) { answer += a[i] * b[i]; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..b3e314f --- /dev/null +++ "b/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,9 @@ +function solution(numbers) { + const answer = []; + for (let i = 0; i < numbers.length; i++) { + for (let j = i + 1; j < numbers.length; j++) { + answer.push(numbers[i] + numbers[j]); + } + } + return [...new Set(answer)].sort((a, b) => a - b); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" index f4ec29f..6657c2a 100644 --- "a/build/solutions/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" @@ -8,5 +8,4 @@ function solution(numbers) { } return answer.sort((a, b) => a - b); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" similarity index 97% rename from "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" rename to "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" index 4c7380d..8f84c56 100644 --- "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" @@ -4,5 +4,4 @@ function solution(a, b) { answer += i; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" new file mode 100644 index 0000000..8f84c56 --- /dev/null +++ "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" @@ -0,0 +1,7 @@ +function solution(a, b) { + let answer = 0; + for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { + answer += i; + } + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" rename to "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" index ee4f444..c667026 100644 --- "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/jaewon1676.js" +++ "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" @@ -9,4 +9,4 @@ function solution(a, b) { sum += i } return sum; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" rename to "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" index ed0d8c9..63d3980 100644 --- "a/build/solutions/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251/prove-ability.js" +++ "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" @@ -1,4 +1,3 @@ function solution(a, b) { return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" rename to "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" index 80e8b96..23410fd 100644 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" @@ -8,4 +8,4 @@ function solution(lottos, win_nums) { let maxRank = Math.min(7 - (winCount + zeroCount), 6); let minRank = Math.min(7 - winCount, 6); return [maxRank, minRank]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" rename to "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" index 198ee78..0170319 100644 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/codeisneverodd.js" +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" @@ -25,5 +25,4 @@ function hit(lottos, win_nums) { win_nums.indexOf(element) === -1 ? null : (result += 1); }); return result; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" rename to "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" index 8815d4f..c40fa96 100644 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/jaewon1676.js" +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" @@ -17,5 +17,4 @@ function solution(lottos, win_nums) { if (min == 7) min = 6; answer = [min, max]; return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" rename to "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" index 427be9b..49fc515 100644 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/prove-ability.js" +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" @@ -20,5 +20,4 @@ function solution(lottos, win_nums) { if (min > 5) min = 6; return [max, min]; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" similarity index 99% rename from "build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" rename to "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" index 7d71795..ae82632 100644 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204/yongchanson.js" +++ "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" @@ -26,5 +26,4 @@ function solution(lottos, win_nums) { basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" new file mode 100644 index 0000000..270280b --- /dev/null +++ "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" @@ -0,0 +1,25 @@ +function solution(answers) { + const answer = []; + const firstPattern = [1, 2, 3, 4, 5]; + const firstPLength = firstPattern.length; + const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5]; + const secondPLength = secondPattern.length; + const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; + const thirdLength = thirdPattern.length; + let correctCount = [0, 0, 0]; + + for (let i = 0, len = answers.length; i < len; i++) { + if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1; + if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1; + if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1; + } + + const maxScore = Math.max(...correctCount); + for (let i = 0; i < 3; i++) { + if (correctCount[i] === maxScore) answer.push(i + 1); + } + + return answer; +} + +// 완벽한 정답이 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" index 6fa7f47..39afe4a 100644 --- "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" +++ "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" @@ -20,5 +20,4 @@ function solution(answers) { if (score[i] === Math.max(...score)) answer.push(i+1) } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/prove-ability.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/prove-ability.js" index 6d2240a..9626596 100644 --- "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/prove-ability.js" +++ "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/prove-ability.js" @@ -32,5 +32,4 @@ function solution(answers) { } return result; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" index 21b8607..c5daa0b 100644 --- "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" +++ "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" @@ -17,5 +17,4 @@ function solution(answers) { } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" similarity index 85% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" index ec5028d..f4d7aa2 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" @@ -5,5 +5,4 @@ function solution(s) { } // 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다. // Ex. "ababb".split("a") 의 결과는 ["", "b", "bb"] -// => 즉, "a"의 갯수는 3에서 1을 뺀 2 - +// => 즉, "a"의 갯수는 3에서 1을 뺀 2 \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..47021f6 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" @@ -0,0 +1,5 @@ +function solution(s) { + const countP = [...s.matchAll(/p/gi)].length; + const countY = [...s.matchAll(/y/gi)].length; + return countP === countY; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/prove-ability.js" similarity index 100% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/prove-ability.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/prove-ability.js" diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" similarity index 97% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" index 6a42af1..6187068 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230/yongchanson.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" @@ -3,5 +3,4 @@ function solution(s) { y = s.toLowerCase().split("y").length; return p == y ? true : false; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" index 3b402ef..4b799bb 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" @@ -6,5 +6,4 @@ function solution(strings, n) { // 인덱스 n번째 글자가 같으면 사전순 정렬 else return a > b ? 1 : -1; }); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..9788f49 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(strings, n) { + return strings.sort((a, b) => { + if (a[n] < b[n]) return -1; + if (a[n] > b[n]) return 1; + if (a[n] === b[n]) return a < b ? -1 : 1; + return 0; + }); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" index 0a13267..f42c9fd 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" @@ -8,4 +8,4 @@ function solution(strings, n) { }); return strings; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" similarity index 95% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" index a2202d1..6b92f41 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" @@ -1,5 +1,3 @@ function solution(s) { return s.split("").sort((a, b) => (a < b ? 1 : -1)).join(""); -} - - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..1931eed --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,10 @@ +function solution(s) { + return s + .split("") + .sort((a, b) => { + if (a < b) return 1; + if (a > b) return -1; + return 0; + }) + .join(""); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" similarity index 95% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" index 204d65e..f59aa60 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" @@ -3,5 +3,4 @@ function solution(s) { } // split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다. // 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다. -// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다. - +// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" similarity index 95% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" index e07d09a..a31aec0 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" @@ -1,4 +1,3 @@ function solution(s) { return s.split("").sort().reverse().join("") -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" index fc5d1bf..e789b8e 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" @@ -8,5 +8,4 @@ function solution(s) { // 위의 모든 조건에 포함되지 않으면 // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환 return true; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" new file mode 100644 index 0000000..f5af6b1 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(s) { + return s.search(/\D/g) < 0 && (s.length === 4 || s.length === 6); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" index 2747f91..8bfb3dc 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/prove-ability.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" @@ -10,5 +10,4 @@ function solution(s) { } else return false; return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" similarity index 99% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" index 0686a5d..a06892b 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/soulhn.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" @@ -3,4 +3,4 @@ function solution(s) { return !s.split("").some((i) => isNaN(parseInt(i, 10))); //early return 제외사항 먼저 처리 //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환 -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" similarity index 98% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" index ddd00f8..7755bdb 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270/yongchanson.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" @@ -7,5 +7,4 @@ function solution(s) { } return false; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" similarity index 93% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" index 8414c22..05e03c8 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" @@ -1,4 +1,3 @@ function solution(s) { return Number(s); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..cf9f240 --- /dev/null +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(s) { + return parseInt(s); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" similarity index 95% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" index 1d9d706..cf9f240 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" @@ -1,3 +1,3 @@ function solution(s) { return parseInt(s); -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" similarity index 92% rename from "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" index bd80f04..4512da1 100644 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" @@ -1,5 +1,3 @@ function solution(s) { return parseInt(s, 10); -} - - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" index 1eba0d8..ce0a05b 100644 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" @@ -4,5 +4,4 @@ function solution(price, money, count) { totalPrice += i * price; } return money > totalPrice ? 0 : totalPrice-money; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..e664b87 --- /dev/null +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,5 @@ +function solution(price, money, count) { + let totalCost = 0; + for (let i = 1; i <= count; i++) totalCost += price * i; + return totalCost <= money ? 0 : totalCost - money; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" similarity index 98% rename from "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" index 7f4753a..be5b851 100644 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" @@ -7,5 +7,4 @@ function solution(price, money, count) { return 0; } return sum_price - money; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" index cf04d4a..32eb65d 100644 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" @@ -5,5 +5,4 @@ function solution(price, money, count) { } return sum < money ? 0 : sum - money; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" similarity index 98% rename from "build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" rename to "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" index f5a7d1a..172d18b 100644 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" +++ "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" @@ -12,5 +12,4 @@ function solution(price, money, count) { answer = sum - money; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" similarity index 96% rename from "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" index 0ec33e0..cf88650 100644 --- "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" @@ -1,4 +1,3 @@ function solution(seoul) { return `김서방은 ${seoul.indexOf("Kim")}에 있다`; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..cf88650 --- /dev/null +++ "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(seoul) { + return `김서방은 ${seoul.indexOf("Kim")}에 있다`; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/jaewon1676.js" similarity index 100% rename from "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/jaewon1676.js" diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" similarity index 97% rename from "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" index cd56308..679dd91 100644 --- "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" @@ -1,4 +1,3 @@ function solution(seoul) { return `김서방은 ${seoul.findIndex(v => v === "Kim")}에 있다`; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" index b775f1a..5a4b412 100644 --- "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" @@ -7,5 +7,4 @@ function solution(survey, choices) { Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point); }); return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join(''); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" similarity index 99% rename from "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" rename to "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" index dcc4c52..15b41cf 100644 --- "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" +++ "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" @@ -11,4 +11,4 @@ function solution(survey, choices) { return a; }, {}); return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join(''); -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" similarity index 99% rename from "build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" rename to "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" index 7acacb9..6091d41 100644 --- "a/build/solutions/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" +++ "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" @@ -38,5 +38,4 @@ function solution(survey, choices) { } return result; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" index 962d210..a4c347e 100644 --- "a/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" @@ -28,4 +28,4 @@ function solution(nums) { if (isPrime(sum)) answer++; }); return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..e7be628 --- /dev/null +++ "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,21 @@ +function solution(nums) { + let answer = 0; + const length = nums.length; + for (let i = 0; i < length; i++) { + for (let j = i + 1; j < length; j++) { + for (let k = j + 1; k < length; k++) { + const sum = nums[i] + nums[j] + nums[k]; + if (isPrime(sum)) answer += 1; + } + } + } + + return answer; +} + +function isPrime(num) { + for (let i = 2; i <= Math.sqrt(num); i++) { + if (num % i === 0) return false; + } + return num >= 2; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" similarity index 94% rename from "build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" index 8ebd1ce..11a67bc 100644 --- "a/build/solutions/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -23,5 +23,4 @@ const isPrime = (n) => { } return true; } -// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다. - +// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" index f9f23be..cae5da1 100644 --- "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" @@ -14,5 +14,4 @@ function solution(n) { if (isPrime(i)) answer++; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..518085e --- /dev/null +++ "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" @@ -0,0 +1,36 @@ +function solution(numbers) { + let answer = 0; + const numArr = numbers.split(""); + const permutationAll = []; + for (let r = 1; r <= numbers.length; r++) { + const permutationR = Permutation(numArr, r).map((arr) => + parseInt(arr.join("")) + ); + for (let i = 0; i < permutationR.length; i++) + permutationAll.push(permutationR[i]); + } + const permutationSet = [...new Set(permutationAll)]; + for (const number of permutationSet) { + if (isPrime(number)) answer += 1; + } + return answer; +} + +function Permutation(arr, r) { + const result = []; + if (r === 1) return arr.map((num) => [num]); + arr.forEach((fixed, index, org) => { + const rest = [...org.slice(0, index), ...org.slice(index + 1)]; + const permutation = Permutation(rest, r - 1); + const attached = permutation.map((numbers) => [fixed, ...numbers]); + result.push(...attached); + }); + return result; +} + +function isPrime(num) { + for (let i = 2; i <= Math.sqrt(num); i++) { + if (num % i === 0) return false; + } + return num >= 2; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" index 04af6f0..2963004 100644 --- "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" @@ -15,4 +15,4 @@ function solution(n) { // filter를 이용해 0이아닌 수들의 개수를 return합니다. return arr.filter(v => v!==0).length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" index b5c4bdf..e6b2994 100644 --- "a/build/solutions/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" @@ -16,5 +16,4 @@ function solution(n) { } return count; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" rename to "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" index ff72755..921f2be 100644 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" @@ -1,5 +1,4 @@ function solution(n) { // "수박"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환 return '수박'.repeat(n).substr(0, n); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" new file mode 100644 index 0000000..c7cc934 --- /dev/null +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" @@ -0,0 +1,7 @@ +function solution(n) { + let answer = ''; + for (let i = 0; i < n; i++) { + answer += i % 2 === 0 ? '수' : '박'; + } + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" similarity index 98% rename from "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" rename to "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" index b3510a0..1531e21 100644 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/jaewon1676.js" +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" @@ -5,5 +5,4 @@ function solution(n) { i % 2 == 0 ? (str = str + '수') : (str = str + '박'); } return str; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" similarity index 97% rename from "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" rename to "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" index 618c26b..282a92d 100644 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/prove-ability.js" +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" @@ -3,5 +3,4 @@ function solution(n) { answer = '수박'.repeat(n / 2); if (n % 2 !== 0) answer += '수'; return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" similarity index 97% rename from "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" rename to "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" index 67a9d85..b43c4ba 100644 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230/yongchanson.js" +++ "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" @@ -1,3 +1,3 @@ function solution(n) { return '수박'.repeat(n / 2) + '수'.repeat(n % 2); -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" rename to "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" index a72e37c..ec4e990 100644 --- "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" @@ -11,5 +11,4 @@ function solution(s) { .replace(/eight/g, 8) .replace(/nine/g, 9); return parseInt(s); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" rename to "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" index ecf2fb8..12fa684 100644 --- "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/codeisneverodd.js" +++ "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" @@ -19,5 +19,4 @@ function solution(s) { } answer = Number(answerString); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" rename to "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" index 799b49d..5e32adf 100644 --- "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/jaewon1676.js" +++ "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" @@ -14,5 +14,4 @@ function solution(s) { answer = Number(s); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" similarity index 99% rename from "build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" rename to "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" index a77f4ed..55dadb9 100644 --- "a/build/solutions/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264/yongchanson.js" +++ "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" @@ -17,4 +17,4 @@ function solution(s) { s = s.replace(en[p], p); } return Number(s); -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" similarity index 99% rename from "build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" rename to "build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" index 5f07388..aa5d8be 100644 --- "a/build/solutions/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215/ssi02014.js" +++ "b/build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" @@ -1,4 +1,3 @@ - /** * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화 * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 diff --git "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" rename to "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" index b6db8a7..4191a08 100644 --- "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" @@ -20,6 +20,4 @@ function solution(s, n) { } } return result; -} - - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" new file mode 100644 index 0000000..a66e7a5 --- /dev/null +++ "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" @@ -0,0 +1,14 @@ +function solution(s, n) { + return s + .split("") + .map((element) => { + if (element === " ") return " "; + const code = element.charCodeAt(0); + if ((code + n > 90 && code <= 90) || code + n > 122) { + return String.fromCharCode(code + n - 26); + } else { + return String.fromCharCode(code + n); + } + }) + .join(""); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" rename to "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" index f075a39..813c969 100644 --- "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/jaewon1676.js" +++ "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" @@ -20,5 +20,4 @@ function solution(s, n) { 소문자 아스키코드는 97이 a, 122가 z이다. 3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다. -*/ - +*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" rename to "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" index 6557502..98462df 100644 --- "a/build/solutions/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270/prove-ability.js" +++ "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" @@ -14,5 +14,4 @@ function solution(s, n) { answer += String.fromCharCode(index + n) } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..0af228f --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" @@ -0,0 +1,26 @@ +function solution(id_list, report, k) { + // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리 + let set = new Set(report); + report = Array.from(set); + + // 1. report를 2차원배열로 변형 + // 2. 각 유저가 신고당한 횟수 cnt에 저장 + // 3. 각 유저를 신고한 유저 who에 저장 + let cnt = Array.from({ length: id_list.length }, i => 0); + let who = Array.from({ length: id_list.length }, i => []); + for (let i = 0; i < report.length; i++) { + report[i] = report[i].split(' '); + cnt[id_list.indexOf(report[i][1])]++; + who[id_list.indexOf(report[i][1])].push(report[i][0]); + } + + // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장 + let mail = Array.from({ length: id_list.length }, i => 0); + for (let i = 0; i < cnt.length; i++) { + if (cnt[i] < k) continue; + for (let j = 0; j < who[i].length; j++) { + mail[id_list.indexOf(who[i][j])]++; + } + } + return mail; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" similarity index 50% rename from "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" index 5df932b..8b63de7 100644 --- "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" @@ -1,30 +1,3 @@ -function solution(id_list, report, k) { - // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리 - let set = new Set(report); - report = Array.from(set); - - // 1. report를 2차원배열로 변형 - // 2. 각 유저가 신고당한 횟수 cnt에 저장 - // 3. 각 유저를 신고한 유저 who에 저장 - let cnt = Array.from({ length: id_list.length }, i => 0); - let who = Array.from({ length: id_list.length }, i => []); - for (let i = 0; i < report.length; i++) { - report[i] = report[i].split(' '); - cnt[id_list.indexOf(report[i][1])]++; - who[id_list.indexOf(report[i][1])].push(report[i][0]); - } - - // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장 - let mail = Array.from({ length: id_list.length }, i => 0); - for (let i = 0; i < cnt.length; i++) { - if (cnt[i] < k) continue; - for (let j = 0; j < who[i].length; j++) { - mail[id_list.indexOf(who[i][j])]++; - } - } - return mail; -} -//정답 6(🎩 refactor 220425) - codeisneverodd function solution(id_list, report, k) { //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장, //각 id를 신고한 사람 array를 reportedBy에 저장, @@ -55,4 +28,4 @@ function solution(id_list, report, k) { } } return id_list.map(id => mailCount[id]); -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" index 7d257b4..ba53517 100644 --- "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" @@ -26,5 +26,4 @@ function solution(id_list, report, k) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" index 40442de..a57bed4 100644 --- "a/build/solutions/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" @@ -24,5 +24,4 @@ function solution(id_list, report, k) { } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" similarity index 70% rename from "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" rename to "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" index 7ef27ab..66c2dff 100644 --- "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" @@ -26,20 +26,4 @@ function solution(new_id) { if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len); return new_id; -} -//정답 5(🎩 refactor 220425) - codeisneverodd -function solution(new_id) { - let answer = new_id - .toLowerCase() //step 1 - .replace(/[^0-9a-z._-]/g, '') // step 2 - .replace(/\.+/g, '.') //step 3 - .replace(/^\.|\.$/g, '') //step 4 - .replace(/^$/, 'a') //step 5 - .slice(0, 15) - .replace(/\.$/, ''); //step 6 - // step7 - if (answer.length === 1) answer = answer[0].repeat(3); - if (answer.length === 2) answer = answer + answer[1]; - - return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" new file mode 100644 index 0000000..e972944 --- /dev/null +++ "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(new_id) { + let answer = new_id + .toLowerCase() //step 1 + .replace(/[^0-9a-z._-]/g, '') // step 2 + .replace(/\.+/g, '.') //step 3 + .replace(/^\.|\.$/g, '') //step 4 + .replace(/^$/, 'a') //step 5 + .slice(0, 15) + .replace(/\.$/, ''); //step 6 + // step7 + if (answer.length === 1) answer = answer[0].repeat(3); + if (answer.length === 2) answer = answer + answer[1]; + + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" rename to "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" index 1de6eaa..8bcf8f4 100644 --- "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/jaewon1676.js" +++ "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" @@ -27,5 +27,4 @@ function solution(new_id) { answer += answer[answer.length - 1]; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" "b/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" deleted file mode 100644 index 604cc96..0000000 --- "a/build/solutions/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234/codeisneverodd.js" +++ /dev/null @@ -1,27 +0,0 @@ -function solution(new_id) { - let answer = ''; - answer = new_id.toLowerCase(); // step1 - const step2 = /[^0-9a-z._-]/g; - const step3 = /[.]+/g; - const step4_1 = /^\./; - const step4_2 = /\.$/; - answer = answer.replace(step2, ''); - answer = answer.replace(step3, '.'); - answer = answer.replace(step4_1, ''); - answer = answer.replace(step4_2, ''); - answer = answer === '' ? 'a' : answer; // step5 - answer = answer.length >= 16 ? answer.slice(0, 15) : answer; //step6 - answer = answer.replace(step4_2, ''); - switch ( - answer.length // step7 - ) { - case 1: - answer = answer + answer[0] + answer[0]; - break; - case 2: - answer = answer + answer[1]; - break; - } - return answer; -} - diff --git "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" index eb49e89..7ebe199 100644 --- "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" +++ "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" @@ -17,5 +17,4 @@ function solution(N, stages) { const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]); answer = sortedRate.map((stage) => stage[1]); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" index aeb991b..39c6e38 100644 --- "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" +++ "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" @@ -37,4 +37,4 @@ function solution(N, stages) { 2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다. 3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서. 4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다. -*/ +*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" rename to "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" index bf63614..700a96c 100644 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/codeisneverodd.js" +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" @@ -11,5 +11,4 @@ const divisorCounter = (num) => { const sqrt = Math.sqrt(num); for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1; return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2; -}; - +}; \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" similarity index 98% rename from "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" rename to "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" index 98c8eea..9f654e9 100644 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/jaewon1676.js" +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" @@ -10,5 +10,4 @@ function solution(left, right) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" similarity index 99% rename from "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" rename to "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" index 3eac026..dae01cf 100644 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210/prove-bility.js" +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" @@ -14,4 +14,4 @@ function solution(left, right) { else answer -= i; } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" rename to "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" index 28c045b..9c78b96 100644 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" @@ -8,5 +8,4 @@ function solution(n) { // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌 if (Number.isInteger(sqrtN)) result += sqrtN; return result; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" new file mode 100644 index 0000000..2374b31 --- /dev/null +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" @@ -0,0 +1,7 @@ +function solution(n) { + let answer = 0; + for (let divisor = 1; divisor <= n; divisor++) { + if (n % divisor === 0) answer += divisor; + } + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" similarity index 93% rename from "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" rename to "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" index 6689f46..5df213c 100644 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/jaewon1676.js" +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" @@ -11,6 +11,4 @@ function solution(n) { // 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다. // 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다. -// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다. - - +// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" similarity index 97% rename from "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" rename to "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" index 9725561..0ffdd07 100644 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/prove-ability.js" +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" @@ -4,5 +4,4 @@ function solution(n) { if(n % i === 0) answer += i; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" similarity index 99% rename from "build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" rename to "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" index 86e4de1..58221a0 100644 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251/yongchanson.js" +++ "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" @@ -14,5 +14,4 @@ function solution(n) { } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" similarity index 100% rename from "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" index 929befe..544348b 100644 --- "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -4,5 +4,4 @@ function solution(numbers) { answer += numbers.includes(i) ? 0 : i; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" similarity index 97% rename from "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" index 5feca9c..34b9d5c 100644 --- "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" @@ -6,5 +6,4 @@ function solution(numbers) { } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" similarity index 99% rename from "build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" rename to "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" index 58527db..1760a53 100644 --- "a/build/solutions/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260/yongchanson.js" +++ "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" @@ -19,5 +19,4 @@ function solution(numbers) { answer = arr_sum - numbers_sum; return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" "b/build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" new file mode 100644 index 0000000..80810c9 --- /dev/null +++ "b/build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" @@ -0,0 +1,10 @@ +function solution(d, budget) { + let answer = 0; + d.sort((a, b) => a - b); + for (const department of d) { + if (budget < department) break; + answer += 1; + budget -= department; + } + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" "b/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" index 6cb1cd7..5216476 100644 --- "a/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" @@ -12,4 +12,4 @@ function solution(d, budget) { // 최대한 많은 부서를 지원해야하기때문에 우리는 작은 수가 담긴 요소부터 빼줄 필요가 있습니다. // 배열 d를 오름차순 정렬하여 // budget을 가장 작은 수인 배열 d[0]부터 순서대로 빼주며 카운트 해줍니다. -// 예산이 0이거나, 마이너스일 경우를 if문으로 처리를 해주면 됩니다😁 \ No newline at end of file +// 예산이 0이거나, 마이너스일 경우를 if문으로 처리를 해주면 됩니다😁 \ No newline at end of file diff --git "a/build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" "b/build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" index 47ffabe..3ead920 100644 --- "a/build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" @@ -12,5 +12,4 @@ function solution(d, budget) { } return count; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" rename to "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" index 2f062d5..2a4d3e5 100644 --- "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" @@ -14,4 +14,4 @@ function solution(participant, completion) { } } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..ef93b52 --- /dev/null +++ "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(participant, completion) { + participant = participant.sort(); + completion = completion.sort(); + for (let i = 0; i < completion.length; i++) { + if (participant[i] !== completion[i]) return participant[i]; + } + return participant[participant.length - 1]; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" similarity index 96% rename from "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" rename to "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" index 422eb3a..7b69f32 100644 --- "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/hyosung.js" +++ "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" @@ -28,4 +28,4 @@ function solution(participant, completion) { return answer; } -//완벽한 정답이 아닙니다. +//완벽한 정답이 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" similarity index 92% rename from "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" rename to "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" index 3c487fc..15d3e45 100644 --- "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230/jaewon1676.js" +++ "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" @@ -17,4 +17,4 @@ function solution(participant, completion) { return participant[0]; } -//완벽한 정답이 아닙니다. +//완벽한 정답이 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" similarity index 100% rename from "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" similarity index 98% rename from "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" rename to "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" index 33ab0c4..cd1350e 100644 --- "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/codeisneverod.js" +++ "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" @@ -4,5 +4,4 @@ function solution(absolutes, signs) { answer += signs[i] ? absolutes[i] : -1 * absolutes[i]; } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..cd252f6 --- /dev/null +++ "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,6 @@ +function solution(absolutes, signs) { + return absolutes.reduce( + (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1), + 0 + ); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" similarity index 98% rename from "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" index 7e691ef..5a16408 100644 --- "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" @@ -9,5 +9,4 @@ function solution(absolutes, signs) { } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" index 63d469b..70d2da3 100644 --- "a/build/solutions/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" @@ -5,5 +5,4 @@ function solution(absolutes, signs) { answer += absolute; }) return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" index ae29c29..8627346 100644 --- "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" @@ -14,5 +14,4 @@ function solution(s) { flag = !flag; } return result; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..d14e7f5 --- /dev/null +++ "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,15 @@ +function solution(s) { + return s + .split(" ") + .map((word) => + word + .split("") + .map((char, index) => + index % 2 === 0 + ? word[index].toUpperCase() + : word[index].toLowerCase() + ) + .join("") + ) + .join(" "); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" index 6f6e677..0c9bf3b 100644 --- "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -30,6 +30,4 @@ function solution(s) { 대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 문자열을 연습하는데 좋은 문제입니다. -*/ - - +*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" index 1046e11..2448e65 100644 --- "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" @@ -9,4 +9,4 @@ function solution(s) { }) answer = answer.slice(0, answer.length - 1) return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" similarity index 97% rename from "build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" index d1cd10d..598dac3 100644 --- "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" @@ -5,5 +5,4 @@ function solution(n) { n = Math.floor(n / 10); } return result; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..dc043b8 --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,7 @@ +function solution(n) { + return n + .toString() + .split("") + .map((x) => parseInt(x)) + .reduce((acc, curr) => acc + curr, 0); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" index 4a7047f..3db5be8 100644 --- "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" @@ -6,4 +6,4 @@ function solution(n) { answer += parseInt(v); }); return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" index 4bae3f5..60db10a 100644 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" @@ -4,5 +4,4 @@ function solution(n) { .split("") .reverse() .map((item) => parseInt(item)); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..75c39cb --- /dev/null +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -0,0 +1,7 @@ +function solution(n) { + return n + .toString() + .split("") + .reverse() + .map((x) => parseInt(x)); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" similarity index 97% rename from "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" index 4818403..aac049c 100644 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -4,5 +4,4 @@ function solution(n) { .split("") .reverse() .map((o) => (o = parseInt(o)))); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" index 289be19..9af9665 100644 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" @@ -8,5 +8,4 @@ function solution(n) { .split("") .reverse() .map((v) => parseInt(v)); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" similarity index 99% rename from "build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" rename to "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" index 49efc1e..e6ef74d 100644 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260/yongchanson.js" +++ "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" @@ -6,4 +6,4 @@ function solution(n) { answer.push(slice); } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" index 1724d32..29c4f72 100644 --- "a/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" @@ -5,5 +5,4 @@ function solution(n) { arrN.sort((a, b) => b - a); // 배열 -> 문자열 -> 정수 return parseInt(arrN.join("")); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..c94889e --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,9 @@ +function solution(n) { + return parseInt( + n + .toString() + .split("") + .sort((a, b) => b - a) + .join("") + ); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" similarity index 97% rename from "build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" index 29b1e38..312f90c 100644 --- "a/build/solutions/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" @@ -1,4 +1,3 @@ function solution(n) { return parseInt(n.toString().split("").sort((a, b) => b - a).join(""), 10); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" rename to "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" index d0aef2e..ed91e46 100644 --- "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" @@ -3,5 +3,4 @@ function solution(n) { let x = Math.sqrt(n); // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환 return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" new file mode 100644 index 0000000..dfb7cd9 --- /dev/null +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(n) { + return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" similarity index 97% rename from "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" rename to "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" index 72c7112..c0b318b 100644 --- "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/jaewon1676.js" +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" @@ -3,5 +3,4 @@ function solution(n) { if (s ** 2 === n) return ((s+1) ** 2) return -1; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" rename to "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" index f4ea4af..35d3ae4 100644 --- "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/prove-ability.js" +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" @@ -5,5 +5,4 @@ function solution(n) { if(Number.isInteger(x)) return Math.pow(x + 1, 2) // 아니라면 -1 반환 return -1; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" similarity index 98% rename from "build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" rename to "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" index 71da258..16074f7 100644 --- "a/build/solutions/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204/yongchanson.js" +++ "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" @@ -2,4 +2,4 @@ function solution(n) { const sqrt = Math.sqrt(n); //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수 return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" index 84b150f..d03d5d4 100644 --- "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" @@ -3,5 +3,4 @@ function solution(arr) { arr.splice(arr.indexOf(Math.min(...arr)), 1); // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환 return arr.length ? arr : [-1]; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..9e2e89c --- /dev/null +++ "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,5 @@ +function solution(arr) { + const index = arr.indexOf(Math.min(...arr)); + arr.splice(index, 1); + return arr.length === 0 ? [-1] : arr; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" similarity index 95% rename from "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" index 4654d31..b8441ae 100644 --- "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" @@ -8,5 +8,4 @@ function solution(arr) { Math.min(...arr)은 1 arr.indexOf(1), 1이 있는 index가 3이므로 3 반환. arr.splice(3, 1) arr의 3번째 index만 제거 해준다. -arr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */ - +arr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" index 77ad734..75583f9 100644 --- "a/build/solutions/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" @@ -9,4 +9,4 @@ function solution(arr) { // 만약 arr 가 비어있다면 [-1] 반환 if (arr.length === 0) return [-1]; return arr; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" index 84529b8..f2b2e5a 100644 --- "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" @@ -14,5 +14,4 @@ process.stdin.on("data", (data) => { } // 정답 출력 console.log(answer); -}); - +}); \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" index 98c4c96..db280cb 100644 --- "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" @@ -15,5 +15,4 @@ process.stdin.on('data', data => { result += "\n"; } console.log(result) -}); - +}); \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" similarity index 99% rename from "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" rename to "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" index 43b3bf0..99e2263 100644 --- "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260/yongchanson.js" +++ "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" @@ -9,4 +9,4 @@ process.stdin.on("data", (data) => { <풀이과정> repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count); '*'.repeat(a) : *를 a만큼 반복한다. -*/ +*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" similarity index 95% rename from "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" rename to "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" index 2662249..4132441 100644 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" @@ -1,4 +1,3 @@ function solution(num) { return num % 2 == 0 ? "Even" : "Odd"; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..ca5fec1 --- /dev/null +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(num) { + return num % 2 === 0 ? "Even" : "Odd"; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" similarity index 98% rename from "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" rename to "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" index 0deca34..77b641d 100644 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/jaewon1676.js" +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" @@ -3,5 +3,4 @@ function solution(num) { num % 2 == 0 ? (answer = "Even") : (answer = "Odd"); // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환. return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" similarity index 95% rename from "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" rename to "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" index 5102108..ca5fec1 100644 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/prove-ability.js" +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" @@ -1,4 +1,3 @@ function solution(num) { return num % 2 === 0 ? "Even" : "Odd"; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" similarity index 96% rename from "build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" rename to "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" index fd507e9..1aa6b8c 100644 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230/yongchanson.js" +++ "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" @@ -1,3 +1,3 @@ function solution(num) { return num % 2 ? "Odd" : "Even"; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" new file mode 100644 index 0000000..14bfff4 --- /dev/null +++ "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" @@ -0,0 +1,24 @@ +function solution(n, lost, reserve) { + let answer = 0; + let studentClothes = new Array(n + 2).fill(1); + for (const student of reserve) studentClothes[student] += 1; + for (const student of lost) studentClothes[student] -= 1; + for (let i = 1; i < n + 1; i++) { + if (studentClothes[i] === 0) { + if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) { + if (studentClothes[i - 1] === 2) { + studentClothes[i - 1] -= 1; + studentClothes[i] += 1; + } else { + studentClothes[i + 1] -= 1; + studentClothes[i] += 1; + } + } + } + } + for (const student of studentClothes) { + answer += student > 0 ? 1 : 0; + } + answer -= 2; + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" index 0cedb35..0060564 100644 --- "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" +++ "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" @@ -20,5 +20,4 @@ function solution(n, lost, reserve) { } //그리디 // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다. - // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. - + // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" index 6c76006..ed959c9 100644 --- "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" +++ "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" @@ -33,5 +33,4 @@ function solution(n, lost, reserve) { } // 체육복 1개 이상을 가진 학생들의 수 반환 return students.filter((v) => v >= 1).length; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" rename to "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" index fb56c0a..428e3d2 100644 --- "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" @@ -5,5 +5,4 @@ function solution(n, m) { let lcm = (n, m) => (n * m) / gcd(n, m); // 결과 출력 return [gcd(n, m), lcm(n, m)]; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..16aebe1 --- /dev/null +++ "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" @@ -0,0 +1,9 @@ +function solution(n, m) { + const gcd = greatestCommonDivisor(n, m); + return [gcd, (n * m) / gcd]; +} + +const greatestCommonDivisor = (a, b) => { + if (b === 0) return a; + else return greatestCommonDivisor(b, a % b); +}; \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" similarity index 98% rename from "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" rename to "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" index 0f9fe97..aa92161 100644 --- "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" +++ "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" @@ -6,4 +6,4 @@ function solution(a, b) { } } return [gcd, (a / gcd) * b]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" new file mode 100644 index 0000000..0ab3720 --- /dev/null +++ "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" @@ -0,0 +1,9 @@ +function solution(sizes) { + for (let card of sizes) { + if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]]; + } + + const maxWidth = Math.max(...sizes.map(card => card[0])); + const maxHeight = Math.max(...sizes.map(card => card[1])); + return maxWidth * maxHeight; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" index 49bb60f..8d6d146 100644 --- "a/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" +++ "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" @@ -9,14 +9,4 @@ function solution(sizes) { const widthHeight = Math.max(...sizes.map(v => v[1])); return widthMax * widthHeight; -} -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(sizes) { - for (let card of sizes) { - if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]]; - } - - const maxWidth = Math.max(...sizes.map(card => card[0])); - const maxHeight = Math.max(...sizes.map(card => card[1])); - return maxWidth * maxHeight; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" rename to "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" index b33de8d..ea83378 100644 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/chaerin-dev.js" +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" @@ -17,5 +17,4 @@ function solution(num) { } // 작업을 반복한 횟수 반환 return cnt; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" new file mode 100644 index 0000000..db503a6 --- /dev/null +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" @@ -0,0 +1,9 @@ +function solution(num) { + let answer = 0; + while (answer <= 500) { + if (num === 1) return answer; + num = num % 2 === 0 ? num / 2 : num * 3 + 1; + answer += 1; + } + return -1; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" rename to "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" index 3ec2e4d..4db0d3a 100644 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/jaewon1676.js" +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" @@ -8,5 +8,4 @@ function solution(num) { answer++; } return num == 1 ? answer : -1; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" rename to "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" index c1b2e39..2c110fa 100644 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/prove-ability.js" +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" @@ -13,5 +13,4 @@ function solution(num) { } return count; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" similarity index 98% rename from "build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" rename to "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" index dda647c..d263054 100644 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241/yongchanson.js" +++ "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" @@ -5,4 +5,4 @@ function solution(num) { num = num % 2 ? num * 3 + 1 : num / 2; } return count; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/chaerin-dev.js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/chaerin-dev.js" similarity index 100% rename from "build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/chaerin-dev.js" rename to "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/chaerin-dev.js" diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" new file mode 100644 index 0000000..58f0574 --- /dev/null +++ "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" @@ -0,0 +1,22 @@ +function solution(board, moves) { + let answer = 0; + const length = board.length + let basket = [] + moves.forEach(move => { + for (let i = 0; i < length; i++) { + const item = board[i][move - 1] + if (item !== 0) { + if (basket[basket.length - 1] !== item) { + basket.push(item) + } else { + basket.pop() + answer += 2 + } + board[i][move - 1] = 0 + break + } + } + }) + + return answer; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" similarity index 96% rename from "build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" rename to "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" index b126a28..3ae37b8 100644 --- "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204/jaewon1676 .js" +++ "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" @@ -26,5 +26,4 @@ function solution(board, moves) { 1. 입력받은 moves의 length만큼 for문을 돌린다. 2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다. 3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다. -4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */ - +4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */ \ No newline at end of file diff --git "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" new file mode 100644 index 0000000..82a2239 --- /dev/null +++ "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" @@ -0,0 +1,61 @@ +function solution(numbers, hand) { + // 키패드를 4행 3열의 이차원 배열이라고 생각 + + // leftRow, leftCol: 왼손의 현재 위치 + let [leftRow, leftCol] = [3, 0]; + // rightRow, rightCol: 오른손의 현재 위치 + let [rightRow, rightCol] = [3, 2]; + // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열 + let result = ''; + + // 눌러야할 각 번호가 + numbers.forEach(e => { + // 1/4/7이면 왼손으로 눌러야하므로 + if (e === 1 || e === 4 || e === 7) { + // 왼손의 위치 업데이트 + [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0]; + // result 문자열에 "L" 이어붙여줌 + result += 'L'; + } + + // 3/6/9이면 오른손으로 눌러야하므로 + else if (e === 3 || e === 6 || e === 9) { + // 오른손의 위치 업데이트 + [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2]; + // result 문자열에 "R" 이어붙여줌 + result += 'R'; + } + + // 2/5/8/0이면 + else { + // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌 + if (e === 0) e = 11; + + // leftRow, leftCol: 다음에 눌러야 할 번호의 위치 + let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1]; + // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리 + let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol); + // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리 + let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol); + + // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로 + if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) { + // 왼손의 위치 업데이트 + [leftRow, leftCol] = [nextRow, nextCol]; + // result 문자열에 "L" 이어붙여줌 + result += 'L'; + } + + // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로 + else { + // 오른손의 위치 업데이트 + [rightRow, rightCol] = [nextRow, nextCol]; + // reuslt 문자열에 "R" 이어붙여줌 + result += 'R'; + } + } + }); + + // result 문자열 반환 + return result; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..c366e17 --- /dev/null +++ "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" @@ -0,0 +1,37 @@ +function solution(numbers, hand) { + let leftNum = 10; + let rightNum = 12; + return numbers + .map(num => { + if (num === 0) { + num = 11; + } + if (num % 3 === 1) { + return leftTo(num); + } else if (num % 3 === 0) { + return rightTo(num); + } else { + const numLocation = numToLocation(num); + const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation); + const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation); + if (leftDistance === rightDistance) { + return hand === 'left' ? leftTo(num) : rightTo(num); + } else if (leftDistance < rightDistance) { + return leftTo(num); + } else { + return rightTo(num); + } + } + }) + .join(''); + + function leftTo(num) { + leftNum = num; + return 'L'; + } + + function rightTo(num) { + rightNum = num; + return 'R'; + } +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" index dd94742..1904361 100644 --- "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" @@ -3,5 +3,4 @@ function solution(arr) { let sum = arr.reduce((sum, e) => sum + e); // sum을 arr의 요소의 갯수로 나눈 후 반환 return sum / arr.length; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..e8739d0 --- /dev/null +++ "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(arr) { + return arr.reduce((acc, curr) => acc + curr) / arr.length; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" similarity index 97% rename from "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" rename to "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" index cc4d98c..578d8bf 100644 --- "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" @@ -4,5 +4,4 @@ function solution(arr) { answer += arr[i]; } return answer / arr.length; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" index 142a8c8..5c52555 100644 --- "a/build/solutions/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" @@ -4,4 +4,4 @@ function solution(arr) { answer += num; }); return answer / arr.length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" index 6e40028..d473ff1 100644 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" @@ -8,4 +8,4 @@ function solution(nums) { // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면 // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수 return setSize > getCnt ? getCnt : setSize; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" new file mode 100644 index 0000000..76e1073 --- /dev/null +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" @@ -0,0 +1,5 @@ +function solution(nums) { + const numLen = nums.length; + const setLen = [...new Set(nums)].length; + return numLen / 2 >= setLen ? setLen : numLen / 2; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" index 00b81e7..853e198 100644 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" @@ -8,5 +8,4 @@ function solution(nums) { 1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다. 2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다. 3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 - 두가지 경우의 수로 좁혀진다. */ - + 두가지 경우의 수로 좁혀진다. */ \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" index f6b4ac7..92e064f 100644 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" @@ -11,5 +11,4 @@ function solution(nums) { else answer = set.size; return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" index d7c5f48..7bbe104 100644 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" +++ "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" @@ -4,5 +4,4 @@ function solution(nums) { }); return unique.length > nums.length / 2 ? nums.length / 2 : unique.length; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" rename to "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" index d48026c..f944962 100644 --- "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/chaerin-dev.js" +++ "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" @@ -9,5 +9,4 @@ function solution(x) { } // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환 return x % sum_of_digits == 0; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" new file mode 100644 index 0000000..233c828 --- /dev/null +++ "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" @@ -0,0 +1,8 @@ +function solution(x) { + const sum = x + .toString() + .split("") + .map((x) => parseInt(x)) + .reduce((acc, curr) => acc + curr); + return x % sum === 0; +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" similarity index 99% rename from "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" rename to "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" index 6900699..d1963e2 100644 --- "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/jaewon1676.js" +++ "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" @@ -7,5 +7,4 @@ function solution(x) { } return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수 -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" similarity index 99% rename from "build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" rename to "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" index 8f216a5..83f82e8 100644 --- "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230/prove-ability.js" +++ "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" @@ -8,4 +8,4 @@ function solution(x) { // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환 if (x % sum !== 0) return false; return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" rename to "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" index fbcb8eb..e5a6e98 100644 --- "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/chaerin-dev.js" +++ "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" @@ -3,5 +3,4 @@ function solution(phone_number) { // phone_number의 -4인덱스부터 끝까지 추출한 문자열을 // 이어붙인 후 반환 return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" new file mode 100644 index 0000000..b4737b4 --- /dev/null +++ "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" @@ -0,0 +1,3 @@ +function solution(phone_number) { + return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" rename to "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" index 693095d..293e294 100644 --- "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260/prove-ability.js" +++ "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" @@ -3,4 +3,4 @@ function solution(phone_number) { answer += "*".repeat(phone_number.length - 4); answer += phone_number.slice(phone_number.length - 4, phone_number.length); return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" similarity index 98% rename from "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" rename to "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" index f6d6411..5b52f9e 100644 --- "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/chaerin-dev.js" +++ "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" @@ -8,5 +8,4 @@ function solution(arr1, arr2) { answer.push(ans_row); } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" rename to "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" index 13c30cc..d40aa09 100644 --- "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/codeisneverodd.js" +++ "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" @@ -9,5 +9,4 @@ function solution(arr1, arr2) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" similarity index 99% rename from "build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" rename to "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" index 1a7dd97..7c4990c 100644 --- "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210/yongchanson.js" +++ "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" @@ -8,4 +8,4 @@ function solution(A, B) { } } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" deleted file mode 100644 index ea9bc73..0000000 --- "a/build/solutions/level-2/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" similarity index 99% rename from "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" rename to "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" index c11016b..270448d 100644 --- "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/RyanDeclan.js" +++ "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" @@ -15,4 +15,4 @@ function solution(n) { return result.split("").reverse().join("") } return solution(quotient); -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" rename to "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" index b62f194..45389a4 100644 --- "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/codeisneverodd.js" +++ "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" @@ -11,5 +11,4 @@ function solution(n) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" similarity index 98% rename from "build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" rename to "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" index 42ea2dd..18dd30c 100644 --- "a/build/solutions/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220/jaewon1676.js" +++ "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" @@ -8,5 +8,4 @@ function solution(n) { } return answer -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" "b/build/solutions/level-2/2 x n \355\203\200\354\235\274\353\247\201/jaewon1676.js" similarity index 100% rename from "build/solutions/level-2/2-x-n-\355\203\200\354\235\274\353\247\201/jaewon1676.js" rename to "build/solutions/level-2/2 x n \355\203\200\354\235\274\353\247\201/jaewon1676.js" diff --git "a/build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" "b/build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" similarity index 99% rename from "build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" rename to "build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" index 114921e..ced2c8d 100644 --- "a/build/solutions/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270/le2sky.js" +++ "b/build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" @@ -11,4 +11,4 @@ function solution(numbers) { } }); return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" "b/build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" rename to "build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" index e6c86fb..01c1410 100644 --- "a/build/solutions/level-2/3-x-n-\355\203\200\354\235\274\353\247\201/codeisneverodd.js" +++ "b/build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" @@ -12,4 +12,4 @@ function solution(n) { }; return getCount(n); -} +} \ No newline at end of file diff --git a/build/solutions/level-2/H-Index/codeisneverodd.js b/build/solutions/level-2/H Index/codeisneverodd.js similarity index 98% rename from build/solutions/level-2/H-Index/codeisneverodd.js rename to build/solutions/level-2/H Index/codeisneverodd.js index d3b86c9..9053906 100644 --- a/build/solutions/level-2/H-Index/codeisneverodd.js +++ b/build/solutions/level-2/H Index/codeisneverodd.js @@ -8,5 +8,4 @@ function solution(citations) { } answer = h - 1 return answer; -} - +} \ No newline at end of file diff --git a/build/solutions/level-2/H-Index/jaewon1676.js b/build/solutions/level-2/H Index/jaewon1676.js similarity index 100% rename from build/solutions/level-2/H-Index/jaewon1676.js rename to build/solutions/level-2/H Index/jaewon1676.js diff --git "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/RyanDeclan.js" "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/RyanDeclan.js" similarity index 92% rename from "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/RyanDeclan.js" rename to "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/RyanDeclan.js" index 2216848..500aee4 100644 --- "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/RyanDeclan.js" +++ "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/RyanDeclan.js" @@ -1,4 +1,3 @@ - function solution(s) { return s.toLowerCase().split(" ").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : "").join(" "); } @@ -6,4 +5,4 @@ function solution(s) { // 이 문제에서 제일 핵심은 "공백문자가 연속해서 나올 수 있습니다." 입니다. 이 부분을 꼭 고려하셔야합니다. // 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다. // 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. -//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다. +//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다. \ No newline at end of file diff --git "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 13d5402..f0df969 100644 --- "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -3,5 +3,4 @@ function solution(s) { answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ') //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다. return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" similarity index 92% rename from "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" rename to "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" index 33bd7dc..8f8ce04 100644 --- "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -10,5 +10,4 @@ function solution(s) { // .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase()) // 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. // .join('') 작은 배열들을 합쳐줍니다. -// .join(' ') 큰 배열들을 합쳐줍니다. - +// .join(' ') 큰 배열들을 합쳐줍니다. \ No newline at end of file diff --git "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" similarity index 98% rename from "build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" rename to "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" index 3dd803f..5b1c367 100644 --- "a/build/solutions/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260/yongchanson.js" +++ "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" @@ -8,5 +8,4 @@ function solution(s) { ); } return answer.join(" "); -} - +} \ No newline at end of file diff --git a/build/solutions/level-2/N-Queen/codeisneverodd.js b/build/solutions/level-2/N Queen/codeisneverodd.js similarity index 100% rename from build/solutions/level-2/N-Queen/codeisneverodd.js rename to build/solutions/level-2/N Queen/codeisneverodd.js diff --git "a/build/solutions/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" "b/build/solutions/level-2/N\352\260\234\354\235\230 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" rename to "build/solutions/level-2/N\352\260\234\354\235\230 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" diff --git "a/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" rename to "build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" index 53d7642..7d412f4 100644 --- "a/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" +++ "b/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" @@ -21,5 +21,4 @@ function verifiedSlices(str) { if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase()) } return result -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" "b/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" similarity index 99% rename from "build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" rename to "build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" index ff0565f..b403c03 100644 --- "a/build/solutions/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" +++ "b/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" @@ -46,4 +46,4 @@ function solution(str1, str2) { if (a.length === 0) return 0 return Math.floor((a.length / b.length) * 65536) -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" rename to "build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" index bcea9c1..ebc1c5b 100644 --- "a/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/codeisneverodd.js" +++ "b/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" @@ -15,5 +15,4 @@ function solution(cacheSize, cities) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" "b/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" similarity index 98% rename from "build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" rename to "build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" index b46352e..1002bab 100644 --- "a/build/solutions/level-2/[1\354\260\250]-\354\272\220\354\213\234/jaewon1676.js" +++ "b/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" @@ -31,5 +31,4 @@ function solution(cacheSize, cities) { /* LRU 알고리즘 n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다. n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면 - 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */ - \ No newline at end of file + 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */ \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" rename to "build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" index c668d1e..8be09fb 100644 --- "a/build/solutions/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" +++ "b/build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" @@ -41,4 +41,4 @@ function solution(m, n, board) { } return board.flat().filter(v => v === '@').length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-2/[3\354\260\250] n\354\247\204\354\210\230 \352\262\214\354\236\204/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204/codeisneverodd.js" rename to "build/solutions/level-2/[3\354\260\250] n\354\247\204\354\210\230 \352\262\214\354\236\204/codeisneverodd.js" diff --git "a/build/solutions/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" "b/build/solutions/level-2/[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" similarity index 100% rename from "build/solutions/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" rename to "build/solutions/level-2/[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" diff --git "a/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" "b/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" rename to "build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" index 965485a..5cacb2a 100644 --- "a/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/codeisneverodd.js" +++ "b/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" @@ -27,5 +27,4 @@ function solution(msg) { start = end; } return outputs; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" "b/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" similarity index 99% rename from "build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" rename to "build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" index b88f0fd..847e772 100644 --- "a/build/solutions/level-2/[3\354\260\250]-\354\225\225\354\266\225/ssi02014.js" +++ "b/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" @@ -17,4 +17,4 @@ function solution(msg) { result.push(dict.indexOf(lastWordAndCompression) + 1); return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254/codeisneverodd.js" "b/build/solutions/level-2/[3\354\260\250] \355\214\214\354\235\274\353\252\205 \354\240\225\353\240\254/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254/codeisneverodd.js" rename to "build/solutions/level-2/[3\354\260\250] \355\214\214\354\235\274\353\252\205 \354\240\225\353\240\254/codeisneverodd.js" diff --git "a/build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260/minjongbaek.js" "b/build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234 \354\206\214\354\210\230 \352\260\234\354\210\230 \352\265\254\355\225\230\352\270\260/minjongbaek.js" similarity index 100% rename from "build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260/minjongbaek.js" rename to "build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234 \354\206\214\354\210\230 \352\260\234\354\210\230 \352\265\254\355\225\230\352\270\260/minjongbaek.js" diff --git "a/build/solutions/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/jaewon1676.js" "b/build/solutions/level-2/n^2 \353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/jaewon1676.js" similarity index 100% rename from "build/solutions/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260/jaewon1676.js" rename to "build/solutions/level-2/n^2 \353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/jaewon1676.js" diff --git "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" rename to "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" index d8738da..8a5782f 100644 --- "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" @@ -10,6 +10,4 @@ const sortFunc = (a, b) => { const compareA = parseInt(a.toString() + b.toString()) const compareB = parseInt(b.toString() + a.toString()) return compareB - compareA -} - - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" similarity index 98% rename from "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" rename to "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" index 56f7e39..f873c7f 100644 --- "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/createhb21.js" +++ "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" @@ -3,5 +3,4 @@ function solution(numbers) { numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b)); return stringNum[0] === '0' ? '0' : stringNum.join(''); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" similarity index 98% rename from "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" rename to "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" index 59b67d0..eafcb32 100644 --- "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230/prove-ability.js" +++ "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" @@ -1,3 +1,3 @@ function solution(numbers) { return numbers.every(v => v === 0) ? "0" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(""); -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/codeisneverodd.js" diff --git "a/build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260 \355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260 \355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" diff --git "a/build/solutions/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" "b/build/solutions/level-2/\352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" similarity index 100% rename from "build/solutions/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" rename to "build/solutions/level-2/\352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" diff --git "a/build/solutions/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230/codeisneverodd.js" "b/build/solutions/level-2/\352\264\204\355\230\270 \353\263\200\355\231\230/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230/codeisneverodd.js" rename to "build/solutions/level-2/\352\264\204\355\230\270 \353\263\200\355\231\230/codeisneverodd.js" diff --git "a/build/solutions/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\264\204\355\230\270 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\352\264\204\355\230\270 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" diff --git "a/build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 8eb2c63..9c3fdff 100644 --- "a/build/solutions/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -37,4 +37,4 @@ function solution(line) { }); return canvas.print(); -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" index 3dd0098..b58cee0 100644 --- "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" +++ "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" @@ -13,5 +13,4 @@ function solution(people, limit) { cnt++; } return cnt; -} // 4주차 2번 문제와 유사함 - +} // 4주차 2번 문제와 유사함 \ No newline at end of file diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" index f4d280b..d11be8c 100644 --- "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" +++ "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" @@ -19,5 +19,4 @@ function solution(people, limit) { } return count; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" index 539e7d8..077e2db 100644 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" @@ -32,4 +32,4 @@ function solution(progresses, speeds) { return acc } ,[0]) return countBox; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" index 948bd85..a29f599 100644 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" @@ -22,5 +22,4 @@ function solution(progresses, speeds) { // 정답 반환 return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" index a39fd34..f399a8b 100644 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" @@ -13,5 +13,4 @@ function solution(progresses, speeds) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" index 65fb1b7..6c05446 100644 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" @@ -16,5 +16,4 @@ function solution(progresses, speeds) { if (done > 0) answer.push(done) } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" index f556362..12ff036 100644 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" @@ -21,5 +21,4 @@ function solution(progresses, speeds) { answer.push(queue.length); return answer; - } - + } \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" index 029b4f2..531ff0e 100644 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" +++ "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" @@ -18,5 +18,4 @@ function solution(progresses, speeds) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" rename to "build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" index 2e5ac67..277b5e6 100644 --- "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" @@ -8,5 +8,4 @@ function solution(bridge_length, weight, truck_weights) { bridge.unshift(truck_weights.shift()) : bridge.unshift(0) } while (bridge.reduce((a, b) => a + b) !== 0) return tick; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/jaewon1676.js" "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/jaewon1676.js" similarity index 100% rename from "build/solutions/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255/jaewon1676.js" rename to "build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/jaewon1676.js" diff --git "a/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" rename to "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" index 321b38c..c8d13be 100644 --- "a/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" @@ -16,5 +16,4 @@ function solution(n) { const countOne = (str) => { return str.split('').reduce((sum, currentChar) => currentChar === '1' ? sum += 1 : sum, 0) -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" new file mode 100644 index 0000000..5b14d1f --- /dev/null +++ "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" @@ -0,0 +1,4 @@ +function solution(n) { + const count = (num) => num.toString(2).match(/1/g).length; + for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" similarity index 51% rename from "build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" rename to "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" index 88ea8a6..2591680 100644 --- "a/build/solutions/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220/prove-ability.js" +++ "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" @@ -6,10 +6,4 @@ function solution(n) { const value = i.toString(2).match(/1/g).length; if(n === value) return i; } -} - -//정답 4 = ryan-dia -function solution(n) { - const count = (num) => num.toString(2).match(/1/g).length; - for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 001d337..07fb788 100644 --- "a/build/solutions/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -25,4 +25,4 @@ function solution(queue1, queue2) { if (currentSum === average) return count; } return -1; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" index 678fa6a..f7008f5 100644 --- "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" @@ -5,4 +5,4 @@ function solution(land) { } } return Math.max(...land[land.length - 1]) -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" index 850b53d..af830cc 100644 --- "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" @@ -13,5 +13,4 @@ function solution(land) { /* 풀이 과정 1. land의 행만큼 반복문을 돌린다. 2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다. -3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/ - +3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" index 94fb473..27110ad 100644 --- "a/build/solutions/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" @@ -6,4 +6,4 @@ function solution(n) { }); return count[n]; } -//재귀를 사용하면 콜스택 오버플로우가 발생합니다. +//재귀를 사용하면 콜스택 오버플로우가 발생합니다. \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" rename to "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" index 8a0f924..65c5cb0 100644 --- "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" @@ -13,5 +13,4 @@ let greatestCommonDivisor2 = (a, b) => { b = r; } return a; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" similarity index 99% rename from "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" rename to "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" index 73e82ae..da2b9ab 100644 --- "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/jaewon1676.js" +++ "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" @@ -11,5 +11,4 @@ function gcd(w, h) { function solution(w, h) { const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다. return w * h - (w + h - gcdVal); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" similarity index 99% rename from "build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" rename to "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" index 107d9b0..2e31c16 100644 --- "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225/yongchanson.js" +++ "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" @@ -8,4 +8,4 @@ function solution(w,h){ } //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다. return ((w*h - cnt) * 2); -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" "b/build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" rename to "build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" index a895900..347124b 100644 --- "a/build/solutions/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" @@ -29,4 +29,4 @@ const getCombinations = (array, selectNum) => { result.push(...attached); }); return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" "b/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" index ce79ddd..bf37728 100644 --- "a/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" @@ -24,4 +24,4 @@ EIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189 AAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10 AAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6 추천 레퍼런스: https://seongho96.tistory.com/50 -*/ +*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" similarity index 99% rename from "build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" rename to "build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" index 70bb823..59bcaf7 100644 --- "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/chaerin-dev.js" +++ "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" @@ -40,4 +40,4 @@ function solution(s) { // 압축 후 문자열 길이의 최솟값 반환 return shortenLen; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" rename to "build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" index 5930b96..3ab021c 100644 --- "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" @@ -20,5 +20,4 @@ function compressedString(str, unitNum) { } } return result.join('') -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" "b/build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" rename to "build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" index 8536ddf..730f8e5 100644 --- "a/build/solutions/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264/codeisneverodd.js" +++ "b/build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" @@ -31,4 +31,4 @@ function solution(dirs) { }); return trace.visited.length; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" index 82a85af..c4b6ba9 100644 --- "a/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" +++ "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" @@ -128,5 +128,4 @@ function solution ( N, road, K ) const answer = djikstra( 1 ); return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" "b/build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" similarity index 99% rename from "build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" rename to "build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" index e4209fd..152d3b1 100644 --- "a/build/solutions/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264/minjongbaek.js" +++ "b/build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" @@ -1,4 +1,3 @@ - // 빛의 이동을 위한 DX, DY 변수를 선언합니다. const DX = [-1, 1, 0, 0]; const DY = [0, 0, -1, 1]; @@ -70,4 +69,4 @@ function getNextD(command, d) { d = [3, 2, 0, 1][d] } return d -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" "b/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" rename to "build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" index b7f85ef..c1f51ea 100644 --- "a/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" @@ -13,5 +13,4 @@ function solution(n) { shouldMove -= 3; } return snail.flatMap((num) => num); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" "b/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" similarity index 99% rename from "build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" rename to "build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" index f90eb62..c18f065 100644 --- "a/build/solutions/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264/jaewon1676.js" +++ "b/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" @@ -16,4 +16,4 @@ function solution(n) { // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7] -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index 57b7c43..0000000 --- "a/build/solutions/level-2/\354\206\214\354\210\230-\354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,32 +0,0 @@ -function solution(numbers) { - var answer = 0; - const numArr = numbers.split('') - const permutationAll = [] - for (let r = 1; r <= numbers.length; r++) { - const permutationR - = Permutation(numArr, r).map((permuArr) => - parseInt(permuArr.join('')) - ) - for (let i = 0; i < permutationR.length; i++) permutationAll.push(permutationR[i]) - } - const permutationSet = [...new Set(permutationAll)] - for (const number of permutationSet) answer += isPrime(number) ? 1 : 0 - return answer; -} - -function Permutation(arr, r) { - const result = [] - if (r === 1) return arr.map((num) => [num]) - arr.forEach((fixed, index, org) => { - const rest = [...org.slice(0, index), ...org.slice(index + 1)] - const permutation = Permutation(rest, r - 1) - const attached = permutation.map((numbers) => [fixed, ...numbers]) - result.push(...attached) - }) - return result -} - -function isPrime(num) { - for (let i = 2; i <= Math.sqrt(num); i++) if (num % i === 0) return false - return num >= 2 -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224/codeisneverodd.js" "b/build/solutions/level-2/\354\210\230\354\213\235 \354\265\234\353\214\200\355\231\224/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224/codeisneverodd.js" rename to "build/solutions/level-2/\354\210\230\354\213\235 \354\265\234\353\214\200\355\231\224/codeisneverodd.js" diff --git "a/build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" "b/build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" rename to "build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" index 7639358..a28855b 100644 --- "a/build/solutions/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" @@ -45,4 +45,4 @@ function solution(infos, queries) { // 주의 할 점 // 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림 // 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림. -// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음. +// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음. \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" "b/build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" similarity index 99% rename from "build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" rename to "build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" index 625e3e4..97cfa53 100644 --- "a/build/solutions/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235/iHoHyeon.js" +++ "b/build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" @@ -26,4 +26,4 @@ const calc = (number) => { -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다. + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다. -*/ +*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" rename to "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" index 46db7ff..6562ab4 100644 --- "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" @@ -11,5 +11,4 @@ function solution(n) { //수학적 풀이는 별도로 하지 않았습니다. } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" similarity index 98% rename from "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" rename to "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" index 85b014a..fba1ba0 100644 --- "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/prove-ability.js" +++ "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" @@ -12,5 +12,4 @@ function solution(n) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" similarity index 99% rename from "build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" rename to "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" index 9c884c9..986bb93 100644 --- "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204/yongchanson.js" +++ "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" @@ -13,4 +13,4 @@ function solution(n) { if (n % i == 0 && i % 2 == 1) result++; } return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" "b/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" index fd9e4a8..33f7731 100644 --- "a/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" @@ -66,4 +66,4 @@ function getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) { return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow); }), ]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\230\201\354\226\264 \353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\354\230\201\354\226\264 \353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" diff --git "a/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" "b/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" rename to "build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" index d233665..e69153a 100644 --- "a/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" @@ -1,4 +1,3 @@ - function solution(n, a, b) { let currentRound = 1; const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호 @@ -9,5 +8,4 @@ function solution(n, a, b) { currentRound++ } return currentRound -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" "b/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" similarity index 99% rename from "build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" rename to "build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" index 609dfc6..e20837d 100644 --- "a/build/solutions/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234/le2sky.js" +++ "b/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" @@ -21,5 +21,4 @@ function solution(n, a, b) { } } return Math.log2(arr.length) -} - \ No newline at end of file +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" index 8073e9c..cca7c29 100644 --- "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" +++ "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" @@ -39,4 +39,4 @@ function solution(record) { // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환 return result.map((e, i) => idNameMap.get(resultId[i]) + e); -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" index d591b45..8a5302c 100644 --- "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" @@ -11,5 +11,4 @@ function solution(record) { if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`) }) return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" index 9466287..4c363a8 100644 --- "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" +++ "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" @@ -17,5 +17,4 @@ function solution(record) { map.set(uid, name); } return answer.map(ele => map.get(ele[0]) + ele[1]); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" "b/build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" new file mode 100644 index 0000000..ca1567c --- /dev/null +++ "b/build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" @@ -0,0 +1,9 @@ +function solution(s) { + let opened = 0; + for (const bracket of s) { + if (bracket === "(") opened += 1; + if (bracket === ")") opened -= 1; + if (opened < 0) return false; + } + return opened === 0; +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" "b/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" index f3f7c99..5055174 100644 --- "a/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" @@ -10,4 +10,4 @@ function solution(clothes) { answer = clothesCount.reduce((previous, current) => previous * current, 1) - 1; return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" "b/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" index a99e84c..5ae5612 100644 --- "a/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" +++ "b/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" @@ -16,5 +16,4 @@ function solution(clothes) { }); return answer - 1; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" "b/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" index 5d1e28f..9556533 100644 --- "a/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" +++ "b/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" @@ -18,5 +18,4 @@ function solution(clothes) { 2. obj에 해당 키가 없으면 값을 1(옷을 입지 않은 경우)로 지정하고 1(옷의 개수)을 더해줌. 3. obj에 해당 키가 있으면 해당 키의 값을 불러오고 1을 더해줌. 4. for in 구문으로 obj의 키를 반복하여 불러오고 해당 값을 answer에 곱해줌 -5. 최소한 1가지 이상의 옷을 입기 떄문에 옷을 입지 않은 경우 -1로 제외. */ - +5. 최소한 1가지 이상의 옷을 입기 떄문에 옷을 입지 않은 경우 -1로 제외. */ \ No newline at end of file diff --git "a/build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" "b/build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" similarity index 99% rename from "build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" rename to "build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" index a78e683..f66fa8f 100644 --- "a/build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" +++ "b/build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" @@ -7,4 +7,4 @@ function solution(s) { s = reamain.toString(2) } return box; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" index d11f9c5..7f4d66e 100644 --- "a/build/solutions/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" @@ -14,5 +14,4 @@ function solution(s) { }; return convertToBinary(s, 0, 0); -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" index 38af1fc..27faa44 100644 --- "a/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" @@ -23,4 +23,4 @@ function solution(n, wires) { }); return minDiff; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" rename to "build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" index 2e6de0a..5791f0e 100644 --- "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" @@ -9,5 +9,4 @@ function solution(n) { } } return ans; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" similarity index 98% rename from "build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" rename to "build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" index f02a49d..9d7cffa 100644 --- "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231/yongchanson.js" +++ "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" @@ -5,4 +5,4 @@ function solution(n) { n = Math.floor(n / 2); } return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" "b/build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" similarity index 99% rename from "build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" rename to "build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" index 243e4d2..34d2f8b 100644 --- "a/build/solutions/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260/ljw0096.js" +++ "b/build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" @@ -1,4 +1,3 @@ - function solution(fees, records) { const answer = [] @@ -59,4 +58,4 @@ function calculateFee(totalTime, feeInfo) { feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3] } return fee -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" "b/build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" rename to "build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" index c62fc27..7dbe374 100644 --- "a/build/solutions/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" @@ -33,4 +33,4 @@ function solution(n, k) { }); return [...answer, ...notUsedNums]; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" index 8175fc4..32c568c 100644 --- "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" @@ -11,5 +11,4 @@ function solution(s) { } answer = notPairStack.length === 0 ? 1 : 0 return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" similarity index 99% rename from "build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" rename to "build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" index e76f3e9..829b3bd 100644 --- "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" @@ -1,4 +1,3 @@ - function solution(s){ let cnt = 0; // 빼준 부분을 카운트 해줍니다 let answer; diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" rename to "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" index a53c229..75739e7 100644 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" @@ -3,5 +3,4 @@ function solution(s) { const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b) answer = arr[0] + ' ' + arr[arr.length - 1] return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" similarity index 98% rename from "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" rename to "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" index 3d2aecc..dd47ba1 100644 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/jaewon1676.js" +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" @@ -4,5 +4,4 @@ function solution(s) { let small = s[0] // s의 최솟값 let large = s[s.length - 1] // s의 최댓값 return (small + ' ' + large) -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" similarity index 97% rename from "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" rename to "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" index 28fdfdd..5f5aad5 100644 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/prove-ability.js" +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" @@ -1,5 +1,4 @@ function solution(s) { s = s.split(" ").map((v) => parseInt(v, 10)) return `${Math.min(...s)} ${Math.max(...s)}`; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" similarity index 98% rename from "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" rename to "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" index 5974653..c2f9397 100644 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222/yongchanson.js" +++ "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" @@ -3,4 +3,4 @@ function solution(s) { arr.splice(1, arr.length - 2, " "); let result = arr.join(""); return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 98% rename from "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 8da93ed..0dbfa32 100644 --- "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -4,5 +4,4 @@ function solution(A, B) { B = B.sort((a, b) => b - a) for (let i = 0; i < A.length; i++) answer += A[i] * B[i] return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" similarity index 98% rename from "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" rename to "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" index 9d1977c..c1b8e5c 100644 --- "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/prove-ability.js" +++ "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" @@ -8,5 +8,4 @@ function solution(A,B){ } return sum; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" similarity index 98% rename from "build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" rename to "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" index 130b25b..82f70b8 100644 --- "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260/yongchanson.js" +++ "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" @@ -2,4 +2,4 @@ function solution(A, B) { A.sort((a, b) => a - b); B.sort((a, b) => b - a); return A.reduce((t, n, i) => t + n * B[i], 0); -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" "b/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" index ef95b0f..70d6798 100644 --- "a/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" @@ -9,5 +9,4 @@ function widthHeightPair(size) { let result = [] for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i]) return result -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225 \355\233\204 \352\260\234\354\210\230 \354\204\270\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225 \355\233\204 \352\260\234\354\210\230 \354\204\270\352\270\260/codeisneverodd.js" index c5768e0..646d6b1 100644 --- "a/build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225 \355\233\204 \352\260\234\354\210\230 \354\204\270\352\270\260/codeisneverodd.js" @@ -19,4 +19,4 @@ function solution(arr) { return quad(arr) .flat(Infinity) .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]); -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" index 6f3d566..824254e 100644 --- "a/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" @@ -11,5 +11,4 @@ function solution(number, k) { } answer = answerStack.join('') return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" similarity index 98% rename from "build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" rename to "build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" index 169c4e7..1071977 100644 --- "a/build/solutions/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ "b/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" @@ -13,5 +13,4 @@ function solution(number, k) { stack.splice(stack.length-k, k); answer = stack.join(""); return answer; -} - \ No newline at end of file +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" "b/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" rename to "build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" index 9cdfb19..0fce1d8 100644 --- "a/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" @@ -10,4 +10,4 @@ function solution(numbers, target) { if (calculated === target) answer += 1; } return answer; -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" "b/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" similarity index 99% rename from "build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" rename to "build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" index 603596f..46fac1b 100644 --- "a/build/solutions/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204/ssi02014.js" +++ "b/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" @@ -16,5 +16,4 @@ function solution(numbers, target) { dfs(index + 1, sum + numbers[index]); dfs(index + 1, sum - numbers[index]); } -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" "b/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" index 1c28948..d41ab1f 100644 --- "a/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" @@ -7,5 +7,4 @@ function solution(s) { .sort((a, b) => a.length - b.length) for (const set of sets) answer.push(...set.filter(x => !answer.includes(x))) return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" index 6c95047..c2066d8 100644 --- "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" @@ -44,4 +44,4 @@ class Queue { size() { return this.rear - this.front } -} +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" index 65b9a71..6dc890e 100644 --- "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" +++ "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" @@ -15,5 +15,4 @@ function solution(priorities, location) { } const idx = queue.findIndex(p => p.index === location) + 1; return idx; - } - + } \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" index e91ddc0..d113bd3 100644 --- "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" +++ "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" @@ -18,5 +18,4 @@ function solution(priorities, location) { } return answer -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" "b/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" index 5ee306e..66a28a6 100644 --- "a/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" +++ "b/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" @@ -19,7 +19,4 @@ function getMaxCount(currentFatigue, visitedCount, dungeons) { }, 0); return maxCount; -} - - - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" rename to "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" index bb45511..68819dd 100644 --- "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" @@ -10,5 +10,4 @@ function fibonacci1234567(n) { //재귀적으로 하면 시간초과 fiboArr[1] = 1 for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과 return fiboArr[n] -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/jaewon1676.js" "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/jaewon1676.js" similarity index 100% rename from "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230/jaewon1676.js" rename to "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/jaewon1676.js" diff --git "a/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" "b/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" rename to "build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" index 2571a9d..b422316 100644 --- "a/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" @@ -22,4 +22,4 @@ n개가 있다면 결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨. a->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음. -*/ +*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\355\226\211\353\240\254 \355\205\214\353\221\220\353\246\254 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" rename to "build/solutions/level-2/\355\226\211\353\240\254 \355\205\214\353\221\220\353\246\254 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" diff --git "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" similarity index 99% rename from "build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" rename to "build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" index e6d9f1d..c8f5b36 100644 --- "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" @@ -9,5 +9,4 @@ function solution(arr1, arr2) { } } return answer; -} - +} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/prove-ability.js" "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/prove-ability.js" similarity index 100% rename from "build/solutions/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210/prove-ability.js" rename to "build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/prove-ability.js" diff --git "a/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" "b/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" index d5724f0..a37981f 100644 --- "a/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" +++ "b/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" @@ -44,4 +44,4 @@ const getCombinations = (array, selectNumber) => { result.push(...attached); }); return result; -} +} \ No newline at end of file diff --git "a/build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" deleted file mode 100644 index ea9bc73..0000000 --- "a/build/solutions/level-3/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/build/solutions/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234/codeisneverodd.js" "b/build/solutions/level-3/\352\260\200\354\236\245 \353\250\274 \353\205\270\353\223\234/codeisneverodd.js" similarity index 100% rename from "build/solutions/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234/codeisneverodd.js" rename to "build/solutions/level-3/\352\260\200\354\236\245 \353\250\274 \353\205\270\353\223\234/codeisneverodd.js" diff --git "a/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" "b/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" index 9af5677..9e83447 100644 --- "a/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" +++ "b/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" @@ -28,4 +28,4 @@ function solution(operations) { 1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다. 2. answer 배열을 정렬 해준다 3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다. -*/ +*/ \ No newline at end of file diff --git "a/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" "b/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" index 845e230..9fed161 100644 --- "a/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" +++ "b/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" @@ -13,4 +13,4 @@ function solution(n, times) { } // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다. return left; -} +} \ No newline at end of file diff --git "a/build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" deleted file mode 100644 index ea9bc73..0000000 --- "a/build/solutions/level-4/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} diff --git "a/build/solutions/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211/ryong9rrr.js" "b/build/solutions/level-4/\352\260\200\354\202\254 \352\262\200\354\203\211/ryong9rrr.js" similarity index 100% rename from "build/solutions/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211/ryong9rrr.js" rename to "build/solutions/level-4/\352\260\200\354\202\254 \352\262\200\354\203\211/ryong9rrr.js" diff --git "a/build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" "b/build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" similarity index 97% rename from "build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" rename to "build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" index b89e088..3bf026e 100644 --- "a/build/solutions/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220/codeisneverodd.js" +++ "b/build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" @@ -25,4 +25,4 @@ function solution(strs, t) { return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1]; } -//리드미 테스트용 코멘트 +//리드미 테스트용 코멘트 \ No newline at end of file diff --git "a/build/solutions/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214/ryong9rrr.js" "b/build/solutions/level-4/\353\254\264\354\247\200\354\235\230 \353\250\271\353\260\251 \353\235\274\354\235\264\353\270\214/ryong9rrr.js" similarity index 100% rename from "build/solutions/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214/ryong9rrr.js" rename to "build/solutions/level-4/\353\254\264\354\247\200\354\235\230 \353\250\271\353\260\251 \353\235\274\354\235\264\353\270\214/ryong9rrr.js" diff --git "a/build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" "b/build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" similarity index 98% rename from "build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" rename to "build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" index 16aba7c..f226dce 100644 --- "a/build/solutions/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230/cg10036.js" +++ "b/build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" @@ -1,4 +1,4 @@ function solution(n) { const fact = n => n ? BigInt(n) * fact(n - 1) : 1n; return fact(n * 2) / (fact(n) * fact(n + 1)); -} +} \ No newline at end of file diff --git "a/build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" "b/build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" deleted file mode 100644 index be760a1..0000000 --- "a/build/solutions/level-5/00-\355\225\264\353\213\265-\354\230\210\354\213\234.js/\353\263\270\354\235\270\354\235\230 \352\271\203\355\227\210\353\270\214 \354\225\204\354\235\264\353\224\224.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - //정답을 다른 방법으로도 작성했다면 추가해 주세요! -} \ No newline at end of file diff --git a/build/utils/db.js b/build/utils/db.js index ffc269a..0aae690 100644 --- a/build/utils/db.js +++ b/build/utils/db.js @@ -1,10 +1,10 @@ import { nanoid } from 'nanoid'; import { makeDir, readFile, writeFile } from './file.js'; -export const getDB = () => JSON.parse(readFile('results/db.json')); -export const writeDB = (content) => writeFile({ - dirName: 'results', +export const getDB = () => JSON.parse(readFile('db/db.json')); +export const writeDB = (db) => writeFile({ + dirName: 'db', fileName: `db.json`, - content: JSON.stringify(content), + content: JSON.stringify(db), }); /** Sol 하나를 DB 및 파일에 추가 */ export const addSol = ({ author, code, probId }) => { @@ -35,7 +35,7 @@ export const addSol = ({ author, code, probId }) => { addToDB(); }; /** DB 전체를 파일로 변환 */ -export const dbToFile = () => { - const { sols } = getDB(); +export const dbToFile = (db) => { + const { sols } = db; sols.forEach((sol) => addSol(sol)); }; diff --git a/build/utils/file.js b/build/utils/file.js index 77ba9d7..1f5ab8f 100644 --- a/build/utils/file.js +++ b/build/utils/file.js @@ -1,5 +1,6 @@ import * as fs from 'fs'; import path, { dirname } from 'path'; +import { rimrafSync } from 'rimraf'; import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); /** build 폴더 기준 절대경로를 사용하세요 */ @@ -24,3 +25,9 @@ export const readFile = (_path) => { export const readDir = (dirName) => { return fs.readdirSync(path.join(__dirname, '../', dirName)); }; +/** build 폴더 기준 절대경로를 사용하세요 */ +export const deleteDir = (dirName) => { + return rimrafSync(path.join(__dirname, '../', dirName), { + preserveRoot: false, + }); +}; diff --git a/build/utils/oldSols.js b/build/utils/oldSols.js new file mode 100644 index 0000000..f343546 --- /dev/null +++ b/build/utils/oldSols.js @@ -0,0 +1,33 @@ +import { nanoid } from 'nanoid'; +import { readDir, readFile } from './file.js'; +const levels = [0, 1, 2, 3, 4, 5]; +export const oldSolsToDB = () => { + const result = { probs: [], sols: [] }; + levels.forEach((level) => { + const oldDirName = `oldSols/level-${level}`; + const fileNames = readDir(oldDirName); + fileNames.map((fileName) => { + const [title, id] = fileName.replace('?', '?').replaceAll('-', ' ').split('&'); + if (id) + result.probs.push({ id, title: title.replace('?', '?'), level }); + readFile(`${oldDirName}/${fileName}`) + .split(/\/\/[ ]*정답[ ]*\d[^-]*-/) + .slice(1) + .map((content) => { + const [author, ...lines] = content.split('\n'); + return { + author: author.trim(), + code: lines.join('\n').trim(), + }; + }) + .forEach(({ author, code }) => { + if (id) + result.sols.push({ author, code, id: nanoid(), probId: id }); + }); + }); + }); + console.log(result.probs + .sort((a, b) => (a.id < b.id ? -1 : a.id === b.id ? 0 : 1)) + .filter((p, i, arr) => i < arr.length - 1 && p.id === arr[i + 1].id)); + return result; +}; diff --git a/build/utils/solutions.js b/build/utils/solutions.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/build/utils/solutions.js @@ -0,0 +1 @@ +export {}; diff --git a/package-lock.json b/package-lock.json index 7dd1855..ca6be43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "nanoid": "^4.0.0", "node-fetch": "^3.2.3", "prettier": "^2.7.1", + "rimraf": "^4.1.2", "ts-node": "^10.9.1", "typescript": "^4.9.4" }, @@ -1249,6 +1250,20 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, + "node_modules/rimraf": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", + "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==", + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rxjs": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", @@ -2406,6 +2421,11 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, + "rimraf": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", + "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==" + }, "rxjs": { "version": "7.5.6", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", diff --git a/package.json b/package.json index ce15270..bfd466f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "nanoid": "^4.0.0", "node-fetch": "^3.2.3", "prettier": "^2.7.1", + "rimraf": "^4.1.2", "ts-node": "^10.9.1", "typescript": "^4.9.4" }, diff --git a/run.ts b/run.ts index b28b04f..6814d36 100644 --- a/run.ts +++ b/run.ts @@ -1,3 +1,12 @@ +import { dbToFile, writeDB } from './utils/db.js'; +import { deleteDir } from './utils/file.js'; +import { oldSolsToDB } from './utils/oldSols.js'; +const run = () => { + const db = oldSolsToDB(); + deleteDir('solutions'); + writeDB(db); + dbToFile(db); +}; - +run(); diff --git a/utils/db.ts b/utils/db.ts index 6aa44d4..5eca5e4 100644 --- a/utils/db.ts +++ b/utils/db.ts @@ -1,25 +1,31 @@ import { nanoid } from 'nanoid'; import { makeDir, readFile, writeFile } from './file.js'; -type Prob = { +export interface Prob { id: string; title: string; level: 0 | 1 | 2 | 3 | 4 | 5; -}; +} -interface Sol { +export interface Sol { id: string; probId: string; code: string; author: string; } -export const getDB = () => JSON.parse(readFile('results/db.json')) as { sols: Sol[]; probs: Prob[] }; -export const writeDB = (content: { probs: Prob[]; sols: Sol[] }) => +export interface DB { + probs: Prob[]; + sols: Sol[]; +} + +export const getDB = () => JSON.parse(readFile('db/db.json')) as DB; + +export const writeDB = (db: DB) => writeFile({ - dirName: 'results', + dirName: 'db', fileName: `db.json`, - content: JSON.stringify(content), + content: JSON.stringify(db), }); /** Sol 하나를 DB 및 파일에 추가 */ @@ -57,8 +63,8 @@ export const addSol = ({ author, code, probId }: Omit) => { }; /** DB 전체를 파일로 변환 */ -export const dbToFile = () => { - const { sols } = getDB(); +export const dbToFile = (db: DB) => { + const { sols } = db; sols.forEach((sol) => addSol(sol)); }; diff --git a/utils/file.ts b/utils/file.ts index 4bb3ba4..d8883f2 100644 --- a/utils/file.ts +++ b/utils/file.ts @@ -1,5 +1,6 @@ import * as fs from 'fs'; import path, { dirname } from 'path'; +import { rimrafSync } from 'rimraf'; import { fileURLToPath } from 'url'; @@ -31,3 +32,10 @@ export const readFile = (_path: string) => { export const readDir = (dirName: string) => { return fs.readdirSync(path.join(__dirname, '../', dirName)); }; + +/** build 폴더 기준 절대경로를 사용하세요 */ +export const deleteDir = (dirName: string) => { + return rimrafSync(path.join(__dirname, '../', dirName), { + preserveRoot: false, + }); +}; diff --git a/utils/oldSols.ts b/utils/oldSols.ts new file mode 100644 index 0000000..34063b9 --- /dev/null +++ b/utils/oldSols.ts @@ -0,0 +1,41 @@ +import { nanoid } from 'nanoid'; +import { DB, Prob } from './db.js'; +import { readDir, readFile } from './file.js'; + +const levels: Prob['level'][] = [0, 1, 2, 3, 4, 5]; + +export const oldSolsToDB = (): DB => { + const result: DB = { probs: [], sols: [] }; + + levels.forEach((level) => { + const oldDirName = `oldSols/level-${level}`; + const fileNames = readDir(oldDirName); + + fileNames.map((fileName) => { + const [title, id] = fileName.replace('?', '?').replaceAll('-', ' ').split('&'); + + if (id) result.probs.push({ id, title: title.replace('?', '?'), level }); + + readFile(`${oldDirName}/${fileName}`) + .split(/\/\/[ ]*정답[ ]*\d[^-]*-/) + .slice(1) + .map((content) => { + const [author, ...lines] = content.split('\n'); + return { + author: author.trim(), + code: lines.join('\n').trim(), + }; + }) + .forEach(({ author, code }) => { + if (id) result.sols.push({ author, code, id: nanoid(), probId: id }); + }); + }); + }); + console.log( + result.probs + .sort((a, b) => (a.id < b.id ? -1 : a.id === b.id ? 0 : 1)) + .filter((p, i, arr) => i < arr.length - 1 && p.id === arr[i + 1].id) + ); + + return result; +}; From d44ae4f3e18c12e21f0e8ca01414323cf559c638 Mon Sep 17 00:00:00 2001 From: codeisneverodd Date: Wed, 22 Mar 2023 01:12:00 +0900 Subject: [PATCH 04/13] feat: migration to next.js --- .eslintrc.json | 27 + .github/PULL_REQUEST_TEMPLATE.md | 8 - .github/workflows/linting.yml | 20 + .github/workflows/update-README.yml | 40 - .gitignore | 168 +- .husky/pre-commit | 4 + .prettierignore | 6 - .prettierrc.json | 12 +- .vscode/settings.json | 11 - README.md | 343 +- build/db/db.json | 2909 ------------- build/newSol.json | 27 - ...47\214\353\223\244\352\270\260&120842&.js" | 10 - .../369\352\262\214\354\236\204&120891&.js" | 6 - ...5\230-\352\260\234\354\210\230&120912&.js" | 6 - ...47\214\353\223\244\352\270\260&120886&.js" | 7 - .../OX\355\200\264\354\246\210&120907&.js" | 9 - ...5\230-\352\260\234\354\210\230&120887&.js" | 10 - ...63\240\353\245\264\352\270\260&120905&.js" | 6 - ...1\214\354\232\264-\354\210\230&120890&.js" | 7 - ...0\224\354\234\204-\353\263\264&120839&.js" | 7 - ...0\230-\354\260\276\352\270\260&120899&.js" | 7 - ...60\201\353\217\204\352\270\260&120829&.js" | 9 - ...7\270-\352\265\260\353\213\250&120837&.js" | 9 - ...5\230-\352\270\270\354\235\264&120876&.js" | 11 - ...15\230\354\247\200\352\270\260&120843&.js" | 9 - ...2\260\354\235\230-\354\210\230&120840&.js" | 11 - ...65\254\355\225\230\352\270\260&120810&.js" | 6 - ...5\264-\354\266\234\353\240\245&120820&.js" | 6 - ...0\254-\354\210\253\354\236\220&120924&.js" | 9 - ...15\224\355\225\230\352\270\260&120863&.js" | 22 - ...06\214\353\254\270\354\236\220&120893&.js" | 6 - ...0\230\354\235\230-\352\263\261&120804&.js" | 6 - ...02\230\353\210\227\354\205\210&120806&.js" | 6 - ...0\230\354\235\230-\354\260\250&120803&.js" | 6 - ...0\230\354\235\230-\355\225\251&120802&.js" | 6 - ...47\244\352\270\260\352\270\260&120882&.js" | 12 - ...-\354\204\261\352\263\265?&120883&.js" | 8 - ...1\260-\354\202\254\353\236\214&120585&.js" | 6 - ...44\353\266\200\355\230\270-(1)&120838&.js" | 16 - ...5\214-\354\240\234\352\261\260&120849&.js" | 6 - ...65\254\355\225\230\352\270\260&120805&.js" | 6 - ...40\245\355\225\230\352\270\260&120825&.js" | 6 - ...02\260\355\225\230\352\270\260&120902&.js" | 6 - ...22\244\354\247\221\352\270\260&120822&.js" | 6 - ...7\264-\353\260\200\352\270\260&120921&.js" | 12 - ...54\355\225\230\352\270\260-(1)&120850&.js" | 9 - ...54\355\225\230\352\270\260-(2)&120911&.js" | 9 - ...54\270\354\236\220\354\227\264&120908&.js" | 6 - ...47\214\353\223\244\352\270\260&120809&.js" | 6 - ...22\244\354\247\221\352\270\260&120821&.js" | 6 - ...5\230-\352\270\270\354\235\264&120854&.js" | 6 - ...36\220\353\245\264\352\270\260&120833&.js" | 6 - ...13\234\355\202\244\352\270\260&120844&.js" | 8 - ...34\240\354\202\254\353\217\204&120903&.js" | 6 - ...17\211\352\267\240\352\260\222&120817&.js" | 6 - ...5\230-\353\215\247\354\205\210&120808&.js" | 10 - ...61\354\241\260\352\261\264-(1)&120889&.js" | 7 - ...61\354\241\260\352\261\264-(2)&120868&.js" | 14 - ...7\240-\354\246\235\354\213\235&120910&.js" | 6 - ...10\230\353\266\204\355\225\264&120852&.js" | 29 - ...5\230-\352\260\234\354\210\230&120836&.js" | 11 - ...0-\353\215\247\354\205\210-(1)&120851&.js" | 6 - ...0-\353\215\247\354\205\210-(2)&120864&.js" | 7 - ...65\220\355\225\230\352\270\260&120807&.js" | 6 - ...6\220-\354\260\276\352\270\260&120904&.js" | 7 - ...46\254\354\271\264\353\205\270&120819&.js" | 6 - ...40\204\354\247\200\353\214\200&120866&.js" | 30 - ...0\270-\355\225\264\353\217\205&120892&.js" | 6 - ...65\254\355\225\230\352\270\260&120897&.js" | 11 - ...26\221\352\274\254\354\271\230&120830&.js" | 6 - ...0\230\354\235\230-\355\225\251&120923&.js" | 8 - ...13\253\354\226\264\354\232\224&120894&.js" | 8 - ...5\270-\353\260\233\352\270\260&120818&.js" | 9 - ...30\271\354\225\214\354\235\264&120956&.js" | 15 - ...6\264-\354\202\254\354\240\204&120869&.js" | 7 - ...5\230-\353\202\230\354\235\264&120834&.js" | 6 - ...63\204\355\225\230\352\270\260&120878&.js" | 26 - ...15\224\355\225\230\352\270\260&120885&.js" | 6 - ...60\224\352\276\270\352\270\260&120895&.js" | 10 - ...15\224\355\225\230\352\270\260&120906&.js" | 6 - ...36\245\355\225\230\352\270\260&120913&.js" | 8 - ...230-\354\210\253\354\236\220-3&120871&.js" | 14 - ...65\254\355\225\230\352\270\260&120841&.js" | 8 - ...63\204\355\225\230\352\270\260&120909&.js" | 6 - ...36\220\353\245\264\352\270\260&120922&.js" | 6 - ...5\230-\352\260\234\354\210\230&120845&.js" | 6 - ...6\220-\354\240\234\352\261\260&120888&.js" | 6 - ...6\220-\352\260\234\354\210\230&120583&.js" | 6 - ...65\254\355\225\230\352\270\260&120811&.js" | 6 - ...40\245\355\225\230\352\270\260&120823&.js" | 16 - ...65\254\355\225\230\352\270\260&120860&.js" | 10 - ...40\225\355\225\230\352\270\260&120835&.js" | 7 - ...0\230-\352\260\234\354\210\230&120824&.js" | 7 - ...13\253\354\226\264\354\232\224&120813&.js" | 10 - ...0\230\354\235\230-\355\225\251&120831&.js" | 10 - ...214\353\223\244\352\270\260(1)&120847&.js" | 7 - ...14\353\223\244\352\270\260-(2)&120862&.js" | 7 - ...65\254\355\225\230\352\270\260&120812&.js" | 9 - ...2\250-\354\277\240\355\217\260&120884&.js" | 11 - ...5\230-\354\242\214\355\221\234&120861&.js" | 43 - ...1\244-\354\240\234\355\212\270&120853&.js" | 8 - ...5\234-\354\240\225\353\240\254&120880&.js" | 10 - ...61\260\355\225\230\352\270\260&120826&.js" | 6 - ...06\240\353\246\254\354\226\274&120848&.js" | 9 - .../\355\216\270\354\247\200&120898&.js" | 6 - .../\355\217\211\355\226\211&120875&.js" | 15 - ...0-\353\250\271\352\270\260-(1)&120814&.js" | 6 - ...0-\353\250\271\352\270\260-(2)&120815&.js" | 12 - ...0-\353\250\271\352\270\260-(3)&120816&.js" | 6 - ...5\234-\353\254\270\354\236\220&120896&.js" | 10 - ...0\230-\354\260\276\352\270\260&120846&.js" | 19 - .../level-1/2016\353\205\204&12901&.js" | 65 - ...222\244\354\247\221\352\270\260&68935&.js" | 37 - ...262\210\354\247\270\354\210\230&42748&.js" | 60 - ...12\270-\352\262\214\354\236\204&17682&.js" | 60 - ...260\200\354\247\200\353\217\204&17681&.js" | 62 - ...35\230-\354\210\253\354\236\220&12954&.js" | 41 - ...240\270\354\230\244\352\270\260&12903&.js" | 50 - ...12\224-\354\213\253\354\226\264&12906&.js" | 43 - ...36\220-\353\260\260\354\227\264&12910&.js" | 35 - ...10\230-\354\260\276\352\270\260&87389&.js" | 36 - .../\353\202\264\354\240\201&70128&.js" | 41 - ...215\224\355\225\230\352\270\260&68644&.js" | 26 - ...35\264\354\235\230-\355\225\251&12912&.js" | 47 - ...40\200-\354\210\234\354\234\204&77484&.js" | 151 - ...235\230\352\263\240\354\202\254&42840&.js" | 135 - ...35\230-\352\260\234\354\210\230&12916&.js" | 36 - ...240\254\355\225\230\352\270\260&12915&.js" | 35 - ...271\230\355\225\230\352\270\260&12917&.js" | 39 - ...70\260-\352\270\260\353\263\270&12918&.js" | 54 - ...260\224\352\276\270\352\270\260&12925&.js" | 22 - ...202\260\355\225\230\352\270\260&82612&.js" | 57 - ...60\251-\354\260\276\352\270\260&12919&.js" | 25 - ...02\254\355\225\230\352\270\260&118666&.js" | 72 - ...247\214\353\223\244\352\270\260&12977&.js" | 85 - ...10\230-\354\260\276\352\270\260&42839&.js" | 100 - ...30\353\260\225\354\210\230?&12922&.js" | 39 - ...230\201\353\213\250\354\226\264&81301&.js" | 102 - ...6\220-\354\247\235\352\277\215&131128&.js" | 30 - ...40\200-\354\225\224\355\230\270&12926&.js" | 88 - ...63\274-\353\260\233\352\270\260&92334&.js" | 167 - ...24\224-\354\266\224\354\262\234&72410&.js" | 123 - ...213\244\355\214\250\354\234\250&42889&.js" | 79 - ...31\200-\353\215\247\354\205\210&77884&.js" | 60 - ...10\230\354\235\230-\355\225\251&12928&.js" | 69 - ...215\224\355\225\230\352\270\260&86051&.js" | 59 - .../\354\230\210\354\202\260&12982&.js" | 48 - ...25\234-\354\204\240\354\210\230&42576&.js" | 83 - ...215\224\355\225\230\352\270\260&76501&.js" | 69 - ...247\214\353\223\244\352\270\260&12930&.js" | 87 - ...215\224\355\225\230\352\270\260&12931&.js" | 39 - ...247\214\353\223\244\352\270\260&12932&.js" | 66 - ...271\230\355\225\230\352\270\260&12933&.js" | 28 - ...67\274-\355\214\220\353\263\204&12934&.js" | 39 - ...261\260\355\225\230\352\270\260&12935&.js" | 68 - ...263\204\354\260\215\352\270\260&12969&.js" | 54 - ...31\200-\355\231\200\354\210\230&12937&.js" | 29 - ...262\264\354\234\241\353\263\265&42862&.js" | 127 - ...263\265\353\260\260\354\210\230&12940&.js" | 33 - ...202\254\352\260\201\355\230\225&86491&.js" | 32 - ...70\240-\354\266\224\354\270\241&12943&.js" | 75 - ...70\260-\352\262\214\354\236\204&64061&.js" | 84 - ...210\204\353\245\264\352\270\260&67256&.js" | 139 - ...265\254\355\225\230\352\270\260&12944&.js" | 32 - ...\217\260\354\274\223\353\252\254&1845&.js" | 59 - ...03\244\353\223\234-\354\210\230&12947&.js" | 50 - ...260\200\353\246\254\352\270\260&12948&.js" | 22 - ...35\230-\353\215\247\354\205\210&12950&.js" | 50 - ...35\230-\354\210\253\354\236\220&12899&.js" | 62 - ...203\200\354\235\274\353\247\201&12900&.js" | 16 - ...45\270-\353\271\204\355\212\270&77885&.js" | 17 - ...203\200\354\235\274\353\247\201&12902&.js" | 18 - build/oldSols/level-2/H-Index&42747&.js | 37 - ...247\214\353\223\244\352\270\260&12951&.js" | 48 - build/oldSols/level-2/N-Queen&12952&.js | 39 - ...263\265\353\260\260\354\210\230&12953&.js" | 21 - ...212\244\355\204\260\353\247\201&17677&.js" | 78 - ...0\250]-\354\272\220\354\213\234&17680&.js" | 58 - ...46\2104\353\270\224\353\241\235&17679&.js" | 47 - ...10\230-\352\262\214\354\236\204&17687&.js" | 16 - ...270\210\352\267\270\352\263\241&17683&.js" | 42 - ...0\250]-\354\225\225\354\266\225&17684&.js" | 55 - ...52\205-\354\240\225\353\240\254&17686&.js" | 14 - ...265\254\355\225\230\352\270\260&92335&.js" | 23 - ...236\220\353\245\264\352\270\260&87390&.js" | 13 - ...6\245-\355\201\260-\354\210\230&42746&.js" | 53 - ...30\225-\354\260\276\352\270\260&12905&.js" | 12 - ...235\270\355\225\230\352\270\260&81302&.js" | 21 - ...\213\250\352\261\260\353\246\254&1844&.js" | 40 - ...30\270-\353\263\200\355\231\230&60058&.js" | 64 - ...240\204\355\225\230\352\270\260&76502&.js" | 38 - ...247\214\353\223\244\352\270\260&87377&.js" | 43 - ...252\205\353\263\264\355\212\270&42885&.js" | 66 - ...212\245\352\260\234\353\260\234&42586&.js" | 153 - ...12\224-\355\212\270\353\237\255&42583&.js" | 55 - ...01\260-\354\210\253\354\236\220&12911&.js" | 50 - ...47\214\353\223\244\352\270\260&118667&.js" | 31 - ...224\260\353\250\271\352\270\260&12913&.js" | 29 - ...46\254-\353\233\260\352\270\260&12914&.js" | 12 - ...202\254\352\260\201\355\230\225&62048&.js" | 65 - ...246\254\353\211\264\354\226\274&72411&.js" | 35 - ...235\214\354\202\254\354\240\204&84512&.js" | 30 - ...27\264-\354\225\225\354\266\225&60057&.js" | 71 - ...54\270-\352\270\270\354\235\264&49994&.js" | 37 - .../\353\260\260\353\213\254&12978&.js" | 190 - ...202\254\354\235\264\355\201\264&86052&.js" | 76 - ...213\254\355\214\275\354\235\264&68645&.js" | 40 - ...265\234\353\214\200\355\231\224&67257&.js" | 33 - ...34\204-\352\262\200\354\203\211&72412&.js" | 51 - ...36\220-\353\270\224\353\241\235&12923&.js" | 32 - ...35\230-\355\221\234\355\230\204&12924&.js" | 52 - ...202\254\355\212\270\353\246\254&49993&.js" | 16 - ...266\201\353\214\200\355\232\214&92342&.js" | 72 - ...247\220\354\236\207\352\270\260&12981&.js" | 13 - ...214\200\354\247\204\355\221\234&12985&.js" | 42 - ...261\204\355\214\205\353\260\251&42888&.js" | 83 - ...45\270-\352\264\204\355\230\270&12909&.js" | 12 - .../\354\234\204\354\236\245&42578&.js" | 89 - ...263\265\355\225\230\352\270\260&70129&.js" | 32 - ...202\230\353\210\204\352\270\260&86971&.js" | 29 - ...60\204-\354\235\264\353\217\231&12980&.js" | 25 - ...235\264\354\212\244\355\213\261&42860&.js" | 25 - ...70\210-\352\263\204\354\202\260&92341&.js" | 65 - ...12\224-\353\260\251\353\262\225&12936&.js" | 39 - ...261\260\355\225\230\352\270\260&12973&.js" | 47 - ...265\234\354\206\237\352\260\222&12939&.js" | 40 - ...247\214\353\223\244\352\270\260&12941&.js" | 30 - .../\354\271\264\355\216\253&42842&.js" | 41 - ...10\230-\354\204\270\352\270\260&68936&.js" | 25 - ...247\214\353\223\244\352\270\260&42883&.js" | 36 - ...62\237-\353\204\230\353\262\204&43165&.js" | 46 - .../\355\212\234\355\224\214&64065&.js" | 33 - ...224\204\353\246\260\355\204\260&42587&.js" | 136 - ...224\274\353\241\234\353\217\204&87946&.js" | 28 - ...02\230\354\271\230-\354\210\230&12945&.js" | 30 - ...35\264\354\235\230-\355\203\221&12946&.js" | 28 - ...240\204\355\225\230\352\270\260&77485&.js" | 27 - ...35\230-\352\263\261\354\205\210&12949&.js" | 33 - ...233\204\353\263\264\355\202\244&42890&.js" | 50 - ...50\274-\353\205\270\353\223\234&49189&.js" | 23 - ...212\270\354\233\214\355\201\254&43162&.js" | 30 - ...271\264\353\251\224\353\235\274&42884&.js" | 34 - ...212\270\354\225\250\353\262\224&42579&.js" | 48 - ...226\211\352\262\275\353\241\234&43164&.js" | 24 - ...210\234\354\234\204\355\201\220&42628&.js" | 34 - ...265\255\354\213\254\354\202\254&43238&.js" | 19 - ...02\254-\352\262\200\354\203\211&60060&.js" | 73 - ...26\264-\355\215\274\354\246\220&12983&.js" | 31 - ...235\274\354\235\264\353\270\214&42891&.js" | 30 - ...35\230-\352\260\257\354\210\230&12929&.js" | 7 - build/run.js | 10 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 8 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 8 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 19 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 9 - .../codeisneverodd.js" | 5 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 13 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 9 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 5 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 26 - .../codeisneverodd.js" | 8 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 27 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 8 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 5 - .../codeisneverodd.js" | 5 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 12 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 23 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 5 - .../codeisneverodd.js" | 11 - .../codeisneverodd.js" | 5 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 13 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 4 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 8 - .../codeisneverodd.js" | 22 - .../codeisneverodd.js" | 5 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 6 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 12 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 9 - .../codeisneverodd.js" | 3 - .../codeisneverodd.js" | 7 - .../codeisneverodd.js" | 16 - .../level-1/2016\353\205\204/chaerin-dev.js" | 11 - .../2016\353\205\204/codeisneverodd.js" | 8 - .../2016\353\205\204/prove-ability.js" | 15 - .../level-1/2016\353\205\204/yongchanson.js" | 14 - .../codeisneverodd.js" | 16 - .../jaewon1676.js" | 5 - .../prove-ability.js" | 3 - .../chaerin-dev.js" | 13 - .../codeisneverodd.js" | 6 - .../createhb21.js" | 9 - .../jaewon1676.js" | 12 - .../prove-ability.js" | 8 - .../codeisneverodd.js" | 23 - .../jaewon1676.js" | 32 - .../codeisneverodd.js" | 23 - .../jaewon1676.js" | 22 - .../chaerin-dev.js" | 10 - .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 8 - .../prove-ability.js" | 11 - .../chaerin-dev.js" | 5 - .../codeisneverodd.js" | 5 - .../jaewon1676.js" | 10 - .../prove-ability.js" | 10 - .../yongchanson.js" | 9 - .../chaerin-dev.js" | 6 - .../codeisneverodd.js" | 8 - .../prove-ability.js" | 17 - .../codeisneverodd.js" | 9 - .../dev.js" | 7 - .../prove-ailbity.js" | 5 - .../codeisneverodd.js" | 8 - .../jaewon1676.js" | 7 - .../prove-ability.js" | 12 - .../\353\202\264\354\240\201/chaerin-dev.js" | 3 - .../codeisneverodd.js" | 3 - .../\353\202\264\354\240\201/jaewon1676.js" | 7 - .../prove-ability.js" | 9 - .../\353\202\264\354\240\201/yongchanson.js" | 8 - .../codeisneverodd.js" | 9 - .../prove-ability.js" | 11 - .../chaerin-dev.js" | 7 - .../codeisneverodd.js" | 7 - .../jaewon1676.js" | 12 - .../prove-ability.js" | 3 - .../chaerin-dev.js" | 11 - .../codeisneverodd.js" | 28 - .../jaewon1676.js" | 20 - .../prove-ability.js" | 23 - .../yongchanson.js" | 29 - .../chaerin-dev.js" | 22 - .../codeisneverodd.js" | 25 - .../jaewon1676.js" | 23 - .../prove-ability.js" | 35 - .../yongchanson.js" | 20 - .../chaerin-dev.js" | 8 - .../codeisneverodd.js" | 5 - .../prove-ability.js" | 8 - .../yongchanson.js" | 6 - .../chaerin-dev.js" | 9 - .../codeisneverodd.js" | 8 - .../prove-ability.js" | 11 - .../chaerin-dev.js" | 3 - .../codeisneverodd.js" | 10 - .../jaewon1676.js" | 6 - .../prove-ability.js" | 3 - .../chaerin-dev.js" | 11 - .../codeisneverodd.js" | 3 - .../prove-ability.js" | 13 - .../soulhn.js" | 6 - .../yongchanson.js" | 10 - .../chaerin-dev.js" | 3 - .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 3 - .../prove-ability.js" | 3 - .../chaerin-dev.js" | 7 - .../codeisneverodd.js" | 5 - .../jaewon1676.js" | 10 - .../prove-ability.js" | 8 - .../yongchanson.js" | 15 - .../chaerin-dev.js" | 3 - .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 7 - .../prove-ability.js" | 3 - .../codeisneverodd.js" | 10 - .../codisneverodd.js" | 14 - .../ssi02014.js" | 41 - .../chaerin-dev.js" | 31 - .../codeisneverodd.js" | 21 - .../jaewon1676.js" | 26 - .../chaerin-dev.js" | 17 - .../codeisneverodd.js" | 36 - .../jaewon1676.js" | 18 - .../prove-ability.js" | 19 - .../chaerin-dev.js" | 4 - .../codeisneverodd.js" | 7 - .../jaewon1676.js" | 8 - .../prove-ability.js" | 6 - .../yongchanson.js" | 3 - .../chaerin-dev.js" | 14 - .../codeisneverodd.js" | 22 - .../jaewon1676.js" | 17 - .../yongchanson.js" | 20 - .../ssi02014.js" | 26 - .../chaerin-dev.js" | 23 - .../codeisneverodd.js" | 14 - .../jaewon1676.js" | 23 - .../prove-ability.js" | 17 - .../chaerin-dev.js" | 26 - .../codeisneverodd.js" | 31 - .../jaewon1676.js" | 29 - .../prove-ability.js" | 27 - .../chaerin-dev.js" | 29 - .../codeisneverodd.js" | 15 - .../jaewon1676.js" | 30 - .../codeisneverodd.js" | 20 - .../jaewon1676.js" | 40 - .../codeisneverodd.js" | 14 - .../jaewon1676.js" | 13 - .../prove-bility.js" | 17 - .../chaerin-dev.js" | 11 - .../codeisneverodd.js" | 7 - .../jaewon1676.js" | 14 - .../prove-ability.js" | 7 - .../yongchanson.js" | 17 - .../chaerin-dev.js" | 7 - .../codeisneverodd.js" | 7 - .../prove-ability.js" | 9 - .../yongchanson.js" | 22 - .../codeisneverodd.js" | 10 - .../\354\230\210\354\202\260/jaewon1676.js" | 15 - .../prove-ability.js" | 15 - .../chaerin-dev.js" | 17 - .../codeisneverodd.js" | 8 - .../hyosung.js" | 31 - .../jaewon1676.js" | 20 - .../chaerin-dev.js" | 13 - .../codeisneverod.js" | 7 - .../codeisneverodd.js" | 6 - .../jaewon1676.js" | 12 - .../prove-ability.js" | 8 - .../chaerin-dev.js" | 17 - .../codeisneverodd.js" | 15 - .../jaewon1676.js" | 33 - .../prove-ability.js" | 12 - .../chaerin-dev.js" | 8 - .../codeisneverodd.js" | 7 - .../prove-ability.js" | 9 - .../chaerin-dev.js" | 7 - .../codeisneverodd.js" | 7 - .../jaewon1676.js" | 7 - .../prove-ability.js" | 11 - .../yongchanson.js" | 9 - .../chaerin-dev.js" | 8 - .../codeisneverodd.js" | 9 - .../prove-ability.js" | 3 - .../chaerin-dev.js" | 6 - .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 6 - .../prove-ability.js" | 8 - .../yongchanson.js" | 5 - .../chaerin-dev.js" | 6 - .../codeisneverodd.js" | 5 - .../jaewon1676.js" | 11 - .../prove-ability.js" | 12 - .../chaerin-dev.js" | 17 - .../prove-ability.js" | 18 - .../yongchanson.js" | 12 - .../chaerin-dev.js" | 3 - .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 6 - .../prove-ability.js" | 3 - .../yongchanson.js" | 3 - .../chaerin-dev.js" | 35 - .../codeisneverodd.js" | 24 - .../jaewon1676.js" | 23 - .../prove-ability.js" | 36 - .../chaerin-dev.js" | 8 - .../codeisneverodd.js" | 9 - .../yongchanson.js" | 9 - .../codeisneverodd.js" | 9 - .../prove-ability.js" | 12 - .../chaerin-dev.js" | 20 - .../codeisneverodd.js" | 9 - .../jaewon1676.js" | 11 - .../prove-ability.js" | 16 - .../yongchanson.js" | 8 - .../chaerin-dev.js" | 26 - .../codeisneverodd.js" | 22 - .../jaewon1676.js" | 29 - .../chaerin-dev.js" | 61 - .../codeisneverodd.js" | 37 - .../chaerin-dev.js" | 6 - .../codeisneverodd.js" | 3 - .../jaewon1676.js" | 7 - .../prove-ability.js" | 7 - .../chaerin-dev.js" | 11 - .../codeisneverodd.js" | 5 - .../jaewon1676.js" | 11 - .../prove-ability.js" | 14 - .../yongchanson.js" | 7 - .../chaerin-dev.js" | 12 - .../codeisneverodd.js" | 8 - .../jaewon1676.js" | 10 - .../prove-ability.js" | 11 - .../chaerin-dev.js" | 6 - .../codeisneverodd.js" | 3 - .../prove-ability.js" | 6 - .../chaerin-dev.js" | 11 - .../codeisneverodd.js" | 12 - .../yongchanson.js" | 11 - .../RyanDeclan.js" | 18 - .../codeisneverodd.js" | 14 - .../jaewon1676.js" | 11 - .../jaewon1676.js" | 13 - .../le2sky.js" | 14 - .../codeisneverodd.js" | 15 - .../level-2/H Index/codeisneverodd.js | 11 - build/solutions/level-2/H Index/jaewon1676.js | 11 - .../RyanDeclan.js" | 8 - .../codeisneverodd.js" | 6 - .../jaewon1676.js" | 13 - .../yongchanson.js" | 11 - .../level-2/N Queen/codeisneverodd.js | 36 - .../codeisneverodd.js" | 18 - .../codeisneverodd.js" | 24 - .../jaewon1676.js" | 49 - .../codeisneverodd.js" | 18 - .../jaewon1676.js" | 34 - .../codeisneverodd.js" | 44 - .../codeisneverodd.js" | 13 - .../minjongbaek.js" | 39 - .../codeisneverodd.js" | 30 - .../ssi02014.js" | 20 - .../codeisneverodd.js" | 11 - .../minjongbaek.js" | 20 - .../jaewon1676.js" | 10 - .../codeisneverodd.js" | 13 - .../createhb21.js" | 6 - .../prove-ability.js" | 3 - .../codeisneverodd.js" | 9 - .../codeisneverodd.js" | 18 - .../prove-ability.js" | 38 - .../codeisneverodd.js" | 36 - .../codeisneverodd.js" | 35 - .../codeisneverodd.js" | 40 - .../iHoHyeon.js" | 21 - .../jaewon1676.js" | 16 - .../prove-ability.js" | 22 - .../RyanDeclan.js" | 35 - .../chaerin-dev.js" | 25 - ...1\353\217\204 \352\260\220\354\206\214.js" | 16 - .../codeisneverodd.js" | 19 - .../createhb21.js" | 24 - .../jaewon1676.js" | 21 - .../codeisneverodd.js" | 11 - .../jaewon1676.js" | 23 - .../codeisneverodd.js" | 19 - .../dia.js" | 4 - .../prove-ability.js" | 9 - .../codeisneverodd.js" | 28 - .../codeisneverodd.js" | 8 - .../jaewon1676.js" | 16 - .../codeisneverodd.js" | 9 - .../codeisneverodd.js" | 16 - .../jaewon1676.js" | 14 - .../yongchanson.js" | 11 - .../codeisneverodd.js" | 32 - .../codeisneverodd.js" | 27 - .../chaerin-dev.js" | 43 - .../codeisneverodd.js" | 23 - .../codeisneverodd.js" | 34 - .../pereng11 O(N * N);.js" | 53 - .../\353\260\260\353\213\254/pereng11.js" | 131 - .../minjongbaek.js" | 72 - .../codeisneverodd.js" | 16 - .../jaewon1676.js" | 19 - .../codeisneverodd.js" | 30 - .../codeisneverodd.js" | 48 - .../iHoHyeon.js" | 29 - .../codeisneverodd.js" | 14 - .../prove-ability.js" | 15 - .../yongchanson.js" | 16 - .../codeisneverodd.js" | 13 - .../codeisneverodd.js" | 69 - .../codeisneverodd.js" | 10 - .../codeisneverodd.js" | 11 - .../le2sky.js" | 24 - .../chaerin-dev.js" | 42 - .../codeisneverodd.js" | 14 - .../jaewon1676.js" | 20 - .../codeisneverodd.js" | 9 - .../\354\234\204\354\236\245/chaerin-dev.js" | 18 - .../codeisneverodd.js" | 13 - .../\354\234\204\354\236\245/hyosung.js" | 19 - .../\354\234\204\354\236\245/jaewon1676.js" | 21 - .../RyanDeclan.js" | 10 - .../codeisneverodd.js" | 17 - .../codeisneverodd.js" | 26 - .../codeisneverodd.js" | 12 - .../yongchanson.js" | 8 - .../codeisneverodd.js" | 22 - .../ljw0096.js" | 61 - .../codeisneverodd.js" | 36 - .../codeisneverodd.js" | 14 - .../jaewon1676.js" | 18 - .../codeisneverodd.js" | 6 - .../jaewon1676.js" | 7 - .../prove-ability.js" | 4 - .../yongchanson.js" | 6 - .../codeisneverodd.js" | 7 - .../prove-ability.js" | 11 - .../yongchanson.js" | 5 - .../codeisneverodd.js" | 12 - .../\354\271\264\355\216\253/jaewon1676.js" | 24 - .../codeisneverodd.js" | 22 - .../codeisneverodd.js" | 14 - .../jaewon1676.js" | 16 - .../codeisneverodd.js" | 13 - .../ssi02014.js" | 19 - .../\355\212\234\355\224\214/chaerin-dev.js" | 18 - .../codeisneverodd.js" | 10 - .../codeisneverodd.js" | 47 - .../createhb21.js" | 18 - .../jaewon1676.js" | 21 - .../pereng11.js" | 22 - .../codeisneverodd.js" | 13 - .../jaewon1676.js" | 12 - .../codeisneverodd.js" | 25 - .../codeisneverodd.js" | 24 - .../codeisneverodd.js" | 12 - .../prove-ability.js" | 16 - .../codeisneverodd.js" | 47 - .../codeisneverodd.js" | 20 - .../codeisneverodd.js" | 27 - .../jaewon1676.js" | 31 - .../codeisneverodd.js" | 20 - .../codeisneverodd.js" | 21 - .../jaewon1676.js" | 31 - .../codeisneverodd.js" | 16 - .../ryong9rrr.js" | 70 - .../codeisneverodd.js" | 28 - .../ryong9rrr.js" | 27 - .../cg10036.js" | 4 - build/utils/db.js | 41 - build/utils/file.js | 33 - build/utils/oldSols.js | 33 - build/utils/solutions.js | 1 - data/problems.json | 1 + data/solutions.json | 3554 ++++++++++++++++ next-env.d.ts | 5 + next.config.js | 6 + package-lock.json | 2643 ------------ package.json | 74 +- public/favicon.ico | Bin 0 -> 19330 bytes public/profile-512x512.png | Bin 0 -> 91392 bytes run.ts | 12 - src/lib/@components/Logo.tsx | 16 + src/lib/@components/MainLayout.tsx | 121 + src/lib/@hooks/useClient.ts | 10 + src/lib/@hooks/useColor.ts | 17 + src/lib/@hooks/useProbs.ts | 35 + src/lib/@hooks/useSols.ts | 80 + src/lib/@utils/storageEffect.ts | 37 + src/pages/_app.tsx | 17 + src/pages/_document.tsx | 13 + src/pages/api/prob.ts | 47 + src/pages/api/sol.ts | 74 + src/pages/index.tsx | 32 + src/pages/newSol.tsx | 81 + src/pages/sols.tsx | 112 + tsconfig.json | 38 +- types/process.d.ts | 5 + utils/build.js | 195 - utils/db.ts | 70 - utils/file.ts | 41 - utils/oldSols.ts | 41 - yarn.lock | 3734 +++++++++++++++++ 730 files changed, 8147 insertions(+), 20880 deletions(-) create mode 100644 .eslintrc.json delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/linting.yml delete mode 100644 .github/workflows/update-README.yml create mode 100755 .husky/pre-commit delete mode 100644 .prettierignore delete mode 100644 .vscode/settings.json delete mode 100644 build/db/db.json delete mode 100644 build/newSol.json delete mode 100644 "build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" delete mode 100644 "build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" delete mode 100644 "build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" delete mode 100644 "build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" delete mode 100644 "build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" delete mode 100644 "build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" delete mode 100644 "build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" delete mode 100644 "build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" delete mode 100644 "build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" delete mode 100644 "build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" delete mode 100644 "build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" delete mode 100644 "build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" delete mode 100644 "build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" delete mode 100644 "build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" delete mode 100644 "build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" delete mode 100644 "build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" delete mode 100644 "build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" delete mode 100644 "build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" delete mode 100644 "build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" delete mode 100644 "build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" delete mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" delete mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" delete mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" delete mode 100644 "build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" delete mode 100644 "build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" delete mode 100644 "build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" delete mode 100644 "build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" delete mode 100644 "build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" delete mode 100644 "build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" delete mode 100644 "build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" delete mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" delete mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" delete mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" delete mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" delete mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" delete mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" delete mode 100644 "build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" delete mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" delete mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" delete mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" delete mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" delete mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" delete mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" delete mode 100644 "build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" delete mode 100644 "build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" delete mode 100644 "build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" delete mode 100644 "build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" delete mode 100644 "build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" delete mode 100644 "build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" delete mode 100644 "build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" delete mode 100644 "build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" delete mode 100644 "build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" delete mode 100644 "build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" delete mode 100644 "build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" delete mode 100644 "build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" delete mode 100644 "build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" delete mode 100644 "build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" delete mode 100644 "build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" delete mode 100644 "build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" delete mode 100644 "build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" delete mode 100644 "build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" delete mode 100644 "build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" delete mode 100644 "build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" delete mode 100644 "build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" delete mode 100644 "build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" delete mode 100644 "build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" delete mode 100644 "build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" delete mode 100644 "build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" delete mode 100644 "build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" delete mode 100644 "build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" delete mode 100644 "build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" delete mode 100644 "build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" delete mode 100644 "build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" delete mode 100644 "build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" delete mode 100644 "build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" delete mode 100644 "build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" delete mode 100644 "build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" delete mode 100644 "build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" delete mode 100644 "build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" delete mode 100644 "build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" delete mode 100644 "build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" delete mode 100644 "build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" delete mode 100644 "build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" delete mode 100644 "build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" delete mode 100644 "build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" delete mode 100644 "build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" delete mode 100644 "build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" delete mode 100644 "build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" delete mode 100644 "build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" delete mode 100644 "build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" delete mode 100644 "build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" delete mode 100644 "build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" delete mode 100644 "build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" delete mode 100644 "build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" delete mode 100644 "build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" delete mode 100644 "build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" delete mode 100644 "build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" delete mode 100644 "build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" delete mode 100644 "build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" delete mode 100644 "build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" delete mode 100644 "build/oldSols/level-1/2016\353\205\204&12901&.js" delete mode 100644 "build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" delete mode 100644 "build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" delete mode 100644 "build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" delete mode 100644 "build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" delete mode 100644 "build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" delete mode 100644 "build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" delete mode 100644 "build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" delete mode 100644 "build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" delete mode 100644 "build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" delete mode 100644 "build/oldSols/level-1/\353\202\264\354\240\201&70128&.js" delete mode 100644 "build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" delete mode 100644 "build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" delete mode 100644 "build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" delete mode 100644 "build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" delete mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" delete mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" delete mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" delete mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" delete mode 100644 "build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" delete mode 100644 "build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" delete mode 100644 "build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" delete mode 100644 "build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" delete mode 100644 "build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" delete mode 100644 "build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" delete mode 100644 "build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" delete mode 100644 "build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" delete mode 100644 "build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" delete mode 100644 "build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" delete mode 100644 "build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" delete mode 100644 "build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" delete mode 100644 "build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" delete mode 100644 "build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" delete mode 100644 "build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" delete mode 100644 "build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" delete mode 100644 "build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" delete mode 100644 "build/oldSols/level-1/\354\231\204\354\243\274\355\225\230\354\247\200-\353\252\273\355\225\234-\354\204\240\354\210\230&42576&.js" delete mode 100644 "build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" delete mode 100644 "build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" delete mode 100644 "build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" delete mode 100644 "build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" delete mode 100644 "build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" delete mode 100644 "build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" delete mode 100644 "build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" delete mode 100644 "build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" delete mode 100644 "build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" delete mode 100644 "build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" delete mode 100644 "build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" delete mode 100644 "build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" delete mode 100644 "build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" delete mode 100644 "build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" delete mode 100644 "build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" delete mode 100644 "build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" delete mode 100644 "build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" delete mode 100644 "build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" delete mode 100644 "build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" delete mode 100644 "build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" delete mode 100644 "build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" delete mode 100644 "build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" delete mode 100644 "build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" delete mode 100644 "build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" delete mode 100644 build/oldSols/level-2/H-Index&42747&.js delete mode 100644 "build/oldSols/level-2/JadenCase-\353\254\270\354\236\220\354\227\264-\353\247\214\353\223\244\352\270\260&12951&.js" delete mode 100644 build/oldSols/level-2/N-Queen&12952&.js delete mode 100644 "build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" delete mode 100644 "build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" delete mode 100644 "build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" delete mode 100644 "build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" delete mode 100644 "build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" delete mode 100644 "build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" delete mode 100644 "build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" delete mode 100644 "build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" delete mode 100644 "build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" delete mode 100644 "build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" delete mode 100644 "build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" delete mode 100644 "build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" delete mode 100644 "build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" delete mode 100644 "build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" delete mode 100644 "build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" delete mode 100644 "build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" delete mode 100644 "build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" delete mode 100644 "build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" delete mode 100644 "build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" delete mode 100644 "build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" delete mode 100644 "build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" delete mode 100644 "build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" delete mode 100644 "build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" delete mode 100644 "build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" delete mode 100644 "build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" delete mode 100644 "build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" delete mode 100644 "build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" delete mode 100644 "build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" delete mode 100644 "build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" delete mode 100644 "build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" delete mode 100644 "build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" delete mode 100644 "build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" delete mode 100644 "build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" delete mode 100644 "build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" delete mode 100644 "build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" delete mode 100644 "build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" delete mode 100644 "build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" delete mode 100644 "build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" delete mode 100644 "build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" delete mode 100644 "build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" delete mode 100644 "build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" delete mode 100644 "build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" delete mode 100644 "build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" delete mode 100644 "build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" delete mode 100644 "build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" delete mode 100644 "build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" delete mode 100644 "build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" delete mode 100644 "build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" delete mode 100644 "build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" delete mode 100644 "build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" delete mode 100644 "build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" delete mode 100644 "build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" delete mode 100644 "build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" delete mode 100644 "build/oldSols/level-2/\354\277\274\353\223\234\354\225\225\354\266\225-\355\233\204-\352\260\234\354\210\230-\354\204\270\352\270\260&68936&.js" delete mode 100644 "build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" delete mode 100644 "build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" delete mode 100644 "build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" delete mode 100644 "build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" delete mode 100644 "build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" delete mode 100644 "build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" delete mode 100644 "build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" delete mode 100644 "build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" delete mode 100644 "build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" delete mode 100644 "build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" delete mode 100644 "build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" delete mode 100644 "build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" delete mode 100644 "build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" delete mode 100644 "build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" delete mode 100644 "build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" delete mode 100644 "build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" delete mode 100644 "build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" delete mode 100644 "build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" delete mode 100644 "build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" delete mode 100644 "build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" delete mode 100644 "build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" delete mode 100644 build/run.js delete mode 100644 "build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200 \354\206\214\353\254\270\354\236\220/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230 \353\202\230\354\235\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" delete mode 100644 "build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/2016\353\205\204/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/2016\353\205\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/2016\353\205\204/prove-ability.js" delete mode 100644 "build/solutions/level-1/2016\353\205\204/yongchanson.js" delete mode 100644 "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" delete mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" delete mode 100644 "build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" delete mode 100644 "build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" delete mode 100644 "build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" delete mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" delete mode 100644 "build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" delete mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" delete mode 100644 "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" delete mode 100644 "build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" delete mode 100644 "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\202\264\354\240\201/yongchanson.js" delete mode 100644 "build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" delete mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" delete mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" delete mode 100644 "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\230\210\354\202\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" delete mode 100644 "build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" delete mode 100644 "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" delete mode 100644 "build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" delete mode 100644 "build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" delete mode 100644 "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" delete mode 100644 "build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" delete mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" delete mode 100644 "build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" delete mode 100644 "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" delete mode 100644 "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" delete mode 100644 "build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" delete mode 100644 "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" delete mode 100644 "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" delete mode 100644 "build/solutions/level-2/2 x n \355\203\200\354\235\274\353\247\201/jaewon1676.js" delete mode 100644 "build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" delete mode 100644 "build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" delete mode 100644 build/solutions/level-2/H Index/codeisneverodd.js delete mode 100644 build/solutions/level-2/H Index/jaewon1676.js delete mode 100644 "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/RyanDeclan.js" delete mode 100644 "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" delete mode 100644 build/solutions/level-2/N Queen/codeisneverodd.js delete mode 100644 "build/solutions/level-2/N\352\260\234\354\235\230 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" delete mode 100644 "build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" delete mode 100644 "build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/[3\354\260\250] n\354\247\204\354\210\230 \352\262\214\354\236\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" delete mode 100644 "build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" delete mode 100644 "build/solutions/level-2/[3\354\260\250] \355\214\214\354\235\274\353\252\205 \354\240\225\353\240\254/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234 \354\206\214\354\210\230 \352\260\234\354\210\230 \352\265\254\355\225\230\352\270\260/minjongbaek.js" delete mode 100644 "build/solutions/level-2/n^2 \353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" delete mode 100644 "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" delete mode 100644 "build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260 \355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" delete mode 100644 "build/solutions/level-2/\352\264\204\355\230\270 \353\263\200\355\231\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\352\264\204\355\230\270 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" delete mode 100644 "build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" delete mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" delete mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" delete mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" delete mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" delete mode 100644 "build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" delete mode 100644 "build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" delete mode 100644 "build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" delete mode 100644 "build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" delete mode 100644 "build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" delete mode 100644 "build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" delete mode 100644 "build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" delete mode 100644 "build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\354\210\230\354\213\235 \354\265\234\353\214\200\355\231\224/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" delete mode 100644 "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" delete mode 100644 "build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" delete mode 100644 "build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\230\201\354\226\264 \353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" delete mode 100644 "build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" delete mode 100644 "build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" delete mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" delete mode 100644 "build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/RyanDeclan.js" delete mode 100644 "build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" delete mode 100644 "build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" delete mode 100644 "build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" delete mode 100644 "build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" delete mode 100644 "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" delete mode 100644 "build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" delete mode 100644 "build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\354\277\274\353\223\234\354\225\225\354\266\225 \355\233\204 \352\260\234\354\210\230 \354\204\270\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" delete mode 100644 "build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" delete mode 100644 "build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" delete mode 100644 "build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" delete mode 100644 "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/jaewon1676.js" delete mode 100644 "build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\226\211\353\240\254 \355\205\214\353\221\220\353\246\254 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" delete mode 100644 "build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/prove-ability.js" delete mode 100644 "build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" delete mode 100644 "build/solutions/level-3/\352\260\200\354\236\245 \353\250\274 \353\205\270\353\223\234/codeisneverodd.js" delete mode 100644 "build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" delete mode 100644 "build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" delete mode 100644 "build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" delete mode 100644 "build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" delete mode 100644 "build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" delete mode 100644 "build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" delete mode 100644 "build/solutions/level-4/\352\260\200\354\202\254 \352\262\200\354\203\211/ryong9rrr.js" delete mode 100644 "build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" delete mode 100644 "build/solutions/level-4/\353\254\264\354\247\200\354\235\230 \353\250\271\353\260\251 \353\235\274\354\235\264\353\270\214/ryong9rrr.js" delete mode 100644 "build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" delete mode 100644 build/utils/db.js delete mode 100644 build/utils/file.js delete mode 100644 build/utils/oldSols.js delete mode 100644 build/utils/solutions.js create mode 100644 data/problems.json create mode 100644 data/solutions.json create mode 100644 next-env.d.ts create mode 100644 next.config.js delete mode 100644 package-lock.json create mode 100644 public/favicon.ico create mode 100644 public/profile-512x512.png delete mode 100644 run.ts create mode 100644 src/lib/@components/Logo.tsx create mode 100644 src/lib/@components/MainLayout.tsx create mode 100644 src/lib/@hooks/useClient.ts create mode 100644 src/lib/@hooks/useColor.ts create mode 100644 src/lib/@hooks/useProbs.ts create mode 100644 src/lib/@hooks/useSols.ts create mode 100644 src/lib/@utils/storageEffect.ts create mode 100644 src/pages/_app.tsx create mode 100644 src/pages/_document.tsx create mode 100644 src/pages/api/prob.ts create mode 100644 src/pages/api/sol.ts create mode 100644 src/pages/index.tsx create mode 100644 src/pages/newSol.tsx create mode 100644 src/pages/sols.tsx create mode 100644 types/process.d.ts delete mode 100644 utils/build.js delete mode 100644 utils/db.ts delete mode 100644 utils/file.ts delete mode 100644 utils/oldSols.ts create mode 100644 yarn.lock diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..9669912 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,27 @@ +{ + "extends": [ + "next/core-web-vitals", + "airbnb", + "airbnb-typescript", + "plugin:prettier/recommended" + ], + "parserOptions": { + "project": "./tsconfig.json" + }, + "rules": { + "react/jsx-props-no-spreading": "off", + "react/react-in-jsx-scope": "off", + "react/jsx-filename-extension": [1, { "extensions": [".ts", ".tsx"] }], + "react/require-default-props": "off", + "import/no-extraneous-dependencies": ["error", { "devDependencies": true }], + "@typescript-eslint/no-use-before-define": "off" + }, + "overrides": [ + { + "files": ["src/api/*/**"], + "rules": { + "import/prefer-default-export": "off" + } + } + ] +} diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 1a98a58..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,8 +0,0 @@ -## 새롭게 추가된 문제 풀이 - - - - -## 기존 풀이에 추가한 풀이 - -## 관련 이슈 diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml new file mode 100644 index 0000000..1210488 --- /dev/null +++ b/.github/workflows/linting.yml @@ -0,0 +1,20 @@ +name: Lint GitHub Action + +run-name: ${{ github.actor }}님의 빌드 및 Lint 검사 🚀 + +on: + pull_request: + branches: + - main + - dev +jobs: + ESLint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: "14" + - run: yarn + - run: yarn build + - run: yarn lint diff --git a/.github/workflows/update-README.yml b/.github/workflows/update-README.yml deleted file mode 100644 index 5900ec9..0000000 --- a/.github/workflows/update-README.yml +++ /dev/null @@ -1,40 +0,0 @@ -# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: update README.md - -on: - push: - branches: - - main - - feat/id-based-parsing - pull_request: - branches: - - main -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Use Node.js 16.14.0 - uses: actions/setup-node@v3 - with: - node-version: 16.14.0 - cache: "npm" - - name: install package - run: npm install - - name: build README.md - run: npm run build - - name: get diff - id: get_diff - run: | - git diff --quiet ./README.md || echo "::set-output name=new_changes_exist::true" - - name: update README.md - if: steps.get_diff.outputs.new_changes_exist == 'true' - run: | - git add ./README.md - git config user.name github-actions - git config user.email github-actions@github.com - git commit -m "Automatic Update README.md" - git push diff --git a/.gitignore b/.gitignore index 29284c6..84a91bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,152 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -README.md -# Created by https://www.toptal.com/developers/gitignore/api/macos,webstorm -# Edit at https://www.toptal.com/developers/gitignore?templates=macos,webstorm +# dependencies +/node_modules +/.pnp +.pnp.js +# testing +/coverage -.idea/* -temp.txt +# next.js +/.next/ +/out/ -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### WebStorm ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# AWS User-specific -.idea/**/aws.xml - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr +# production +/build -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# SonarLint plugin -.idea/sonarlint/ - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser - -### WebStorm Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - -# Sonarlint plugin -# https://plugins.jetbrains.com/plugin/7973-sonarlint -.idea/**/sonarlint/ +# misc +.DS_Store +*.pem -# SonarQube Plugin -# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin -.idea/**/sonarIssues.xml +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* -# Markdown Navigator plugin -# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced -.idea/**/markdown-navigator.xml -.idea/**/markdown-navigator-enh.xml -.idea/**/markdown-navigator/ +# local env files +.env*.local -# Cache file creation bug -# See https://youtrack.jetbrains.com/issue/JBR-2257 -.idea/$CACHE_FILE$ +# vercel +.vercel -# CodeStream plugin -# https://plugins.jetbrains.com/plugin/12206-codestream -.idea/codestream.xml +# typescript +*.tsbuildinfo -# End of https://www.toptal.com/developers/gitignore/api/macos,webstorm -/references/ -/node_modules/ -/test/ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..765baae --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +yarn pre-commit diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 695149a..0000000 --- a/.prettierignore +++ /dev/null @@ -1,6 +0,0 @@ -/node_modules -.gitignore -.prettierrc.json -README.md -/.github -/.husky diff --git a/.prettierrc.json b/.prettierrc.json index 61be051..0e36e8b 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,7 +1,11 @@ { - "singleQuote": true, + "printWidth": 80, + "semi": true, + "singleQuote": false, + "trailingComma": "none", + "tabWidth": 2, "bracketSpacing": true, - "bracketSameLine": true, - "arrowParens": "always", - "printWidth": 120 + "endOfLine": "auto", + "useTabs": false, + "arrowParens": "avoid" } diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index fd67ac9..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "files.exclude": { - "**/.git": true, - "**/.svn": true, - "**/.hg": true, - "**/CVS": true, - "**/.DS_Store": true, - "**/Thumbs.db": true, - "**/node_modules": true - } -} diff --git a/README.md b/README.md index 9e168dd..f109c22 100644 --- a/README.md +++ b/README.md @@ -1,342 +1 @@ -# 프로그래머스 모든 문제 풀이 -[![방문자수](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https://github.com/codeisneverodd/programmers-coding-test&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=방문자수(Today/Total)&edge_flat=true)](https://github.com/codeisneverodd) -## 👋 소개 -- 🌱 모든 문제는 JavaScript로 풀이되고 다양한 사람의 풀이가 올라와있어요 -- ✅ 프로그래머스는 정답을 통과시키면 다른 사람들의 풀이를 볼 수 있어요! [익스텐션](https://chrome.google.com/webstore/detail/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%95%EB%8B%B5-%ED%86%B5%EA%B3%BC%EA%B8%B0/pogpgnlafgchgebcnohihjjmdjcffenl?hl=ko)을 이용해보세요! -- 🔎 [검색 사이트](https://programmers-solution-bank.netlify.app/) 혹은 본 README에서 검색을 통해 다양한 풀이도 볼 수 있어요! -- ⭐ **도움이 되셨다면** 오른쪽 상단 ↗ 의 ⭐️ **Star를 클릭**해 이 프로젝트를 응원해주세요! - -## 👻 [크롬익스텐션](https://chrome.google.com/webstore/detail/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%95%EB%8B%B5-%ED%86%B5%EA%B3%BC%EA%B8%B0/pogpgnlafgchgebcnohihjjmdjcffenl?hl=ko) 이 출시되었습니다 🎉🎉 -- 😆 무료 다운로드 👉 [프로그래머스 정답 통과기 - 크롬 웹 스토어](https://chrome.google.com/webstore/detail/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%95%EB%8B%B5-%ED%86%B5%EA%B3%BC%EA%B8%B0/pogpgnlafgchgebcnohihjjmdjcffenl?hl=ko) - -[![extensionIntro](https://user-images.githubusercontent.com/54318460/187886360-dd8f917e-4ffe-4c6f-9b3c-d10a69b5f46e.gif)](https://chrome.google.com/webstore/detail/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%95%EB%8B%B5-%ED%86%B5%EA%B3%BC%EA%B8%B0/pogpgnlafgchgebcnohihjjmdjcffenl?hl=ko) - - -## 📢 공지 -- 🔥 본 레퍼지토리에 본인의 해설을 PR을 통해 기여하면, 코드리뷰를 받아보실 수 있습니다. (기한: 2022/10/31) -- 기여 방법은 README 최하단을 참고해주세요. - -## 🤔 다른 사람의 풀이가 왜 중요한가요? -- 코딩테스트 공부에 왕도는 없으며, 다양한 사람들의 풀이를 보며 많은 문제를 푸는 것이 최상의 방법입니다. -- [크롬익스텐션](https://chrome.google.com/webstore/detail/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%95%EB%8B%B5-%ED%86%B5%EA%B3%BC%EA%B8%B0/pogpgnlafgchgebcnohihjjmdjcffenl?hl=ko) 을 통해 다른 사람들의 풀이를 확인하고 자신의 풀이를 발전시켜보세요! - - -## 🌟 Contributors -[![contributors](https://contrib.rocks/image?repo=codeisneverodd/programmers-coding-test)](https://github.com/codeisneverodd/programmers-coding-test/graphs/contributors) - -## 💡 Solutions - - -### 🌱 Level 0 - -- 풀이 문제 수: 100문제 - -| 번호 | 문제 출처 | 풀이 | -| --- | ------- | --- | -| 1 | [2차원으로 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/120842) | [2차원으로 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/2차원으로-만들기&120842&.js) | -| 2 | [369게임](https://school.programmers.co.kr/learn/courses/30/lessons/120891) | [369게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/369게임&120891&.js) | -| 3 | [7의 개수](https://school.programmers.co.kr/learn/courses/30/lessons/120912) | [7의 개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/7의-개수&120912&.js) | -| 4 | [A로 B 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/120886) | [A로 B 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/A로-B-만들기&120886&.js) | -| 5 | [OX퀴즈](https://school.programmers.co.kr/learn/courses/30/lessons/120907) | [OX퀴즈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/OX퀴즈&120907&.js) | -| 6 | [k의 개수](https://school.programmers.co.kr/learn/courses/30/lessons/120887) | [k의 개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/k의-개수&120887&.js) | -| 7 | [n의 배수 고르기](https://school.programmers.co.kr/learn/courses/30/lessons/120905) | [n의 배수 고르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/n의-배수-고르기&120905&.js) | -| 8 | [가까운 수](https://school.programmers.co.kr/learn/courses/30/lessons/120890) | [가까운 수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/가까운-수&120890&.js) | -| 9 | [가위 바위 보](https://school.programmers.co.kr/learn/courses/30/lessons/120839) | [가위 바위 보.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/가위-바위-보&120839&.js) | -| 10 | [가장 큰 수 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/120899) | [가장 큰 수 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/가장-큰-수-찾기&120899&.js) | -| 11 | [각도기](https://school.programmers.co.kr/learn/courses/30/lessons/120829) | [각도기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/각도기&120829&.js) | -| 12 | [개미 군단](https://school.programmers.co.kr/learn/courses/30/lessons/120837) | [개미 군단.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/개미-군단&120837&.js) | -| 13 | [겹치는 선분의 길이](https://school.programmers.co.kr/learn/courses/30/lessons/120876) | [겹치는 선분의 길이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/겹치는-선분의-길이&120876&.js) | -| 14 | [공 던지기](https://school.programmers.co.kr/learn/courses/30/lessons/120843) | [공 던지기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/공-던지기&120843&.js) | -| 15 | [구슬을 나누는 경우의 수](https://school.programmers.co.kr/learn/courses/30/lessons/120840) | [구슬을 나누는 경우의 수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/구슬을-나누는-경우의-수&120840&.js) | -| 16 | [나머지 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/120810) | [나머지 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/나머지-구하기&120810&.js) | -| 17 | [나이 출력](https://school.programmers.co.kr/learn/courses/30/lessons/120820) | [나이 출력.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/나이-출력&120820&.js) | -| 18 | [다음에 올 숫자](https://school.programmers.co.kr/learn/courses/30/lessons/120924) | [다음에 올 숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/다음에-올-숫자&120924&.js) | -| 19 | [다항식 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/120863) | [다항식 더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/다항식-더하기&120863&.js) | -| 20 | [대문자와 소문자](https://school.programmers.co.kr/learn/courses/30/lessons/120893) | [대문자와 소문자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/대문자와-소문자&120893&.js) | -| 21 | [두 수의 곱](https://school.programmers.co.kr/learn/courses/30/lessons/120804) | [두 수의 곱.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/두-수의-곱&120804&.js) | -| 22 | [두 수의 나눗셈](https://school.programmers.co.kr/learn/courses/30/lessons/120806) | [두 수의 나눗셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/두-수의-나눗셈&120806&.js) | -| 23 | [두 수의 차](https://school.programmers.co.kr/learn/courses/30/lessons/120803) | [두 수의 차.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/두-수의-차&120803&.js) | -| 24 | [두 수의 합](https://school.programmers.co.kr/learn/courses/30/lessons/120802) | [두 수의 합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/두-수의-합&120802&.js) | -| 25 | [등수 매기기](https://school.programmers.co.kr/learn/courses/30/lessons/120882) | [등수 매기기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/등수-매기기&120882&.js) | -| 26 | [로그인 성공?](https://school.programmers.co.kr/learn/courses/30/lessons/120883) | [로그인 성공?.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/로그인-성공?&120883&.js) | -| 27 | [머쓱이보다 키 큰 사람](https://school.programmers.co.kr/learn/courses/30/lessons/120585) | [머쓱이보다 키 큰 사람.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/머쓱이보다-키-큰-사람&120585&.js) | -| 28 | [모스부호 (1)](https://school.programmers.co.kr/learn/courses/30/lessons/120838) | [모스부호 (1).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/모스부호-(1)&120838&.js) | -| 29 | [모음 제거](https://school.programmers.co.kr/learn/courses/30/lessons/120849) | [모음 제거.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/모음-제거&120849&.js) | -| 30 | [몫 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/120805) | [몫 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/몫-구하기&120805&.js) | -| 31 | [문자 반복 출력하기](https://school.programmers.co.kr/learn/courses/30/lessons/120825) | [문자 반복 출력하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/문자-반복-출력하기&120825&.js) | -| 32 | [문자열 계산하기](https://school.programmers.co.kr/learn/courses/30/lessons/120902) | [문자열 계산하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/문자열-계산하기&120902&.js) | -| 33 | [문자열 뒤집기](https://school.programmers.co.kr/learn/courses/30/lessons/120822) | [문자열 뒤집기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/문자열-뒤집기&120822&.js) | -| 34 | [문자열 밀기](https://school.programmers.co.kr/learn/courses/30/lessons/120921) | [문자열 밀기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/문자열-밀기&120921&.js) | -| 35 | [문자열 정렬하기 (1)](https://school.programmers.co.kr/learn/courses/30/lessons/120850) | [문자열 정렬하기 (1).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/문자열-정렬하기-(1)&120850&.js) | -| 36 | [문자열 정렬하기 (2)](https://school.programmers.co.kr/learn/courses/30/lessons/120911) | [문자열 정렬하기 (2).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/문자열-정렬하기-(2)&120911&.js) | -| 37 | [문자열안에 문자열](https://school.programmers.co.kr/learn/courses/30/lessons/120908) | [문자열안에 문자열.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/문자열안에-문자열&120908&.js) | -| 38 | [배열 두 배 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/120809) | [배열 두 배 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/배열-두-배-만들기&120809&.js) | -| 39 | [배열 뒤집기](https://school.programmers.co.kr/learn/courses/30/lessons/120821) | [배열 뒤집기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/배열-뒤집기&120821&.js) | -| 40 | [배열 원소의 길이](https://school.programmers.co.kr/learn/courses/30/lessons/120854) | [배열 원소의 길이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/배열-원소의-길이&120854&.js) | -| 41 | [배열 자르기](https://school.programmers.co.kr/learn/courses/30/lessons/120833) | [배열 자르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/배열-자르기&120833&.js) | -| 42 | [배열 회전시키기](https://school.programmers.co.kr/learn/courses/30/lessons/120844) | [배열 회전시키기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/배열-회전시키기&120844&.js) | -| 43 | [배열의 유사도](https://school.programmers.co.kr/learn/courses/30/lessons/120903) | [배열의 유사도.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/배열의-유사도&120903&.js) | -| 44 | [배열의 평균값](https://school.programmers.co.kr/learn/courses/30/lessons/120817) | [배열의 평균값.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/배열의-평균값&120817&.js) | -| 45 | [분수의 덧셈](https://school.programmers.co.kr/learn/courses/30/lessons/120808) | [분수의 덧셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/분수의-덧셈&120808&.js) | -| 46 | [삼각형의 완성조건 (1)](https://school.programmers.co.kr/learn/courses/30/lessons/120889) | [삼각형의 완성조건 (1).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/삼각형의-완성조건-(1)&120889&.js) | -| 47 | [삼각형의 완성조건 (2)](https://school.programmers.co.kr/learn/courses/30/lessons/120868) | [삼각형의 완성조건 (2).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/삼각형의-완성조건-(2)&120868&.js) | -| 48 | [세균 증식](https://school.programmers.co.kr/learn/courses/30/lessons/120910) | [세균 증식.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/세균-증식&120910&.js) | -| 49 | [소인수분해](https://school.programmers.co.kr/learn/courses/30/lessons/120852) | [소인수분해.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/소인수분해&120852&.js) | -| 50 | [순서쌍의 개수](https://school.programmers.co.kr/learn/courses/30/lessons/120836) | [순서쌍의 개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/순서쌍의-개수&120836&.js) | -| 51 | [숨어있는 숫자의 덧셈 (1)](https://school.programmers.co.kr/learn/courses/30/lessons/120851) | [숨어있는 숫자의 덧셈 (1).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/숨어있는-숫자의-덧셈-(1)&120851&.js) | -| 52 | [숨어있는 숫자의 덧셈 (2)](https://school.programmers.co.kr/learn/courses/30/lessons/120864) | [숨어있는 숫자의 덧셈 (2).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/숨어있는-숫자의-덧셈-(2)&120864&.js) | -| 53 | [숫자 비교하기](https://school.programmers.co.kr/learn/courses/30/lessons/120807) | [숫자 비교하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/숫자-비교하기&120807&.js) | -| 54 | [숫자 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/120904) | [숫자 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/숫자-찾기&120904&.js) | -| 55 | [아이스 아메리카노](https://school.programmers.co.kr/learn/courses/30/lessons/120819) | [아이스 아메리카노.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/아이스-아메리카노&120819&.js) | -| 56 | [안전지대](https://school.programmers.co.kr/learn/courses/30/lessons/120866) | [안전지대.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/안전지대&120866&.js) | -| 57 | [암호 해독](https://school.programmers.co.kr/learn/courses/30/lessons/120892) | [암호 해독.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/암호-해독&120892&.js) | -| 58 | [약수 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/120897) | [약수 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/약수-구하기&120897&.js) | -| 59 | [양꼬치](https://school.programmers.co.kr/learn/courses/30/lessons/120830) | [양꼬치.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/양꼬치&120830&.js) | -| 60 | [연속된 수의 합](https://school.programmers.co.kr/learn/courses/30/lessons/120923) | [연속된 수의 합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/연속된-수의-합&120923&.js) | -| 61 | [영어가 싫어요](https://school.programmers.co.kr/learn/courses/30/lessons/120894) | [영어가 싫어요.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/영어가-싫어요&120894&.js) | -| 62 | [옷가게 할인 받기](https://school.programmers.co.kr/learn/courses/30/lessons/120818) | [옷가게 할인 받기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/옷가게-할인-받기&120818&.js) | -| 63 | [옹알이](https://school.programmers.co.kr/learn/courses/30/lessons/120956) | [옹알이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/옹알이&120956&.js) | -| 64 | [외계어 사전](https://school.programmers.co.kr/learn/courses/30/lessons/120869) | [외계어 사전.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/외계어-사전&120869&.js) | -| 65 | [외계행성의 나이](https://school.programmers.co.kr/learn/courses/30/lessons/120834) | [외계행성의 나이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/외계행성의-나이&120834&.js) | -| 66 | [유한소수 판별하기](https://school.programmers.co.kr/learn/courses/30/lessons/120878) | [유한소수 판별하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/유한소수-판별하기&120878&.js) | -| 67 | [이진수 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/120885) | [이진수 더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/이진수-더하기&120885&.js) | -| 68 | [인덱스 바꾸기](https://school.programmers.co.kr/learn/courses/30/lessons/120895) | [인덱스 바꾸기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/인덱스-바꾸기&120895&.js) | -| 69 | [자릿수 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/120906) | [자릿수 더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/자릿수-더하기&120906&.js) | -| 70 | [잘라서 배열로 저장하기](https://school.programmers.co.kr/learn/courses/30/lessons/120913) | [잘라서 배열로 저장하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/잘라서-배열로-저장하기&120913&.js) | -| 71 | [저주의 숫자 3](https://school.programmers.co.kr/learn/courses/30/lessons/120871) | [저주의 숫자 3.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/저주의-숫자-3&120871&.js) | -| 72 | [점의 위치 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/120841) | [점의 위치 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/점의-위치-구하기&120841&.js) | -| 73 | [제곱수 판별하기](https://school.programmers.co.kr/learn/courses/30/lessons/120909) | [제곱수 판별하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/제곱수-판별하기&120909&.js) | -| 74 | [종이 자르기](https://school.programmers.co.kr/learn/courses/30/lessons/120922) | [종이 자르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/종이-자르기&120922&.js) | -| 75 | [주사위의 개수](https://school.programmers.co.kr/learn/courses/30/lessons/120845) | [주사위의 개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/주사위의-개수&120845&.js) | -| 76 | [중복된 문자 제거](https://school.programmers.co.kr/learn/courses/30/lessons/120888) | [중복된 문자 제거.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/중복된-문자-제거&120888&.js) | -| 77 | [중복된 숫자 개수](https://school.programmers.co.kr/learn/courses/30/lessons/120583) | [중복된 숫자 개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/중복된-숫자-개수&120583&.js) | -| 78 | [중앙값 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/120811) | [중앙값 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/중앙값-구하기&120811&.js) | -| 79 | [직각삼각형 출력하기](https://school.programmers.co.kr/learn/courses/30/lessons/120823) | [직각삼각형 출력하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/직각삼각형-출력하기&120823&.js) | -| 80 | [직사각형 넓이 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/120860) | [직사각형 넓이 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/직사각형-넓이-구하기&120860&.js) | -| 81 | [진료순서 정하기](https://school.programmers.co.kr/learn/courses/30/lessons/120835) | [진료순서 정하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/진료순서-정하기&120835&.js) | -| 82 | [짝수 홀수 개수](https://school.programmers.co.kr/learn/courses/30/lessons/120824) | [짝수 홀수 개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/짝수-홀수-개수&120824&.js) | -| 83 | [짝수는 싫어요](https://school.programmers.co.kr/learn/courses/30/lessons/120813) | [짝수는 싫어요.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/짝수는-싫어요&120813&.js) | -| 84 | [짝수의 합](https://school.programmers.co.kr/learn/courses/30/lessons/120831) | [짝수의 합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/짝수의-합&120831&.js) | -| 85 | [최댓값 만들기(1)](https://school.programmers.co.kr/learn/courses/30/lessons/120847) | [최댓값 만들기(1).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/최댓값-만들기(1)&120847&.js) | -| 86 | [최댓값 만들기 (2)](https://school.programmers.co.kr/learn/courses/30/lessons/120862) | [최댓값 만들기 (2).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/최댓값-만들기-(2)&120862&.js) | -| 87 | [최빈값 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/120812) | [최빈값 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/최빈값-구하기&120812&.js) | -| 88 | [치킨 쿠폰](https://school.programmers.co.kr/learn/courses/30/lessons/120884) | [치킨 쿠폰.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/치킨-쿠폰&120884&.js) | -| 89 | [캐릭터의 좌표](https://school.programmers.co.kr/learn/courses/30/lessons/120861) | [캐릭터의 좌표.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/캐릭터의-좌표&120861&.js) | -| 90 | [컨트롤 제트](https://school.programmers.co.kr/learn/courses/30/lessons/120853) | [컨트롤 제트.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/컨트롤-제트&120853&.js) | -| 91 | [특이한 정렬](https://school.programmers.co.kr/learn/courses/30/lessons/120880) | [특이한 정렬.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/특이한-정렬&120880&.js) | -| 92 | [특정 문자 제거하기](https://school.programmers.co.kr/learn/courses/30/lessons/120826) | [특정 문자 제거하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/특정-문자-제거하기&120826&.js) | -| 93 | [팩토리얼](https://school.programmers.co.kr/learn/courses/30/lessons/120848) | [팩토리얼.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/팩토리얼&120848&.js) | -| 94 | [편지](https://school.programmers.co.kr/learn/courses/30/lessons/120898) | [편지.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/편지&120898&.js) | -| 95 | [평행](https://school.programmers.co.kr/learn/courses/30/lessons/120875) | [평행.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/평행&120875&.js) | -| 96 | [피자 나눠 먹기 (1)](https://school.programmers.co.kr/learn/courses/30/lessons/120814) | [피자 나눠 먹기 (1).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/피자-나눠-먹기-(1)&120814&.js) | -| 97 | [피자 나눠 먹기 (2)](https://school.programmers.co.kr/learn/courses/30/lessons/120815) | [피자 나눠 먹기 (2).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/피자-나눠-먹기-(2)&120815&.js) | -| 98 | [피자 나눠 먹기 (3)](https://school.programmers.co.kr/learn/courses/30/lessons/120816) | [피자 나눠 먹기 (3).js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/피자-나눠-먹기-(3)&120816&.js) | -| 99 | [한 번만 등장한 문자](https://school.programmers.co.kr/learn/courses/30/lessons/120896) | [한 번만 등장한 문자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/한-번만-등장한-문자&120896&.js) | -| 100 | [합성수 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/120846) | [합성수 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-0/합성수-찾기&120846&.js) | - - -### 🌱 Level 1 - -- 풀이 문제 수: 57문제 - -| 번호 | 문제 출처 | 풀이 | -| --- | ------- | --- | -| 1 | [2016년](https://school.programmers.co.kr/learn/courses/30/lessons/12901) | [2016년.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/2016년&12901&.js) | -| 2 | [3진법 뒤집기](https://school.programmers.co.kr/learn/courses/30/lessons/68935) | [3진법 뒤집기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/3진법-뒤집기&68935&.js) | -| 3 | [K번째수](https://school.programmers.co.kr/learn/courses/30/lessons/42748) | [K번째수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/K번째수&42748&.js) | -| 4 | [[1차] 다트 게임](https://school.programmers.co.kr/learn/courses/30/lessons/17682) | [[1차] 다트 게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/[1차]-다트-게임&17682&.js) | -| 5 | [[1차] 비밀지도](https://school.programmers.co.kr/learn/courses/30/lessons/17681) | [[1차] 비밀지도.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/[1차]-비밀지도&17681&.js) | -| 6 | [x만큼 간격이 있는 n개의 숫자](https://school.programmers.co.kr/learn/courses/30/lessons/12954) | [x만큼 간격이 있는 n개의 숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/x만큼-간격이-있는-n개의-숫자&12954&.js) | -| 7 | [가운데 글자 가져오기](https://school.programmers.co.kr/learn/courses/30/lessons/12903) | [가운데 글자 가져오기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/가운데-글자-가져오기&12903&.js) | -| 8 | [같은 숫자는 싫어](https://school.programmers.co.kr/learn/courses/30/lessons/12906) | [같은 숫자는 싫어.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/같은-숫자는-싫어&12906&.js) | -| 9 | [나누어 떨어지는 숫자 배열](https://school.programmers.co.kr/learn/courses/30/lessons/12910) | [나누어 떨어지는 숫자 배열.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/나누어-떨어지는-숫자-배열&12910&.js) | -| 10 | [나머지가 1이 되는 수 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/87389) | [나머지가 1이 되는 수 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/나머지가-1이-되는-수-찾기&87389&.js) | -| 11 | [내적](https://school.programmers.co.kr/learn/courses/30/lessons/70128) | [내적.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/내적&70128&.js) | -| 12 | [두 개 뽑아서 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/68644) | [두 개 뽑아서 더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/두-개-뽑아서-더하기&68644&.js) | -| 13 | [두 정수 사이의 합](https://school.programmers.co.kr/learn/courses/30/lessons/12912) | [두 정수 사이의 합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/두-정수-사이의-합&12912&.js) | -| 14 | [로또의 최고 순위와 최저 순위](https://school.programmers.co.kr/learn/courses/30/lessons/77484) | [로또의 최고 순위와 최저 순위.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/로또의-최고-순위와-최저-순위&77484&.js) | -| 15 | [모의고사](https://school.programmers.co.kr/learn/courses/30/lessons/42840) | [모의고사.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/모의고사&42840&.js) | -| 16 | [문자열 내 p와 y의 개수](https://school.programmers.co.kr/learn/courses/30/lessons/12916) | [문자열 내 p와 y의 개수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내-p와-y의-개수&12916&.js) | -| 17 | [문자열 내 마음대로 정렬하기](https://school.programmers.co.kr/learn/courses/30/lessons/12915) | [문자열 내 마음대로 정렬하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내-마음대로-정렬하기&12915&.js) | -| 18 | [문자열 내림차순으로 배치하기](https://school.programmers.co.kr/learn/courses/30/lessons/12917) | [문자열 내림차순으로 배치하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-내림차순으로-배치하기&12917&.js) | -| 19 | [문자열 다루기 기본](https://school.programmers.co.kr/learn/courses/30/lessons/12918) | [문자열 다루기 기본.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열-다루기-기본&12918&.js) | -| 20 | [문자열을 정수로 바꾸기](https://school.programmers.co.kr/learn/courses/30/lessons/12925) | [문자열을 정수로 바꾸기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/문자열을-정수로-바꾸기&12925&.js) | -| 21 | [부족한 금액 계산하기](https://school.programmers.co.kr/learn/courses/30/lessons/82612) | [부족한 금액 계산하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/부족한-금액-계산하기&82612&.js) | -| 22 | [서울에서 김서방 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/12919) | [서울에서 김서방 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/서울에서-김서방-찾기&12919&.js) | -| 23 | [성격 유형 검사하기](https://school.programmers.co.kr/learn/courses/30/lessons/118666) | [성격 유형 검사하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/성격-유형-검사하기&118666&.js) | -| 24 | [소수 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/12977) | [소수 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/소수-만들기&12977&.js) | -| 25 | [소수 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/42839) | [소수 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/소수-찾기&42839&.js) | -| 26 | [수박수박수박수박수박수?](https://school.programmers.co.kr/learn/courses/30/lessons/12922) | [수박수박수박수박수박수?.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/수박수박수박수박수박수?&12922&.js) | -| 27 | [숫자 문자열과 영단어](https://school.programmers.co.kr/learn/courses/30/lessons/81301) | [숫자 문자열과 영단어.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/숫자-문자열과-영단어&81301&.js) | -| 28 | [숫자 짝꿍](https://school.programmers.co.kr/learn/courses/30/lessons/131128) | [숫자 짝꿍.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/숫자-짝꿍&131128&.js) | -| 29 | [시저 암호](https://school.programmers.co.kr/learn/courses/30/lessons/12926) | [시저 암호.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/시저-암호&12926&.js) | -| 30 | [신고 결과 받기](https://school.programmers.co.kr/learn/courses/30/lessons/92334) | [신고 결과 받기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/신고-결과-받기&92334&.js) | -| 31 | [신규 아이디 추천](https://school.programmers.co.kr/learn/courses/30/lessons/72410) | [신규 아이디 추천.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/신규-아이디-추천&72410&.js) | -| 32 | [실패율](https://school.programmers.co.kr/learn/courses/30/lessons/42889) | [실패율.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/실패율&42889&.js) | -| 33 | [약수의 개수와 덧셈](https://school.programmers.co.kr/learn/courses/30/lessons/77884) | [약수의 개수와 덧셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/약수의-개수와-덧셈&77884&.js) | -| 34 | [약수의 합](https://school.programmers.co.kr/learn/courses/30/lessons/12928) | [약수의 합.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/약수의-합&12928&.js) | -| 35 | [없는 숫자 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/86051) | [없는 숫자 더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/없는-숫자-더하기&86051&.js) | -| 36 | [예산](https://school.programmers.co.kr/learn/courses/30/lessons/12982) | [예산.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/예산&12982&.js) | -| 37 | [완주하지 못한 선수](https://school.programmers.co.kr/learn/courses/30/lessons/42576) | [완주하지 못한 선수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/완주하지-못한-선수&42576&.js) | -| 38 | [음양 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/76501) | [음양 더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/음양-더하기&76501&.js) | -| 39 | [이상한 문자 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/12930) | [이상한 문자 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/이상한-문자-만들기&12930&.js) | -| 40 | [자릿수 더하기](https://school.programmers.co.kr/learn/courses/30/lessons/12931) | [자릿수 더하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/자릿수-더하기&12931&.js) | -| 41 | [자연수 뒤집어 배열로 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/12932) | [자연수 뒤집어 배열로 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/자연수-뒤집어-배열로-만들기&12932&.js) | -| 42 | [정수 내림차순으로 배치하기](https://school.programmers.co.kr/learn/courses/30/lessons/12933) | [정수 내림차순으로 배치하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/정수-내림차순으로-배치하기&12933&.js) | -| 43 | [정수 제곱근 판별](https://school.programmers.co.kr/learn/courses/30/lessons/12934) | [정수 제곱근 판별.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/정수-제곱근-판별&12934&.js) | -| 44 | [제일 작은 수 제거하기](https://school.programmers.co.kr/learn/courses/30/lessons/12935) | [제일 작은 수 제거하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/제일-작은-수-제거하기&12935&.js) | -| 45 | [직사각형 별찍기](https://school.programmers.co.kr/learn/courses/30/lessons/12969) | [직사각형 별찍기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/직사각형-별찍기&12969&.js) | -| 46 | [짝수와 홀수](https://school.programmers.co.kr/learn/courses/30/lessons/12937) | [짝수와 홀수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/짝수와-홀수&12937&.js) | -| 47 | [체육복](https://school.programmers.co.kr/learn/courses/30/lessons/42862) | [체육복.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/체육복&42862&.js) | -| 48 | [최대공약수와 최소공배수](https://school.programmers.co.kr/learn/courses/30/lessons/12940) | [최대공약수와 최소공배수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/최대공약수와-최소공배수&12940&.js) | -| 49 | [최소직사각형](https://school.programmers.co.kr/learn/courses/30/lessons/86491) | [최소직사각형.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/최소직사각형&86491&.js) | -| 50 | [콜라츠 추측](https://school.programmers.co.kr/learn/courses/30/lessons/12943) | [콜라츠 추측.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/콜라츠-추측&12943&.js) | -| 51 | [크레인 인형뽑기 게임](https://school.programmers.co.kr/learn/courses/30/lessons/64061) | [크레인 인형뽑기 게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/크레인-인형뽑기-게임&64061&.js) | -| 52 | [키패드 누르기](https://school.programmers.co.kr/learn/courses/30/lessons/67256) | [키패드 누르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/키패드-누르기&67256&.js) | -| 53 | [평균 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/12944) | [평균 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/평균-구하기&12944&.js) | -| 54 | [폰켓몬](https://school.programmers.co.kr/learn/courses/30/lessons/1845) | [폰켓몬.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/폰켓몬&1845&.js) | -| 55 | [하샤드 수](https://school.programmers.co.kr/learn/courses/30/lessons/12947) | [하샤드 수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/하샤드-수&12947&.js) | -| 56 | [핸드폰 번호 가리기](https://school.programmers.co.kr/learn/courses/30/lessons/12948) | [핸드폰 번호 가리기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/핸드폰-번호-가리기&12948&.js) | -| 57 | [행렬의 덧셈](https://school.programmers.co.kr/learn/courses/30/lessons/12950) | [행렬의 덧셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-1/행렬의-덧셈&12950&.js) | - - -### 🌱 Level 2 - -- 풀이 문제 수: 72문제 - -| 번호 | 문제 출처 | 풀이 | -| --- | ------- | --- | -| 1 | [124 나라의 숫자](https://school.programmers.co.kr/learn/courses/30/lessons/12899) | [124 나라의 숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/124-나라의-숫자&12899&.js) | -| 2 | [2 x n 타일링](https://school.programmers.co.kr/learn/courses/30/lessons/12900) | [2 x n 타일링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/2-x-n-타일링&12900&.js) | -| 3 | [2개 이하로 다른 비트](https://school.programmers.co.kr/learn/courses/30/lessons/77885) | [2개 이하로 다른 비트.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/2개-이하로-다른-비트&77885&.js) | -| 4 | [3 x n 타일링](https://school.programmers.co.kr/learn/courses/30/lessons/12902) | [3 x n 타일링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/3-x-n-타일링&12902&.js) | -| 5 | [H Index](https://school.programmers.co.kr/learn/courses/30/lessons/42747) | [H Index.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/H-Index&42747&.js) | -| 6 | [JadenCase 문자열 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/12951) | [JadenCase 문자열 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/JadenCase-문자열-만들기&12951&.js) | -| 7 | [N Queen](https://school.programmers.co.kr/learn/courses/30/lessons/12952) | [N Queen.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/N-Queen&12952&.js) | -| 8 | [N개의 최소공배수](https://school.programmers.co.kr/learn/courses/30/lessons/12953) | [N개의 최소공배수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/N개의-최소공배수&12953&.js) | -| 9 | [[1차] 뉴스 클러스터링](https://school.programmers.co.kr/learn/courses/30/lessons/17677) | [[1차] 뉴스 클러스터링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[1차]-뉴스-클러스터링&17677&.js) | -| 10 | [[1차] 캐시](https://school.programmers.co.kr/learn/courses/30/lessons/17680) | [[1차] 캐시.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[1차]-캐시&17680&.js) | -| 11 | [[1차] 프렌즈4블록](https://school.programmers.co.kr/learn/courses/30/lessons/17679) | [[1차] 프렌즈4블록.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[1차]-프렌즈4블록&17679&.js) | -| 12 | [[3차] n진수 게임](https://school.programmers.co.kr/learn/courses/30/lessons/17687) | [[3차] n진수 게임.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-n진수-게임&17687&.js) | -| 13 | [[3차] 방금그곡](https://school.programmers.co.kr/learn/courses/30/lessons/17683) | [[3차] 방금그곡.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-방금그곡&17683&.js) | -| 14 | [[3차] 압축](https://school.programmers.co.kr/learn/courses/30/lessons/17684) | [[3차] 압축.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-압축&17684&.js) | -| 15 | [[3차] 파일명 정렬](https://school.programmers.co.kr/learn/courses/30/lessons/17686) | [[3차] 파일명 정렬.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/[3차]-파일명-정렬&17686&.js) | -| 16 | [k진수에서 소수 개수 구하기](https://school.programmers.co.kr/learn/courses/30/lessons/92335) | [k진수에서 소수 개수 구하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/k진수에서-소수-개수-구하기&92335&.js) | -| 17 | [n^2 배열 자르기](https://school.programmers.co.kr/learn/courses/30/lessons/87390) | [n^2 배열 자르기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/n^2-배열-자르기&87390&.js) | -| 18 | [가장 큰 수](https://school.programmers.co.kr/learn/courses/30/lessons/42746) | [가장 큰 수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/가장-큰-수&42746&.js) | -| 19 | [가장 큰 정사각형 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/12905) | [가장 큰 정사각형 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/가장-큰-정사각형-찾기&12905&.js) | -| 20 | [거리두기 확인하기](https://school.programmers.co.kr/learn/courses/30/lessons/81302) | [거리두기 확인하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/거리두기-확인하기&81302&.js) | -| 21 | [게임 맵 최단거리](https://school.programmers.co.kr/learn/courses/30/lessons/1844) | [게임 맵 최단거리.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/게임-맵-최단거리&1844&.js) | -| 22 | [괄호 변환](https://school.programmers.co.kr/learn/courses/30/lessons/60058) | [괄호 변환.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/괄호-변환&60058&.js) | -| 23 | [괄호 회전하기](https://school.programmers.co.kr/learn/courses/30/lessons/76502) | [괄호 회전하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/괄호-회전하기&76502&.js) | -| 24 | [교점에 별 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/87377) | [교점에 별 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/교점에-별-만들기&87377&.js) | -| 25 | [구명보트](https://school.programmers.co.kr/learn/courses/30/lessons/42885) | [구명보트.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/구명보트&42885&.js) | -| 26 | [기능개발](https://school.programmers.co.kr/learn/courses/30/lessons/42586) | [기능개발.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/기능개발&42586&.js) | -| 27 | [다리를 지나는 트럭](https://school.programmers.co.kr/learn/courses/30/lessons/42583) | [다리를 지나는 트럭.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/다리를-지나는-트럭&42583&.js) | -| 28 | [다음 큰 숫자](https://school.programmers.co.kr/learn/courses/30/lessons/12911) | [다음 큰 숫자.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/다음-큰-숫자&12911&.js) | -| 29 | [두 큐 합 같게 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/118667) | [두 큐 합 같게 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/두-큐-합-같게-만들기&118667&.js) | -| 30 | [땅따먹기](https://school.programmers.co.kr/learn/courses/30/lessons/12913) | [땅따먹기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/땅따먹기&12913&.js) | -| 31 | [멀리 뛰기](https://school.programmers.co.kr/learn/courses/30/lessons/12914) | [멀리 뛰기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/멀리-뛰기&12914&.js) | -| 32 | [멀쩡한 사각형](https://school.programmers.co.kr/learn/courses/30/lessons/62048) | [멀쩡한 사각형.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/멀쩡한-사각형&62048&.js) | -| 33 | [메뉴 리뉴얼](https://school.programmers.co.kr/learn/courses/30/lessons/72411) | [메뉴 리뉴얼.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/메뉴-리뉴얼&72411&.js) | -| 34 | [모음사전](https://school.programmers.co.kr/learn/courses/30/lessons/84512) | [모음사전.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/모음사전&84512&.js) | -| 35 | [문자열 압축](https://school.programmers.co.kr/learn/courses/30/lessons/60057) | [문자열 압축.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/문자열-압축&60057&.js) | -| 36 | [방문 길이](https://school.programmers.co.kr/learn/courses/30/lessons/49994) | [방문 길이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/방문-길이&49994&.js) | -| 37 | [배달](https://school.programmers.co.kr/learn/courses/30/lessons/12978) | [배달.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/배달&12978&.js) | -| 38 | [빛의 경로 사이클](https://school.programmers.co.kr/learn/courses/30/lessons/86052) | [빛의 경로 사이클.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/빛의-경로-사이클&86052&.js) | -| 39 | [삼각 달팽이](https://school.programmers.co.kr/learn/courses/30/lessons/68645) | [삼각 달팽이.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/삼각-달팽이&68645&.js) | -| 40 | [소수 찾기](https://school.programmers.co.kr/learn/courses/30/lessons/42839) | [소수 찾기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/소수-찾기&42839&.js) | -| 41 | [수식 최대화](https://school.programmers.co.kr/learn/courses/30/lessons/67257) | [수식 최대화.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/수식-최대화&67257&.js) | -| 42 | [순위 검색](https://school.programmers.co.kr/learn/courses/30/lessons/72412) | [순위 검색.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/순위-검색&72412&.js) | -| 43 | [숫자 블록](https://school.programmers.co.kr/learn/courses/30/lessons/12923) | [숫자 블록.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/숫자-블록&12923&.js) | -| 44 | [숫자의 표현](https://school.programmers.co.kr/learn/courses/30/lessons/12924) | [숫자의 표현.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/숫자의-표현&12924&.js) | -| 45 | [스킬트리](https://school.programmers.co.kr/learn/courses/30/lessons/49993) | [스킬트리.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/스킬트리&49993&.js) | -| 46 | [양궁대회](https://school.programmers.co.kr/learn/courses/30/lessons/92342) | [양궁대회.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/양궁대회&92342&.js) | -| 47 | [영어 끝말잇기](https://school.programmers.co.kr/learn/courses/30/lessons/12981) | [영어 끝말잇기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/영어-끝말잇기&12981&.js) | -| 48 | [예상 대진표](https://school.programmers.co.kr/learn/courses/30/lessons/12985) | [예상 대진표.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/예상-대진표&12985&.js) | -| 49 | [오픈채팅방](https://school.programmers.co.kr/learn/courses/30/lessons/42888) | [오픈채팅방.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/오픈채팅방&42888&.js) | -| 50 | [올바른 괄호](https://school.programmers.co.kr/learn/courses/30/lessons/12909) | [올바른 괄호.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/올바른-괄호&12909&.js) | -| 51 | [위장](https://school.programmers.co.kr/learn/courses/30/lessons/42578) | [위장.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/위장&42578&.js) | -| 52 | [이진 변환 반복하기](https://school.programmers.co.kr/learn/courses/30/lessons/70129) | [이진 변환 반복하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/이진-변환-반복하기&70129&.js) | -| 53 | [전력망을 둘로 나누기](https://school.programmers.co.kr/learn/courses/30/lessons/86971) | [전력망을 둘로 나누기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/전력망을-둘로-나누기&86971&.js) | -| 54 | [점프와 순간 이동](https://school.programmers.co.kr/learn/courses/30/lessons/12980) | [점프와 순간 이동.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/점프와-순간-이동&12980&.js) | -| 55 | [조이스틱](https://school.programmers.co.kr/learn/courses/30/lessons/42860) | [조이스틱.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/조이스틱&42860&.js) | -| 56 | [주차 요금 계산](https://school.programmers.co.kr/learn/courses/30/lessons/92341) | [주차 요금 계산.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/주차-요금-계산&92341&.js) | -| 57 | [줄 서는 방법](https://school.programmers.co.kr/learn/courses/30/lessons/12936) | [줄 서는 방법.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/줄-서는-방법&12936&.js) | -| 58 | [짝지어 제거하기](https://school.programmers.co.kr/learn/courses/30/lessons/12973) | [짝지어 제거하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/짝지어-제거하기&12973&.js) | -| 59 | [최댓값과 최솟값](https://school.programmers.co.kr/learn/courses/30/lessons/12939) | [최댓값과 최솟값.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/최댓값과-최솟값&12939&.js) | -| 60 | [최솟값 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/12941) | [최솟값 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/최솟값-만들기&12941&.js) | -| 61 | [카펫](https://school.programmers.co.kr/learn/courses/30/lessons/42842) | [카펫.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/카펫&42842&.js) | -| 62 | [쿼드압축 후 개수 세기](https://school.programmers.co.kr/learn/courses/30/lessons/68936) | [쿼드압축 후 개수 세기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/쿼드압축-후-개수-세기&68936&.js) | -| 63 | [큰 수 만들기](https://school.programmers.co.kr/learn/courses/30/lessons/42883) | [큰 수 만들기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/큰-수-만들기&42883&.js) | -| 64 | [타겟 넘버](https://school.programmers.co.kr/learn/courses/30/lessons/43165) | [타겟 넘버.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/타겟-넘버&43165&.js) | -| 65 | [튜플](https://school.programmers.co.kr/learn/courses/30/lessons/64065) | [튜플.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/튜플&64065&.js) | -| 66 | [프린터](https://school.programmers.co.kr/learn/courses/30/lessons/42587) | [프린터.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/프린터&42587&.js) | -| 67 | [피로도](https://school.programmers.co.kr/learn/courses/30/lessons/87946) | [피로도.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/피로도&87946&.js) | -| 68 | [피보나치 수](https://school.programmers.co.kr/learn/courses/30/lessons/12945) | [피보나치 수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/피보나치-수&12945&.js) | -| 69 | [하노이의 탑](https://school.programmers.co.kr/learn/courses/30/lessons/12946) | [하노이의 탑.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/하노이의-탑&12946&.js) | -| 70 | [행렬 테두리 회전하기](https://school.programmers.co.kr/learn/courses/30/lessons/77485) | [행렬 테두리 회전하기.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/행렬-테두리-회전하기&77485&.js) | -| 71 | [행렬의 곱셈](https://school.programmers.co.kr/learn/courses/30/lessons/12949) | [행렬의 곱셈.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/행렬의-곱셈&12949&.js) | -| 72 | [후보키](https://school.programmers.co.kr/learn/courses/30/lessons/42890) | [후보키.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-2/후보키&42890&.js) | - - -### 🌱 Level 3 - -- 풀이 문제 수: 9문제 - -| 번호 | 문제 출처 | 풀이 | -| --- | ------- | --- | -| 1 | [2 x n 타일링](https://school.programmers.co.kr/learn/courses/30/lessons/12900) | [2 x n 타일링.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/2-x-n-타일링&12900&.js) | -| 2 | [N Queen](https://school.programmers.co.kr/learn/courses/30/lessons/12952) | [N Queen.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/N-Queen&12952&.js) | -| 3 | [가장 먼 노드](https://school.programmers.co.kr/learn/courses/30/lessons/49189) | [가장 먼 노드.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/가장-먼-노드&49189&.js) | -| 4 | [네트워크](https://school.programmers.co.kr/learn/courses/30/lessons/43162) | [네트워크.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/네트워크&43162&.js) | -| 5 | [단속카메라](https://school.programmers.co.kr/learn/courses/30/lessons/42884) | [단속카메라.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/단속카메라&42884&.js) | -| 6 | [베스트앨범](https://school.programmers.co.kr/learn/courses/30/lessons/42579) | [베스트앨범.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/베스트앨범&42579&.js) | -| 7 | [여행경로](https://school.programmers.co.kr/learn/courses/30/lessons/43164) | [여행경로.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/여행경로&43164&.js) | -| 8 | [이중우선순위큐](https://school.programmers.co.kr/learn/courses/30/lessons/42628) | [이중우선순위큐.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/이중우선순위큐&42628&.js) | -| 9 | [입국심사](https://school.programmers.co.kr/learn/courses/30/lessons/43238) | [입국심사.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-3/입국심사&43238&.js) | - - -### 🌱 Level 4 - -- 풀이 문제 수: 4문제 - -| 번호 | 문제 출처 | 풀이 | -| --- | ------- | --- | -| 1 | [가사 검색.js](https://school.programmers.co.kr/learn/courses/30/lessons/undefined) | [가사 검색.js.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-4/가사-검색.js) | -| 2 | [단어 퍼즐](https://school.programmers.co.kr/learn/courses/30/lessons/12983) | [단어 퍼즐.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-4/단어-퍼즐&12983&.js) | -| 3 | [무지의 먹방 라이브.js](https://school.programmers.co.kr/learn/courses/30/lessons/undefined) | [무지의 먹방 라이브.js.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-4/무지의-먹방-라이브.js) | -| 4 | [올바른 괄호의 갯수](https://school.programmers.co.kr/learn/courses/30/lessons/12929) | [올바른 괄호의 갯수.js](https://github.com/codeisneverodd/programmers-coding-test/blob/main/level-4/올바른-괄호의-갯수&12929&.js) | - - - - -## 🙏🏻 아직 풀리지 않은 문제의 해답을 추가해 주세요! -### 커밋 컨벤션 - -| 접두어 | 작업 내용 | -| -------- | ----------------------------------- | -| feat | 풀이 추가 등 코드 수정 | -| fix | 모든 종류의 오류 수정 | -| docs | 문서 수정(코드 수정 없음) | -| etc | 위의 경우들에 해당 하지 경우 | - -### 🌱 기여 방법 - -1. Fork 한 후 본인의 해설을 추가합니다. -2. 본인의 저장소에서 이곳으로 PR을 한다. - -### 🔥 필수 확인 사항 -1. 파일 이름은 공백이 없어야하며, 공백은 - 로 채웁니다. 문제풀이 창에서 문제 이름을 복사하여 사용하는 것을 권장합니다. - -- 예시) 가장 먼 노드 => 가장-먼-노드.js // [1차] 뉴스 클러스터링 => [1차]-뉴스-클러스터링 - -2. 새로운 파일을 추가할 시, 00-해답-예시.js 파일을 복제해서 사용할 것을 권장합니다. - -3. 기존 파일에 풀이를 추가할 시, 다른 사람과의 주석 컨벤션을 맞춥니다. - -## 👉 저작권 - -해당 Repository의 해답을 자신의 저작물에 추가할 수 있지만 **반드시** 본 Repository의 -주소 `https://github.com/codeisneverodd/programmers-coding-test` -를 명시하여야합니다. \ No newline at end of file +## Next.js - Chakra UI Template diff --git a/build/db/db.json b/build/db/db.json deleted file mode 100644 index cbb6f26..0000000 --- a/build/db/db.json +++ /dev/null @@ -1,2909 +0,0 @@ -{ - "probs": [ - { "id": "118666", "title": "성격 유형 검사하기", "level": 1 }, - { "id": "118667", "title": "두 큐 합 같게 만들기", "level": 2 }, - { "id": "120583", "title": "중복된 숫자 개수", "level": 0 }, - { "id": "120585", "title": "머쓱이보다 키 큰 사람", "level": 0 }, - { "id": "120802", "title": "두 수의 합", "level": 0 }, - { "id": "120803", "title": "두 수의 차", "level": 0 }, - { "id": "120804", "title": "두 수의 곱", "level": 0 }, - { "id": "120805", "title": "몫 구하기", "level": 0 }, - { "id": "120806", "title": "두 수의 나눗셈", "level": 0 }, - { "id": "120807", "title": "숫자 비교하기", "level": 0 }, - { "id": "120808", "title": "분수의 덧셈", "level": 0 }, - { "id": "120809", "title": "배열 두 배 만들기", "level": 0 }, - { "id": "120810", "title": "나머지 구하기", "level": 0 }, - { "id": "120811", "title": "중앙값 구하기", "level": 0 }, - { "id": "120812", "title": "최빈값 구하기", "level": 0 }, - { "id": "120813", "title": "짝수는 싫어요", "level": 0 }, - { "id": "120814", "title": "피자 나눠 먹기 (1)", "level": 0 }, - { "id": "120815", "title": "피자 나눠 먹기 (2)", "level": 0 }, - { "id": "120816", "title": "피자 나눠 먹기 (3)", "level": 0 }, - { "id": "120817", "title": "배열의 평균값", "level": 0 }, - { "id": "120818", "title": "옷가게 할인 받기", "level": 0 }, - { "id": "120819", "title": "아이스 아메리카노", "level": 0 }, - { "id": "120820", "title": "나이 출력", "level": 0 }, - { "id": "120821", "title": "배열 뒤집기", "level": 0 }, - { "id": "120822", "title": "문자열 뒤집기", "level": 0 }, - { "id": "120823", "title": "직각삼각형 출력하기", "level": 0 }, - { "id": "120824", "title": "짝수 홀수 개수", "level": 0 }, - { "id": "120825", "title": "문자 반복 출력하기", "level": 0 }, - { "id": "120826", "title": "특정 문자 제거하기", "level": 0 }, - { "id": "120829", "title": "각도기", "level": 0 }, - { "id": "120830", "title": "양꼬치", "level": 0 }, - { "id": "120831", "title": "짝수의 합", "level": 0 }, - { "id": "120833", "title": "배열 자르기", "level": 0 }, - { "id": "120834", "title": "외계행성의 나이", "level": 0 }, - { "id": "120835", "title": "진료순서 정하기", "level": 0 }, - { "id": "120836", "title": "순서쌍의 개수", "level": 0 }, - { "id": "120837", "title": "개미 군단", "level": 0 }, - { "id": "120838", "title": "모스부호 (1)", "level": 0 }, - { "id": "120839", "title": "가위 바위 보", "level": 0 }, - { "id": "120840", "title": "구슬을 나누는 경우의 수", "level": 0 }, - { "id": "120841", "title": "점의 위치 구하기", "level": 0 }, - { "id": "120842", "title": "2차원으로 만들기", "level": 0 }, - { "id": "120843", "title": "공 던지기", "level": 0 }, - { "id": "120844", "title": "배열 회전시키기", "level": 0 }, - { "id": "120845", "title": "주사위의 개수", "level": 0 }, - { "id": "120846", "title": "합성수 찾기", "level": 0 }, - { "id": "120847", "title": "최댓값 만들기(1)", "level": 0 }, - { "id": "120848", "title": "팩토리얼", "level": 0 }, - { "id": "120849", "title": "모음 제거", "level": 0 }, - { "id": "120850", "title": "문자열 정렬하기 (1)", "level": 0 }, - { "id": "120851", "title": "숨어있는 숫자의 덧셈 (1)", "level": 0 }, - { "id": "120852", "title": "소인수분해", "level": 0 }, - { "id": "120853", "title": "컨트롤 제트", "level": 0 }, - { "id": "120854", "title": "배열 원소의 길이", "level": 0 }, - { "id": "120860", "title": "직사각형 넓이 구하기", "level": 0 }, - { "id": "120861", "title": "캐릭터의 좌표", "level": 0 }, - { "id": "120862", "title": "최댓값 만들기 (2)", "level": 0 }, - { "id": "120863", "title": "다항식 더하기", "level": 0 }, - { "id": "120864", "title": "숨어있는 숫자의 덧셈 (2)", "level": 0 }, - { "id": "120866", "title": "안전지대", "level": 0 }, - { "id": "120868", "title": "삼각형의 완성조건 (2)", "level": 0 }, - { "id": "120869", "title": "외계어 사전", "level": 0 }, - { "id": "120871", "title": "저주의 숫자 3", "level": 0 }, - { "id": "120875", "title": "평행", "level": 0 }, - { "id": "120876", "title": "겹치는 선분의 길이", "level": 0 }, - { "id": "120878", "title": "유한소수 판별하기", "level": 0 }, - { "id": "120880", "title": "특이한 정렬", "level": 0 }, - { "id": "120882", "title": "등수 매기기", "level": 0 }, - { "id": "120883", "title": "로그인 성공?", "level": 0 }, - { "id": "120884", "title": "치킨 쿠폰", "level": 0 }, - { "id": "120885", "title": "이진수 더하기", "level": 0 }, - { "id": "120886", "title": "A로 B 만들기", "level": 0 }, - { "id": "120887", "title": "k의 개수", "level": 0 }, - { "id": "120888", "title": "중복된 문자 제거", "level": 0 }, - { "id": "120889", "title": "삼각형의 완성조건 (1)", "level": 0 }, - { "id": "120890", "title": "가까운 수", "level": 0 }, - { "id": "120891", "title": "369게임", "level": 0 }, - { "id": "120892", "title": "암호 해독", "level": 0 }, - { "id": "120893", "title": "대문자와 소문자", "level": 0 }, - { "id": "120894", "title": "영어가 싫어요", "level": 0 }, - { "id": "120895", "title": "인덱스 바꾸기", "level": 0 }, - { "id": "120896", "title": "한 번만 등장한 문자", "level": 0 }, - { "id": "120897", "title": "약수 구하기", "level": 0 }, - { "id": "120898", "title": "편지", "level": 0 }, - { "id": "120899", "title": "가장 큰 수 찾기", "level": 0 }, - { "id": "120902", "title": "문자열 계산하기", "level": 0 }, - { "id": "120903", "title": "배열의 유사도", "level": 0 }, - { "id": "120904", "title": "숫자 찾기", "level": 0 }, - { "id": "120905", "title": "n의 배수 고르기", "level": 0 }, - { "id": "120906", "title": "자릿수 더하기", "level": 0 }, - { "id": "120907", "title": "OX퀴즈", "level": 0 }, - { "id": "120908", "title": "문자열안에 문자열", "level": 0 }, - { "id": "120909", "title": "제곱수 판별하기", "level": 0 }, - { "id": "120910", "title": "세균 증식", "level": 0 }, - { "id": "120911", "title": "문자열 정렬하기 (2)", "level": 0 }, - { "id": "120912", "title": "7의 개수", "level": 0 }, - { "id": "120913", "title": "잘라서 배열로 저장하기", "level": 0 }, - { "id": "120921", "title": "문자열 밀기", "level": 0 }, - { "id": "120922", "title": "종이 자르기", "level": 0 }, - { "id": "120923", "title": "연속된 수의 합", "level": 0 }, - { "id": "120924", "title": "다음에 올 숫자", "level": 0 }, - { "id": "120956", "title": "옹알이", "level": 0 }, - { "id": "12899", "title": "124 나라의 숫자", "level": 2 }, - { "id": "12900", "title": "2 x n 타일링", "level": 2 }, - { "id": "12901", "title": "2016년", "level": 1 }, - { "id": "12902", "title": "3 x n 타일링", "level": 2 }, - { "id": "12903", "title": "가운데 글자 가져오기", "level": 1 }, - { "id": "12905", "title": "가장 큰 정사각형 찾기", "level": 2 }, - { "id": "12906", "title": "같은 숫자는 싫어", "level": 1 }, - { "id": "12909", "title": "올바른 괄호", "level": 2 }, - { "id": "12910", "title": "나누어 떨어지는 숫자 배열", "level": 1 }, - { "id": "12911", "title": "다음 큰 숫자", "level": 2 }, - { "id": "12912", "title": "두 정수 사이의 합", "level": 1 }, - { "id": "12913", "title": "땅따먹기", "level": 2 }, - { "id": "12914", "title": "멀리 뛰기", "level": 2 }, - { "id": "12915", "title": "문자열 내 마음대로 정렬하기", "level": 1 }, - { "id": "12916", "title": "문자열 내 p와 y의 개수", "level": 1 }, - { "id": "12917", "title": "문자열 내림차순으로 배치하기", "level": 1 }, - { "id": "12918", "title": "문자열 다루기 기본", "level": 1 }, - { "id": "12919", "title": "서울에서 김서방 찾기", "level": 1 }, - { "id": "12922", "title": "수박수박수박수박수박수?", "level": 1 }, - { "id": "12923", "title": "숫자 블록", "level": 2 }, - { "id": "12924", "title": "숫자의 표현", "level": 2 }, - { "id": "12925", "title": "문자열을 정수로 바꾸기", "level": 1 }, - { "id": "12926", "title": "시저 암호", "level": 1 }, - { "id": "12928", "title": "약수의 합", "level": 1 }, - { "id": "12929", "title": "올바른 괄호의 갯수", "level": 4 }, - { "id": "12930", "title": "이상한 문자 만들기", "level": 1 }, - { "id": "12931", "title": "자릿수 더하기", "level": 1 }, - { "id": "12932", "title": "자연수 뒤집어 배열로 만들기", "level": 1 }, - { "id": "12933", "title": "정수 내림차순으로 배치하기", "level": 1 }, - { "id": "12934", "title": "정수 제곱근 판별", "level": 1 }, - { "id": "12935", "title": "제일 작은 수 제거하기", "level": 1 }, - { "id": "12936", "title": "줄 서는 방법", "level": 2 }, - { "id": "12937", "title": "짝수와 홀수", "level": 1 }, - { "id": "12939", "title": "최댓값과 최솟값", "level": 2 }, - { "id": "12940", "title": "최대공약수와 최소공배수", "level": 1 }, - { "id": "12941", "title": "최솟값 만들기", "level": 2 }, - { "id": "12943", "title": "콜라츠 추측", "level": 1 }, - { "id": "12944", "title": "평균 구하기", "level": 1 }, - { "id": "12945", "title": "피보나치 수", "level": 2 }, - { "id": "12946", "title": "하노이의 탑", "level": 2 }, - { "id": "12947", "title": "하샤드 수", "level": 1 }, - { "id": "12948", "title": "핸드폰 번호 가리기", "level": 1 }, - { "id": "12949", "title": "행렬의 곱셈", "level": 2 }, - { "id": "12950", "title": "행렬의 덧셈", "level": 1 }, - { "id": "12951", "title": "JadenCase 문자열 만들기", "level": 2 }, - { "id": "12952", "title": "N Queen", "level": 2 }, - { "id": "12953", "title": "N개의 최소공배수", "level": 2 }, - { "id": "12954", "title": "x만큼 간격이 있는 n개의 숫자", "level": 1 }, - { "id": "12969", "title": "직사각형 별찍기", "level": 1 }, - { "id": "12973", "title": "짝지어 제거하기", "level": 2 }, - { "id": "12977", "title": "소수 만들기", "level": 1 }, - { "id": "12978", "title": "배달", "level": 2 }, - { "id": "12980", "title": "점프와 순간 이동", "level": 2 }, - { "id": "12981", "title": "영어 끝말잇기", "level": 2 }, - { "id": "12982", "title": "예산", "level": 1 }, - { "id": "12983", "title": "단어 퍼즐", "level": 4 }, - { "id": "12985", "title": "예상 대진표", "level": 2 }, - { "id": "131128", "title": "숫자 짝꿍", "level": 1 }, - { "id": "17677", "title": "[1차] 뉴스 클러스터링", "level": 2 }, - { "id": "17679", "title": "[1차] 프렌즈4블록", "level": 2 }, - { "id": "17680", "title": "[1차] 캐시", "level": 2 }, - { "id": "17681", "title": "[1차] 비밀지도", "level": 1 }, - { "id": "17682", "title": "[1차] 다트 게임", "level": 1 }, - { "id": "17683", "title": "[3차] 방금그곡", "level": 2 }, - { "id": "17684", "title": "[3차] 압축", "level": 2 }, - { "id": "17686", "title": "[3차] 파일명 정렬", "level": 2 }, - { "id": "17687", "title": "[3차] n진수 게임", "level": 2 }, - { "id": "1844", "title": "게임 맵 최단거리", "level": 2 }, - { "id": "1845", "title": "폰켓몬", "level": 1 }, - { "id": "42576", "title": "완주하지 못한 선수", "level": 1 }, - { "id": "42578", "title": "위장", "level": 2 }, - { "id": "42579", "title": "베스트앨범", "level": 3 }, - { "id": "42583", "title": "다리를 지나는 트럭", "level": 2 }, - { "id": "42586", "title": "기능개발", "level": 2 }, - { "id": "42587", "title": "프린터", "level": 2 }, - { "id": "42628", "title": "이중우선순위큐", "level": 3 }, - { "id": "42746", "title": "가장 큰 수", "level": 2 }, - { "id": "42747", "title": "H Index", "level": 2 }, - { "id": "42748", "title": "K번째수", "level": 1 }, - { "id": "42839", "title": "소수 찾기", "level": 1 }, - { "id": "42840", "title": "모의고사", "level": 1 }, - { "id": "42842", "title": "카펫", "level": 2 }, - { "id": "42860", "title": "조이스틱", "level": 2 }, - { "id": "42862", "title": "체육복", "level": 1 }, - { "id": "42883", "title": "큰 수 만들기", "level": 2 }, - { "id": "42884", "title": "단속카메라", "level": 3 }, - { "id": "42885", "title": "구명보트", "level": 2 }, - { "id": "42888", "title": "오픈채팅방", "level": 2 }, - { "id": "42889", "title": "실패율", "level": 1 }, - { "id": "42890", "title": "후보키", "level": 2 }, - { "id": "42891", "title": "무지의 먹방 라이브", "level": 4 }, - { "id": "43162", "title": "네트워크", "level": 3 }, - { "id": "43164", "title": "여행경로", "level": 3 }, - { "id": "43165", "title": "타겟 넘버", "level": 2 }, - { "id": "43238", "title": "입국심사", "level": 3 }, - { "id": "49189", "title": "가장 먼 노드", "level": 3 }, - { "id": "49993", "title": "스킬트리", "level": 2 }, - { "id": "49994", "title": "방문 길이", "level": 2 }, - { "id": "60057", "title": "문자열 압축", "level": 2 }, - { "id": "60058", "title": "괄호 변환", "level": 2 }, - { "id": "60060", "title": "가사 검색", "level": 4 }, - { "id": "62048", "title": "멀쩡한 사각형", "level": 2 }, - { "id": "64061", "title": "크레인 인형뽑기 게임", "level": 1 }, - { "id": "64065", "title": "튜플", "level": 2 }, - { "id": "67256", "title": "키패드 누르기", "level": 1 }, - { "id": "67257", "title": "수식 최대화", "level": 2 }, - { "id": "68644", "title": "두 개 뽑아서 더하기", "level": 1 }, - { "id": "68645", "title": "삼각 달팽이", "level": 2 }, - { "id": "68935", "title": "3진법 뒤집기", "level": 1 }, - { "id": "68936", "title": "쿼드압축 후 개수 세기", "level": 2 }, - { "id": "70128", "title": "내적", "level": 1 }, - { "id": "70129", "title": "이진 변환 반복하기", "level": 2 }, - { "id": "72410", "title": "신규 아이디 추천", "level": 1 }, - { "id": "72411", "title": "메뉴 리뉴얼", "level": 2 }, - { "id": "72412", "title": "순위 검색", "level": 2 }, - { "id": "76501", "title": "음양 더하기", "level": 1 }, - { "id": "76502", "title": "괄호 회전하기", "level": 2 }, - { "id": "77484", "title": "로또의 최고 순위와 최저 순위", "level": 1 }, - { "id": "77485", "title": "행렬 테두리 회전하기", "level": 2 }, - { "id": "77884", "title": "약수의 개수와 덧셈", "level": 1 }, - { "id": "77885", "title": "2개 이하로 다른 비트", "level": 2 }, - { "id": "81301", "title": "숫자 문자열과 영단어", "level": 1 }, - { "id": "81302", "title": "거리두기 확인하기", "level": 2 }, - { "id": "82612", "title": "부족한 금액 계산하기", "level": 1 }, - { "id": "84512", "title": "모음사전", "level": 2 }, - { "id": "86051", "title": "없는 숫자 더하기", "level": 1 }, - { "id": "86052", "title": "빛의 경로 사이클", "level": 2 }, - { "id": "86491", "title": "최소직사각형", "level": 1 }, - { "id": "86971", "title": "전력망을 둘로 나누기", "level": 2 }, - { "id": "87377", "title": "교점에 별 만들기", "level": 2 }, - { "id": "87389", "title": "나머지가 1이 되는 수 찾기", "level": 1 }, - { "id": "87390", "title": "n^2 배열 자르기", "level": 2 }, - { "id": "87946", "title": "피로도", "level": 2 }, - { "id": "92334", "title": "신고 결과 받기", "level": 1 }, - { "id": "92335", "title": "k진수에서 소수 개수 구하기", "level": 2 }, - { "id": "92341", "title": "주차 요금 계산", "level": 2 }, - { "id": "92342", "title": "양궁대회", "level": 2 } - ], - "sols": [ - { - "id": "xSm8od1xFwgFefxNzkVqa", - "author": "codeisneverodd", - "code": "function solution(num_list, n) {\n let result = [];\n for (let i = 0; i < num_list.length / n; i++) {\n result = [...result, num_list.slice(i * n, i * n + n)];\n }\n return result;\n}", - "probId": "120842" - }, - { - "id": "K-zJIO4QrSl-S9XOoRs9z", - "author": "codeisneverodd", - "code": "function solution(order) {\n return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length;\n}", - "probId": "120891" - }, - { - "id": "z9tZ9PckhK1H-6ocTeWO2", - "author": "codeisneverodd", - "code": "function solution(array) {\n return [...array.join('')].filter(a => a === '7').length;\n}", - "probId": "120912" - }, - { - "id": "NNf6s-HTVaGKm78AOPaVw", - "author": "codeisneverodd", - "code": "function solution(before, after) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return sort(before) === sort(after) ? 1 : 0;\n}", - "probId": "120886" - }, - { - "id": "7oXUiFUSQ9uqtT5hYSLIf", - "author": "codeisneverodd", - "code": "function solution(quiz) {\n return quiz.map(q => {\n const [formula, answer] = q.split('=');\n return eval(formula) === +answer ? 'O' : 'X';\n });\n}", - "probId": "120907" - }, - { - "id": "BYmirH4q1XECD8bMEo29U", - "author": "codeisneverodd", - "code": "function solution(i, j, k) {\n let count = 0;\n for (let num = i; num <= j; num++) {\n count += [...('' + num)].filter(n => +n === k).length;\n }\n return count;\n}", - "probId": "120887" - }, - { - "id": "Fd_1vZ2pAt6rpah2QbEsi", - "author": "codeisneverodd", - "code": "function solution(n, numlist) {\n return numlist.filter(num => num % n === 0);\n}", - "probId": "120905" - }, - { - "id": "tGL_-zp4MOVhXsFcJcMun", - "author": "codeisneverodd", - "code": "function solution(array, n) {\n const minDiff = Math.min(...array.map(a => Math.abs(a - n)));\n return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff);\n}", - "probId": "120890" - }, - { - "id": "nKQO66zONo7540fHrto5P", - "author": "codeisneverodd", - "code": "function solution(rsp) {\n const win = { 0: 5, 2: 0, 5: 2 };\n return [...rsp].map(num => win[num]).join('');\n}", - "probId": "120839" - }, - { - "id": "m6fBW1kYmz63rvE_9J-j7", - "author": "codeisneverodd", - "code": "function solution(array) {\n const max = Math.max(...array);\n return [max, array.indexOf(max)];\n}", - "probId": "120899" - }, - { - "id": "CqKrSPtMSN3R0qbXB3uaj", - "author": "codeisneverodd", - "code": "function solution(angle) {\n if (angle === 180) return 4;\n if (angle > 90) return 3;\n if (angle === 90) return 2;\n return 1;\n}", - "probId": "120829" - }, - { - "id": "O7PoiGypXs92Zf0CtGSFq", - "author": "codeisneverodd", - "code": "function solution(hp) {\n const first = Math.floor(hp / 5);\n const second = Math.floor((hp - first * 5) / 3);\n const third = hp - first * 5 - second * 3;\n return first + second + third;\n}", - "probId": "120837" - }, - { - "id": "eQLxLoyizYAtnKZ2NvI7K", - "author": "codeisneverodd", - "code": "function solution(lines) {\n const visited = lines.reduce((a, [x, y]) => {\n for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1;\n return a;\n }, {});\n\n return Object.values(visited).filter(v => v > 1).length;\n}", - "probId": "120876" - }, - { - "id": "rKj4MpytQxyf3pHUEsJdP", - "author": "codeisneverodd", - "code": "function solution(numbers, k) {\n const goNext = current => (current + 2) % numbers.length;\n let current = 0;\n for (let i = 0; i < k - 1; i++) current = goNext(current);\n return numbers[current];\n}", - "probId": "120843" - }, - { - "id": "HCLioSAvzxRnHX8mjtUWU", - "author": "codeisneverodd", - "code": "function solution(balls, share) {\n const [n, m] = [balls, share];\n const fact = [BigInt(1), BigInt(1)];\n\n for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i);\n\n return Number(fact[n] / (fact[n - m] * fact[m]));\n}", - "probId": "120840" - }, - { - "id": "FPUJpgh0XMsggme9iIl50", - "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 % num2;\n}", - "probId": "120810" - }, - { - "id": "mk4qvXkinyqMf5XPVCHdj", - "author": "codeisneverodd", - "code": "function solution(age) {\n return 2022 - age + 1;\n}", - "probId": "120820" - }, - { - "id": "18S-4SEbVwFndDpxz2ciT", - "author": "codeisneverodd", - "code": "function solution(common) {\n const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0];\n return isAP(common)\n ? common[common.length - 1] + common[1] - common[0]\n : common[common.length - 1] * (common[1] / common[0]);\n}", - "probId": "120924" - }, - { - "id": "kVuyEQ3KiqW-p8BTxdFgS", - "author": "codeisneverodd", - "code": "function solution(polynomial) {\n const countX = x => {\n const count = x.replaceAll('x', '');\n return count === '' ? 1 : +count;\n };\n\n const count = polynomial\n .split(' + ')\n .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), {\n x: 0,\n num: 0,\n });\n\n const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : '';\n const num = count.num > 0 ? '' + count.num : '';\n const plus = x !== '' && num !== '' ? ' + ' : '';\n\n return x + plus + num;\n}", - "probId": "120863" - }, - { - "id": "XsKuARaEONvRaODN2AM0x", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join('');\n}", - "probId": "120893" - }, - { - "id": "qQWDAJ0NE_d14Se_xpJlf", - "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 * num2;\n}", - "probId": "120804" - }, - { - "id": "8kX9ALQ_W9RpcWuaA8orB", - "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return Math.floor((num1 / num2) * 1000);\n}", - "probId": "120806" - }, - { - "id": "yQwy5c7WXcwqM2jDGreyj", - "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 - num2;\n}", - "probId": "120803" - }, - { - "id": "flq5YSiss1nLA5LYkvWI2", - "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 + num2\n}", - "probId": "120802" - }, - { - "id": "_JQtvPHPiTHkpMg6dBdYV", - "author": "codeisneverodd", - "code": "function solution(score) {\n const avgs = score.map(([a, b]) => (a + b) / 2);\n const avgRank = [...avgs]\n .sort((a, b) => b - a)\n .map((avg, i) => ({ avg, rank: i + 1 }))\n .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a));\n\n return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank);\n}", - "probId": "120882" - }, - { - "id": "bEBMTcBreInF2HUsI8Srb", - "author": "codeisneverodd", - "code": "function solution(id_pw, db) {\n const [id, pw] = id_pw;\n if (!db.find(([_id]) => _id === id)) return 'fail';\n return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw';\n}", - "probId": "120883" - }, - { - "id": "e9hMhyRpgd_yQEIsJosu9", - "author": "codeisneverodd", - "code": "function solution(array, height) {\n return array.filter(a => a > height).length;\n}", - "probId": "120585" - }, - { - "id": "A-b2Wsfa0T54J6VWMLuu9", - "author": "codeisneverodd", - "code": "function solution(letter) {\n const morse = { \n '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',\n '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',\n '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',\n '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',\n '-.--':'y','--..':'z'\n }\n return letter\n .split(' ')\n .map(l => morse[l])\n .join('');\n}", - "probId": "120838" - }, - { - "id": "tBLnLwhR8r9zfQcOfHxsx", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return my_string.replace(/[aeiou]/g, '');\n}", - "probId": "120849" - }, - { - "id": "8tUQNdlKqJGZVvFP8pfQb", - "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return Math.floor(num1 / num2);\n}", - "probId": "120805" - }, - { - "id": "wkUGsvxZ3z-W5vTvPExjc", - "author": "codeisneverodd", - "code": "function solution(my_string, n) {\n return [...my_string].map(char => char.repeat(n)).join('');\n}", - "probId": "120825" - }, - { - "id": "UVfLDE0kUq5-Mb2qiIT-Q", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return eval(my_string);\n}", - "probId": "120902" - }, - { - "id": "YMoDlo5dmBhdtuG9F-uqQ", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...my_string].reverse().join('');\n}", - "probId": "120822" - }, - { - "id": "6Y-EoZ6LOvILJ7Lel6NSI", - "author": "codeisneverodd", - "code": "function solution(A, B) {\n const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join('');\n for (let i = 0; i <= A.length; i++) {\n if (A === B) return i;\n A = pushRight(A);\n }\n\n return -1;\n}", - "probId": "120921" - }, - { - "id": "cI4OhwYtuVREl6zRScqAI", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return my_string\n .match(/[0-9]/g)\n .map(str => +str)\n .sort((a, b) => a - b);\n}", - "probId": "120850" - }, - { - "id": "BxMASisim4qdys6KJBmev", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...my_string]\n .map(char => char.toLowerCase())\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}", - "probId": "120911" - }, - { - "id": "uBNgRHK5Itek6vZj_b2ZF", - "author": "codeisneverodd", - "code": "function solution(str1, str2) {\n return str1.includes(str2) ? 1 : 2;\n}", - "probId": "120908" - }, - { - "id": "i6QAPFUAt3dpKN9EEHkOB", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n return numbers.map(n => n * 2);\n}", - "probId": "120809" - }, - { - "id": "yyezriEKHxGA4903NHu-p", - "author": "codeisneverodd", - "code": "function solution(num_list) {\n return num_list.reverse();\n}", - "probId": "120821" - }, - { - "id": "8KAzdEaoD--V3usRyB810", - "author": "codeisneverodd", - "code": "function solution(strlist) {\n return strlist.map(s => s.length);\n}", - "probId": "120854" - }, - { - "id": "4lUPXxJ7YT1dtYeZ-wb5Z", - "author": "codeisneverodd", - "code": "function solution(numbers, num1, num2) {\n return numbers.slice(num1, num2 + 1);\n}", - "probId": "120833" - }, - { - "id": "xynsg91juTSBA6n0gTGqD", - "author": "codeisneverodd", - "code": "function solution(numbers, direction) {\n return direction === 'right'\n ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]\n : [...numbers.slice(1), numbers[0]];\n}", - "probId": "120844" - }, - { - "id": "Sc60jxZax2HO-tpUSEC1f", - "author": "codeisneverodd", - "code": "function solution(s1, s2) {\n return s1.filter(s => s2.includes(s)).length;\n}", - "probId": "120903" - }, - { - "id": "FyRd_EPVRwYpZS9u07dkp", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n return numbers.reduce((a, c) => a + c, 0) / numbers.length;\n}", - "probId": "120817" - }, - { - "id": "roh_q2oY0XpKwnNsBnP0s", - "author": "codeisneverodd", - "code": "function solution(denum1, num1, denum2, num2) {\n const denum = denum2 * num1 + denum1 * num2;\n const num = num1 * num2;\n const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b));\n const gcd = getGCD(denum, num);\n return [denum / gcd, num / gcd];\n}", - "probId": "120808" - }, - { - "id": "iP7JW645q8rySEb5VCr6t", - "author": "codeisneverodd", - "code": "function solution(sides) {\n const max = Math.max(...sides);\n return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2;\n}", - "probId": "120889" - }, - { - "id": "3XMMT8OfEfX0OAUf5cNuc", - "author": "codeisneverodd", - "code": "function solution(sides) {\n return Math.min(...sides) * 2 - 1;\n}", - "probId": "120868" - }, - { - "id": "q237y8p-W2-NymFreJNK2", - "author": "codeisneverodd", - "code": "function solution(n, t) {\n return n * 2 ** t;\n}", - "probId": "120910" - }, - { - "id": "aE4vSAa7PBamLUB4tsrEQ", - "author": "codeisneverodd", - "code": "function solution(n) {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(n); i++) {\n while (n % i === 0) {\n pFactors = [...pFactors, i];\n n /= i;\n }\n }\n if (n >= 2) pFactors = [...pFactors, n];\n return [...new Set(pFactors)].sort((a, b) => a - b);\n}\n\nconst funcB = () => {\n return new Promise(resolve => {\n setTimeout(resolve('guys'), 1000);\n });\n};\n\nconst funcC = async () => {\n const m = 1;\n const res = await funcB();\n return res;\n};\nwindow.addEventListener('DOMContentLoaded', async () => {\n console.log(await funcC());\n});", - "probId": "120852" - }, - { - "id": "W1Ha5iyhI7K7os4oVnTqK", - "author": "codeisneverodd", - "code": "function solution(n) {\n let count = 0;\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) count += 2;\n }\n if (n % Math.sqrt(n) === 0) count += 1;\n return count;\n}", - "probId": "120836" - }, - { - "id": "kmOkg2WIkUP1Cm-OJ-MeQ", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0);\n}", - "probId": "120851" - }, - { - "id": "uVccwTQARnsGW96AVykfD", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n const nums = my_string.match(/[0-9]+/g);\n return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0;\n}", - "probId": "120864" - }, - { - "id": "-Os7P_tCHgkNkR4DrJ0PN", - "author": "codeisneverodd", - "code": "function solution(num1, num2) {\n return num1 === num2 ? 1 : -1;\n}", - "probId": "120807" - }, - { - "id": "zSDOYDjSmsATo2fbfxxWm", - "author": "codeisneverodd", - "code": "function solution(num, k) {\n const index = [...('' + num)].findIndex(n => +n === k);\n return index === -1 ? -1 : index + 1;\n}", - "probId": "120904" - }, - { - "id": "fLHyXayI4FyOCt255le-1", - "author": "codeisneverodd", - "code": "function solution(money) {\n return [Math.floor(money / 5500), money % 5500];\n}", - "probId": "120819" - }, - { - "id": "KkTti4G5XKJq39sAvcgUH", - "author": "codeisneverodd", - "code": "function solution(board) {\n const isBombNearby = (r, c) => {\n const nearby = [\n [-1, -1],\n [-1, 0],\n [-1, 1],\n [0, -1],\n [0, 1],\n [1, -1],\n [1, 0],\n [1, 1],\n ];\n\n const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length;\n\n return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1);\n };\n\n let count = 0;\n\n for (let r = 0; r < board.length; r++) {\n for (let c = 0; c < board.length; c++) {\n if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1;\n }\n }\n return count;\n}", - "probId": "120866" - }, - { - "id": "E6dyRuBWZAnVUJA4Du6ev", - "author": "codeisneverodd", - "code": "function solution(cipher, code) {\n return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), '');\n}", - "probId": "120892" - }, - { - "id": "VC4tCj0840HRGp-z1Q4qE", - "author": "codeisneverodd", - "code": "function solution(n) {\n let answer = [];\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) answer = [...answer, i, n / i];\n }\n if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)];\n return answer.sort((a, b) => a - b);\n}", - "probId": "120897" - }, - { - "id": "7sOJt_9XaqOJvghXbf_kC", - "author": "codeisneverodd", - "code": "function solution(n, k) {\n return n * 12000 + (k - Math.floor(n / 10)) * 2000;\n}", - "probId": "120830" - }, - { - "id": "3BTyE9pEztLOFSaUde2h7", - "author": "codeisneverodd", - "code": "function solution(num, total) {\n const numArr = Array.from({ length: num }, (_, i) => i);\n const sum = numArr.reduce((a, c) => a + c);\n return numArr.map(n => n - (sum - total) / num);\n}", - "probId": "120923" - }, - { - "id": "EIIrUFaAS0V5x6_bEJexe", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 };\n const regex = new RegExp(Object.keys(nums).join('|'), 'g');\n return +numbers.replace(regex, key => nums[key]);\n}", - "probId": "120894" - }, - { - "id": "jllBcdS7x6TpR19h4i3mW", - "author": "codeisneverodd", - "code": "function solution(price) {\n if (price >= 500000) return Math.floor(price * 0.8);\n if (price >= 300000) return Math.floor(price * 0.9);\n if (price >= 100000) return Math.floor(price * 0.95);\n return price;\n}", - "probId": "120818" - }, - { - "id": "k6ifMbSEXrkZxfNsJob9s", - "author": "codeisneverodd", - "code": "function solution(babbling) {\n const convertPWordsToNum = word => {\n const pWords = ['aya', 'ye', 'woo', 'ma'];\n return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word);\n };\n const canPronounce = word => {\n const result = convertPWordsToNum(word);\n return !/[^\\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]);\n };\n\n return babbling.filter(b => canPronounce(b)).length;\n}", - "probId": "120956" - }, - { - "id": "k1QZofbDT5yfaiJexD24k", - "author": "codeisneverodd", - "code": "function solution(spell, dic) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2;\n}", - "probId": "120869" - }, - { - "id": "omKQmjAADJvBbGzzgMH-k", - "author": "codeisneverodd", - "code": "function solution(age) {\n return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join('');\n}", - "probId": "120834" - }, - { - "id": "jOpezmOte2FKGRKxMqOws", - "author": "codeisneverodd", - "code": "function solution(a, b) {\n const getGCD = (a, b) => {\n let gcd = 1;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if (a % i === 0 && b % i === 0) gcd = i;\n }\n return gcd;\n };\n\n const getPrimeFactors = num => {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(num); i++) {\n while (num % i === 0) {\n pFactors = [...pFactors, i];\n num /= i;\n }\n }\n if (num > 2) pFactors = [...pFactors, num];\n return pFactors;\n };\n\n return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1;\n}", - "probId": "120878" - }, - { - "id": "LMVzWcSFfwsYtSgO6hNXc", - "author": "codeisneverodd", - "code": "function solution(bin1, bin2) {\n return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);\n}", - "probId": "120885" - }, - { - "id": "gtQGO4DvoU1oLUddtt-LZ", - "author": "codeisneverodd", - "code": "function solution(my_string, num1, num2) {\n const str = [...my_string];\n\n [str[num1], str[num2]] = [str[num2], str[num1]];\n\n return str.join('');\n}", - "probId": "120895" - }, - { - "id": "0VONCnZmY7f3yd625hIpr", - "author": "codeisneverodd", - "code": "function solution(n) {\n return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0);\n}", - "probId": "120906" - }, - { - "id": "GlYKS6KBtGmPGmladvL0U", - "author": "codeisneverodd", - "code": "function solution(my_str, n) {\n let result = [];\n for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)];\n return result;\n}", - "probId": "120913" - }, - { - "id": "j3E7UTIvK9SivBYv-QN_b", - "author": "codeisneverodd", - "code": "function solution(n) {\n let num = 0;\n let count = 0;\n\n while (count < n) {\n num += 1;\n if (!('' + num).includes('3') && num % 3 !== 0) count += 1;\n }\n\n return num;\n}", - "probId": "120871" - }, - { - "id": "zuKW6v0J6alpgcDtzf58X", - "author": "codeisneverodd", - "code": "function solution(dot) {\n const [x, y] = dot;\n if (y > 0) return x > 0 ? 1 : 2;\n return x < 0 ? 3 : 4;\n}", - "probId": "120841" - }, - { - "id": "Vhp-_gTRlWlIK9bwC20Bs", - "author": "codeisneverodd", - "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? 1 : 2;\n}", - "probId": "120909" - }, - { - "id": "0Rbwoi8hQYeh8KnDJ7Pjw", - "author": "codeisneverodd", - "code": "function solution(M, N) {\n return M * N - 1;\n}", - "probId": "120922" - }, - { - "id": "ZXHZe-XilNybP5cTIZClP", - "author": "codeisneverodd", - "code": "function solution(box, n) {\n return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);\n}", - "probId": "120845" - }, - { - "id": "LrS3JXzlAzv78oxs0JRvP", - "author": "codeisneverodd", - "code": "function solution(my_string) {\n return [...new Set(my_string)].join('');\n}", - "probId": "120888" - }, - { - "id": "kJJRY9GgLy98mK7jGPdK3", - "author": "codeisneverodd", - "code": "function solution(array, n) {\n return array.filter(a => a === n).length;\n}", - "probId": "120583" - }, - { - "id": "5UBJ9ldIXAeNjpp0JIkfB", - "author": "codeisneverodd", - "code": "function solution(array) {\n return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];\n}", - "probId": "120811" - }, - { - "id": "SiUS7rs55Tz70IpM2SQzb", - "author": "codeisneverodd", - "code": "const readline = require('readline');\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet input = [];\n\nrl.on('line', function (line) {\n input = line.split(' ');\n}).on('close', function () {\n for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i));\n});", - "probId": "120823" - }, - { - "id": "2SCINAyIX_7A8LruK1A1V", - "author": "codeisneverodd", - "code": "function solution(dots) {\n const xDots = dots.flatMap(([x, y]) => x);\n const yDots = dots.flatMap(([x, y]) => y);\n const width = Math.max(...xDots) - Math.min(...xDots);\n const height = Math.max(...yDots) - Math.min(...yDots);\n return width * height;\n}", - "probId": "120860" - }, - { - "id": "jouig9uSYkIg_D-tsM4Zu", - "author": "codeisneverodd", - "code": "function solution(emergency) {\n const sorted = [...emergency].sort((a, b) => b - a);\n return emergency.map(e => sorted.findIndex(s => s === e) + 1);\n}", - "probId": "120835" - }, - { - "id": "mPD29Z9lQ_cxKrDHC__oI", - "author": "codeisneverodd", - "code": "function solution(num_list) {\n const evenLength = num_list.filter(n => n % 2 === 0).length;\n return [evenLength, num_list.length - evenLength];\n}", - "probId": "120824" - }, - { - "id": "zy6mk4AvXF9xztiXRS8-4", - "author": "codeisneverodd", - "code": "function solution(n) {\n let nums = [];\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 1) nums = [...nums, i];\n }\n return nums;\n}", - "probId": "120813" - }, - { - "id": "kHlGOVzrZIqpqvNmbWow6", - "author": "codeisneverodd", - "code": "function solution(n) {\n let answer = 0;\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 0) answer += i;\n }\n return answer;\n}", - "probId": "120831" - }, - { - "id": "JQpPiPuxh73c7kO5a7Nzh", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n const [first, second, ...rest] = numbers.sort((a, b) => b - a);\n return first * second;\n}", - "probId": "120847" - }, - { - "id": "k8E_n2JN9JYI6PrLnGzfX", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n const sorted = numbers.sort((a, b) => a - b);\n return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]);\n}", - "probId": "120862" - }, - { - "id": "czion0YKw_J-4kluumzhK", - "author": "codeisneverodd", - "code": "function solution(array) {\n const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n const max = Math.max(...Object.values(counts));\n const modes = Object.keys(counts).filter(key => counts[key] === max);\n return modes.length === 1 ? +modes[0] : -1;\n}", - "probId": "120812" - }, - { - "id": "JWQH6EyirigybzhegY5ST", - "author": "codeisneverodd", - "code": "function solution(chicken) {\n const order = coupons => {\n if (coupons < 10) return 0;\n const service = Math.floor(coupons / 10);\n return service + order(service + (coupons % 10));\n };\n return order(chicken);\n}", - "probId": "120884" - }, - { - "id": "CDR9AYzvMSjY8652CVTQN", - "author": "codeisneverodd", - "code": "//명령형\nfunction solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n let pos = [0, 0];\n\n keyinput\n .map(key => moves[key])\n .forEach(move => {\n if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return;\n pos[0] += move[0];\n pos[1] += move[1];\n });\n\n return pos;\n}", - "probId": "120861" - }, - { - "id": "L0AgXguklH1kXTw0yykGl", - "author": "codeisneverodd", - "code": "function solution(s) {\n const arr = s.split(' ');\n while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2);\n return arr.map(n => +n).reduce((a, c) => a + c, 0);\n}", - "probId": "120853" - }, - { - "id": "8Fs11e7oBekuxNjpAstT3", - "author": "codeisneverodd", - "code": "function solution(numlist, n) {\n return numlist.sort((a, b) => {\n const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)];\n if (aDiff === bDiff) return b - a;\n return aDiff - bDiff;\n });\n}", - "probId": "120880" - }, - { - "id": "vdwvjmlu0CVowMKz2vTZD", - "author": "codeisneverodd", - "code": "function solution(my_string, letter) {\n return my_string.replaceAll(letter, '');\n}", - "probId": "120826" - }, - { - "id": "hbxjMqfAUJmkubGtkiuZf", - "author": "codeisneverodd", - "code": "function solution(n) {\n let factorial = [1, 1];\n for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i;\n\n return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2;\n}", - "probId": "120848" - }, - { - "id": "uT6FMY9QYKdJW8t9cY7Lk", - "author": "codeisneverodd", - "code": "function solution(message) {\n return message.length * 2;\n}", - "probId": "120898" - }, - { - "id": "orCSuHScIqur0ogDwynkK", - "author": "codeisneverodd", - "code": "function solution(dots) {\n const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity);\n const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2);\n\n return dots.some(dot => {\n const line1 = [dots[0], dot];\n const line2 = dots.filter(dot => !line1.includes(dot));\n return isParallel(line1, line2);\n })\n ? 1\n : 0;\n}", - "probId": "120875" - }, - { - "id": "PLZGvoLrsqLBgJXgDXUwd", - "author": "codeisneverodd", - "code": "function solution(n) {\n return Math.floor((n - 1) / 7) + 1;\n}", - "probId": "120814" - }, - { - "id": "H_H5U2fZK_cMpSSW8A_Rg", - "author": "codeisneverodd", - "code": "function solution(n) {\n const getLCM = (a, b) => {\n let lcm = 1;\n while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1;\n return lcm;\n };\n\n return getLCM(n, 6) / 6;\n}", - "probId": "120815" - }, - { - "id": "UF4EuA0Zbky3u50b1ay54", - "author": "codeisneverodd", - "code": "function solution(slice, n) {\n return Math.floor((n - 1) / slice) + 1;\n}", - "probId": "120816" - }, - { - "id": "44CkOTIiD_oxexcg_TZIK", - "author": "codeisneverodd", - "code": "function solution(s) {\n const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n return Object.keys(count)\n .filter(key => count[key] === 1)\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}", - "probId": "120896" - }, - { - "id": "Ude8dWJ0veL-IkVuADF1k", - "author": "codeisneverodd", - "code": "function solution(n) {\n const isPrime = num => {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return true;\n }\n return false;\n };\n\n let count = 0;\n\n for (let i = 1; i <= n; i++) {\n if (isPrime(i)) count += 1;\n }\n \n return count;\n}", - "probId": "120846" - }, - { - "id": "AEcVZmiBojNk8Oboba6mD", - "author": "codeisneverodd", - "code": "function solution(a, b) {\n let count = 0;\n const day = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n for (let i = 1; i < a; i++) count += month[i];\n count += b;\n return day[(count + 4) % 7]; // 금요일 부터 1일 이므로\n}", - "probId": "12901" - }, - { - "id": "S22YSfhqRPUc6UHmqWtTT", - "author": "yongchanson", - "code": "function solution(a, b) {\n const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const week = [\"THU\", \"FRI\", \"SAT\", \"SUN\", \"MON\", \"TUE\", \"WED\"];\n\n let sum = b;\n for (\n let i = 0;\n i < a - 1;\n i++ //ex)5월인 경우 1~4월까지 더해준다.\n )\n sum += month[i];\n\n return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다.\n}", - "probId": "12901" - }, - { - "id": "LjTnxDHrI117NKRnU7Zqy", - "author": "chaerin-dev", - "code": "function solution(a, b) {\n let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n let week = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수\n let passedDays = 0;\n // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌\n for (let i = 1; i < a; i++) passedDays += arr[i];\n // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌\n passedDays += b - 1;\n return week[(5 + passedDays) % 7];\n}", - "probId": "12901" - }, - { - "id": "1kHjxIv6xoYdMdmdvQlAg", - "author": "prove-ability", - "code": "function solution(a, b) {\n var answer = \"\";\n // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?\n const days = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n // 2016년 1월 1일은 금요일로 4를 더해준다\n let totalDays = 4;\n // a 이전 모든 달의 일 수를 더한다\n for (let i = 0, len = a - 1; i < len; i++) {\n totalDays += daysOfMonth[i];\n }\n // totalDays 와 해당 일을 더해주고 7로 나눈 나머지\n const dayIndex = (totalDays + b) % 7;\n return days[dayIndex];\n}", - "probId": "12901" - }, - { - "id": "czN4T6LuWlCohCBZEFVSf", - "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = 0;\n const ternaryReversed = decimalToTernaryReversed(n);\n answer = parseInt(ternaryReversed, 3);\n return answer;\n}\n\nconst decimalToTernaryReversed = (num) => {\n let ternary = \"\";\n while (num >= 3) {\n ternary += (num % 3).toString();\n num = Math.floor(num / 3);\n }\n ternary += num.toString();\n return ternary;\n};", - "probId": "68935" - }, - { - "id": "bQuOLguok3JdvtEXbswhY", - "author": "jaewon1676", - "code": "function solution(n) {\n var answer = n.toString(3).split(\"\").reverse().join(\"\");\n\n return parseInt(answer, 3);\n}", - "probId": "68935" - }, - { - "id": "M3fIPh7bjuq-s72EiNRB_", - "author": "prove-ability", - "code": "function solution(n) {\n return parseInt(n.toString(3).split(\"\").reverse().join(\"\"), 3)\n}", - "probId": "68935" - }, - { - "id": "w731dCWjCy4oHDfK9usEH", - "author": "codeisneverodd", - "code": "function solution(array, commands) {\n return commands.map((cmd) => {\n const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b);\n return arrCmd[cmd[2] - 1];\n });\n}", - "probId": "42748" - }, - { - "id": "JCbzIgZhJ3YjVlXbIT-z9", - "author": "jaewon1676", - "code": "function solution(array, commands) {\n var result = [];\n var temp = [];\n for (var i = 0; i < commands.length; i++) {\n temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => {\n return a - b;\n });\n console.log(temp);\n result.push(temp[commands[i][2] - 1]);\n }\n return result;\n}", - "probId": "42748" - }, - { - "id": "JF0TOt-JJ6h1O8Krb60Ke", - "author": "prove-ability", - "code": "function solution(array, commands) {\n var answer = [];\n commands.forEach(([i, j, k]) => {\n const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1];\n answer.push(su);\n });\n return answer;\n}", - "probId": "42748" - }, - { - "id": "45jjvhNysFJA-M7MRfbX2", - "author": "createhb21", - "code": "function solution(array, commands) {\n let answer = [];\n for (let i = 0; i < commands.length; i++) {\n let eachCommand = commands[i];\n let slice = array.slice(eachCommand[0] - 1, eachCommand[1]);\n answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]);\n }\n return answer;\n}", - "probId": "42748" - }, - { - "id": "KeoN162P78OTI7INZNqDO", - "author": "chaerin-dev", - "code": "function solution(array, commands) {\n let t = commands.length;\n let answer = [];\n while (t--) {\n let command = commands.shift();\n answer.push(\n array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[\n command[2] - 1\n ]\n );\n }\n return answer;\n}", - "probId": "42748" - }, - { - "id": "wsEkfxo9XV-p77hkbekXa", - "author": "codeisneverodd", - "code": "function solution(dartResult) {\n const regex = /\\d{1,2}[SDT]{1}[*|#]?/g;\n let result = [];\n for (const dart of dartResult.match(regex)) {\n const game = [...dart.split(/([SDT]{1})/)];\n const score = game[0];\n let bonus = 1;\n let option = 1;\n if (game[1] === \"S\") bonus = 1;\n if (game[1] === \"D\") bonus = 2;\n if (game[1] === \"T\") bonus = 3;\n\n if (game[2] === \"*\") {\n if (result.length !== 0) result[result.length - 1] *= 2;\n option = 2;\n }\n if (game[2] === \"#\") option = -1;\n\n result.push(score ** bonus * option);\n }\n\n return result.reduce((a, b) => a + b);\n}", - "probId": "17682" - }, - { - "id": "irR2UXQX-A5XSGaRc1Hae", - "author": "jaewon1676", - "code": "function solution(dartResult) {\n var answer = 0;\n let score = 0;\n let cnt = [];\n\n for (let i = 0; i < dartResult.length; i++) {\n //점수가 주어질때\n if (!isNaN(dartResult[i])) {\n // i가 1인 경우는 10점, 그외에는 점수\n score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]);\n //보너스 S일때\n } else if (dartResult[i] === \"S\") {\n cnt.push(score);\n //보너스 D일때\n } else if (dartResult[i] === \"D\") {\n cnt.push(Math.pow(score, 2));\n //보너스 T일때\n } else if (dartResult[i] === \"T\") {\n cnt.push(Math.pow(score, 3));\n //옵션 *일떄\n } else if (dartResult[i] === \"*\") {\n cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2;\n cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2;\n //옵션 #일때\n } else if (dartResult[i] === \"#\") {\n cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1];\n }\n }\n //3개의 점수 합산\n answer = cnt.reduce((acc, cur) => acc + cur, 0);\n return answer;\n}", - "probId": "17682" - }, - { - "id": "VFnKIAMHH4Xt05M7jCGR8", - "author": "codeisneverodd", - "code": "function solution(n, arr1, arr2) {\n var answer = [];\n let mapA = [];\n let mapB = [];\n for (let i = 0; i < n; i++) {\n let rowArrA = arr1[i].toString(2).split(\"\");\n let rowArrB = arr2[i].toString(2).split(\"\");\n for (let j = 0, len = rowArrA.length; j < n - len; j++)\n rowArrA.unshift(\"0\");\n for (let j = 0, len = rowArrB.length; j < n - len; j++)\n rowArrB.unshift(\"0\");\n mapA.push(rowArrA);\n mapB.push(rowArrB);\n }\n let answer2D = mapA.slice();\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n answer2D[i][j] = mapA[i][j] === \"0\" && mapB[i][j] === \"0\" ? \" \" : \"#\";\n }\n }\n answer = answer2D.map((row) => row.join(\"\"));\n return answer;\n}", - "probId": "17681" - }, - { - "id": "5SiIjKY4OzuKQ5AL87KS3", - "author": "jaewon1676", - "code": "function solution(n, arr1, arr2) {\n let answer = [];\n for (let i = 0; i < n; i++) {\n let temp = (arr1[i] | arr2[i]).toString(2);\n let line = []; // 한 행의 모든 2진수 보관\n\n for (let j = temp.length - n; j < temp.length; j++) {\n if (temp[j] == 1) {\n line.push(\"#\");\n } else {\n line.push(\" \");\n }\n }\n answer.push(line.join(\"\"));\n }\n return answer;\n}\n\n/* 풀이 과정\n1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다.\n2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다.\n3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/", - "probId": "17681" - }, - { - "id": "YpoSpGPJGAlrqUgsohv5i", - "author": "codeisneverodd", - "code": "function solution(x, n) {\n return Array.from(Array(n), (_, index) => x * (index + 1));\n}", - "probId": "12954" - }, - { - "id": "Cvkcn0ZBRI8ZT6VViEajm", - "author": "chaerin-dev", - "code": "function solution(x, n) {\n var answer = [];\n let add_gap = x;\n // n번 반복\n for (let i = 0; i < n; i++) {\n answer.push(x); // 처음 배열에 넣을 x\n x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가\n }\n return answer;\n}", - "probId": "12954" - }, - { - "id": "3qn2IflJ7P5F_tKB6XC7f", - "author": "jaewon1676", - "code": "function solution(n) {\n let str = \"\";\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + \"수\") : (str = str + \"박\");\n }\n return str;\n}", - "probId": "12954" - }, - { - "id": "m0z2ecvCUempXfOB6GMMY", - "author": "prove-ability", - "code": "function solution(x, n) {\n var answer = [];\n let i = 1;\n // n개 지니는 리스트를 리턴해야 합니다\n while (answer.length !== n) {\n // x부터 시작해 x씩 증가하는 숫자\n answer.push(x * i);\n i++;\n }\n return answer;\n}", - "probId": "12954" - }, - { - "id": "dxeSx_ZVdGgq2z1QHa6Cw", - "author": "codeisneverodd", - "code": "function solution(s) {\n return s.length % 2 !== 0\n ? s[Math.floor(s.length / 2)]\n : s.slice(s.length / 2 - 1, s.length / 2 + 1);\n}", - "probId": "12903" - }, - { - "id": "r-rwFERI9-Lah5UA83Maq", - "author": "yongchanson", - "code": "function solution(s) {\n var answer = \"\";\n let L2 = s.length / 2;\n\n answer =\n s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]);\n\n return answer;\n}", - "probId": "12903" - }, - { - "id": "-qN4d-WX14-j50bZByLaG", - "author": "prove-ability", - "code": "function solution(s) {\n var answer = '';\n // 중간 지점 찾기\n const point = Math.floor(s.length / 2);\n // 짝수인 경우 - (중간지점 - 1) + 중간지점 \n if(s.length % 2 ===0) answer = s[point - 1] + s[point];\n // 홀수인 경우 - 중간지점\n else answer = s[point];\n return answer;\n}", - "probId": "12903" - }, - { - "id": "70_67tohf_a1hLYU_krte", - "author": "chaerin-dev", - "code": "function solution(s) {\n return s.length % 2\n ? s[parseInt(s.length / 2)]\n : s[s.length / 2 - 1] + s[s.length / 2];\n}", - "probId": "12903" - }, - { - "id": "oxWHg53i3iT665f8hozdE", - "author": "jaewon1676", - "code": "function solution(s) {\n var answer = '';\n \n if (s.length % 2 == 0 ) { // 짝수일 경우,\n answer = s[s.length / 2 - 1] + s[s.length / 2];\n } else {\n answer = s[parseInt(s.length / 2)]; // 홀수일 경우\n }\n return answer;\n}", - "probId": "12903" - }, - { - "id": "tplZVPK_PKF-XuBUl5Eq-", - "author": "codeisneverodd", - "code": "function solution(arr) {\n var answer = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다.\n answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null;\n }\n return answer;\n}", - "probId": "12906" - }, - { - "id": "GzhFem1SEpbyrlwaIwQkw", - "author": "chaerin-dev", - "code": "function solution(arr) {\n // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고,\n // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용\n // 첫 번째 요소의 경우 undefined와 비교\n return arr.filter((item, index) => item !== arr[index - 1]);\n}", - "probId": "12906" - }, - { - "id": "sSuxksrH_HTsCFC99QbVD", - "author": "prove-ability", - "code": "function solution(arr) {\n let answer = [];\n // 이중 배열을 사용해서 포인터?를 두 개를 사용한다\n for (let i = 0, len = arr.length - 1; i < len; i++) {\n // i 의 다음수를 비교하기 위해 j = (i + 1)\n for (let j = i + 1, len = arr.length; j < len; j++) {\n // i 와 j 번째 값이 같이 않다면\n if (arr[i] !== arr[j]) {\n answer.push(arr[i]);\n i = j - 1;\n break;\n }\n }\n }\n answer.push(arr[arr.length - 1]);\n return answer;\n}", - "probId": "12906" - }, - { - "id": "Apl4xThs1U943jNGofenj", - "author": "codeisneverodd", - "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((element) => {\n element % divisor === 0 ? answer.push(element) : null;\n });\n answer.length === 0 ? answer.push(-1) : null;\n answer.sort((a, b) => a - b);\n return answer;\n}", - "probId": "12910" - }, - { - "id": "wQ0wLhdnBhT5nV-HrUOG6", - "author": "dev", - "code": "function solution(arr, divisor) {\n let answer = [];\n arr.forEach((e) => {\n if (e % divisor === 0) answer.push(e);\n });\n return answer.length ? answer.sort((a, b) => a - b) : [-1];\n}", - "probId": "12910" - }, - { - "id": "9gBj_SQybGqNPFUgPgwAL", - "author": "prove-ailbity", - "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((v) => v % divisor === 0 && answer.push(v))\n return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);\n}", - "probId": "12910" - }, - { - "id": "wBB0LgxWB13kFvcb7a0bn", - "author": "codeisneverodd", - "code": "function solution(n) {\n\n let answer = 0;\n for (let divisor = n - 1; divisor >= 2; divisor--) {\n if (n % divisor === 1) answer = divisor;\n }\n return answer;\n}", - "probId": "87389" - }, - { - "id": "-3DC0G3b7HQlRUoXI1xS4", - "author": "prove-ability", - "code": "function solution(n) {\n var answer = 0;\n let i = 0;\n while(true) {\n if(n % i === 1) {\n answer = i;\n break;\n }\n i++;\n }\n return answer;\n}", - "probId": "87389" - }, - { - "id": "eNmzI_I9Cm2Zosmx6ry0u", - "author": "jaewon1676", - "code": "function solution(n) {\n var answer = 0;\n for (let i=1; i x + y * b[i], 0);\n}", - "probId": "70128" - }, - { - "id": "3TpNIAgLL-5u6NTCVTVPt", - "author": "yongchanson", - "code": "function solution(a, b) {\n var answer = 0;\n\n for (i = 0; i < a.length; i++) {\n answer += a[i] * b[i];\n }\n return answer;\n}", - "probId": "70128" - }, - { - "id": "7FaF84IBRAP5M6el6xMzE", - "author": "prove-ability", - "code": "function solution(a, b) {\n var answer = 0;\n\n for (let i = 0, len = a.length; i < len; i++) {\n answer += a[i] * b[i];\n }\n\n return answer;\n}", - "probId": "70128" - }, - { - "id": "H1wPpp1YCjQYNFtS4N5p6", - "author": "jaewon1676", - "code": "function solution(a, b) {\n let answer = 0;\n for (let i=0; i acc + e * b[i], 0);\n}", - "probId": "70128" - }, - { - "id": "u1LRslWaD35sQvv9sq4Ix", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n const answer = [];\n for (let i = 0; i < numbers.length; i++) {\n for (let j = i + 1; j < numbers.length; j++) {\n answer.push(numbers[i] + numbers[j]);\n }\n }\n return [...new Set(answer)].sort((a, b) => a - b);\n}", - "probId": "68644" - }, - { - "id": "ddHM-zBFEziRa-cT5KCbU", - "author": "prove-ability", - "code": "function solution(numbers) {\n const answer = [];\n \n for(let i = 0, len = numbers.length; i < len; i++) {\n for(let j = i + 1, len = numbers.length; j < len; j++) {\n if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j])\n }\n }\n \n return answer.sort((a, b) => a - b);\n}", - "probId": "68644" - }, - { - "id": "cH427BdoJegcnYsf3edFD", - "author": "codeisneverodd", - "code": "function solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}", - "probId": "12912" - }, - { - "id": "rnopZ1is74uXF9AaqtqaK", - "author": "chaerin-dev", - "code": "function solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}", - "probId": "12912" - }, - { - "id": "nESVaMUpCWlxN7XdDjjjE", - "author": "prove-ability", - "code": "function solution(a, b) {\n return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0);\n}", - "probId": "12912" - }, - { - "id": "bV_2v8ALJkaaeWq2X27Py", - "author": "jaewon1676", - "code": "function solution(a, b) {\n if (b < a){ // b가 a보다 큰 수가 되도록 해준다.\n let c = b\n b = a\n a = c\n }\n let sum = 0; // 합을 구할 변수\n for (let i=a; i<=b; i++){\n sum += i\n }\n return sum;\n}", - "probId": "12912" - }, - { - "id": "vefgEjNOZgxFWk82k8HSb", - "author": "codeisneverodd", - "code": "function solution(lottos, win_nums) {\n // 0이 없는 경우 > 최저 순위 == 최고 순위\n // 0이 있는 경우 > 모두 0인경우 > 1위\n // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위\n // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함.\n // 순위는 7 - hit\n // 최종적으로 7위인 경우 6위로 변경\n var answer = [];\n if (lottos.indexOf(0) === -1) {\n answer[0] = answer[1] = 7 - hit(lottos, win_nums);\n } else {\n const zeroCount = lottos.length - [...new Set(lottos)].length + 1;\n answer[1] = 7 - hit(lottos, win_nums);\n zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount);\n }\n for (let i = 0; i < 2; i++) {\n answer[i] >= 7 ? (answer[i] = 6) : null;\n }\n return answer;\n}\n\nfunction hit(lottos, win_nums) {\n let result = 0;\n lottos.forEach((element) => {\n win_nums.indexOf(element) === -1 ? null : (result += 1);\n });\n return result;\n}", - "probId": "77484" - }, - { - "id": "9dpy1EpfSz9k1iArBgumY", - "author": "jaewon1676", - "code": "function solution(lottos, win_nums) {\n var answer = [];\n let max = 7;\n let min = 7;\n console.log(lottos);\n console.log(win_nums);\n for (let i = 0; i < 6; i++) {\n if (lottos.includes(win_nums[i])) {\n max--;\n }\n }\n min = max;\n for (let i = 0; i < 6; i++) {\n if (lottos[i] == 0) min--;\n }\n if (max == 7) max = 6;\n if (min == 7) min = 6;\n answer = [min, max];\n return answer;\n}", - "probId": "77484" - }, - { - "id": "vxbGIckHl0SSCwsKi5pe1", - "author": "yongchanson", - "code": "function solution(lottos, win_nums) {\n //최고당첨개수 : maxPoint + basicPoint\n //최저당첨개수 : basicPoint\n\n let basicPoint = 0;\n let maxPoint = 0;\n let answer = [];\n\n lottos.forEach(function (lottos_item) {\n win_nums.forEach(function (win_nums_item) {\n if (lottos_item == win_nums_item) {\n basicPoint++;\n }\n });\n });\n\n lottos.forEach(function (item) {\n if (item == 0) {\n maxPoint++;\n }\n });\n\n maxPoint + basicPoint >= 2\n ? answer.push(7 - maxPoint - basicPoint)\n : answer.push(6);\n basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6);\n\n return answer;\n}", - "probId": "77484" - }, - { - "id": "EyheSzDORX6Wu8Bei-nL0", - "author": "prove-ability", - "code": "function solution(lottos, win_nums) {\n // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화\n let winCount = 0;\n let zeroCount = 0;\n // 내 로또 번호 하니씩 접근\n lottos.forEach((num) => {\n // 번호가 0이 아니고 당첨 번호라면\n if (num !== 0 && win_nums.includes(num)) {\n winCount++;\n // 번호가 0이라면\n } else if (num === 0) {\n zeroCount++;\n }\n });\n // 일치한 수와 등수는 반비례하기 때문에 빼기 7\n // 이때 등수를 벗어나면 낙첨(6) 으로 고정\n let max = 7 - (winCount + zeroCount);\n if (max > 5) max = 6;\n let min = 7 - winCount;\n if (min > 5) min = 6;\n\n return [max, min];\n}", - "probId": "77484" - }, - { - "id": "qjNmmEmjC9keh1q2piy0p", - "author": "chaerin-dev", - "code": "function solution(lottos, win_nums) {\n let zeroCount = 0;\n let winCount = 0;\n lottos.forEach((item) => {\n if (item === 0) zeroCount++;\n else if (win_nums.includes(item)) winCount++;\n });\n let maxRank = Math.min(7 - (winCount + zeroCount), 6);\n let minRank = Math.min(7 - winCount, 6);\n return [maxRank, minRank];\n}", - "probId": "77484" - }, - { - "id": "jtXAf9CXgcBR0eVal_VcX", - "author": "codeisneverodd", - "code": "function solution(answers) {\n const answer = [];\n const firstPattern = [1, 2, 3, 4, 5];\n const firstPLength = firstPattern.length;\n const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5];\n const secondPLength = secondPattern.length;\n const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n const thirdLength = thirdPattern.length;\n let correctCount = [0, 0, 0];\n\n for (let i = 0, len = answers.length; i < len; i++) {\n if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1;\n if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1;\n if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1;\n }\n\n const maxScore = Math.max(...correctCount);\n for (let i = 0; i < 3; i++) {\n if (correctCount[i] === maxScore) answer.push(i + 1);\n }\n\n return answer;\n}\n\n// 완벽한 정답이 아닙니다.", - "probId": "42840" - }, - { - "id": "hUEeeo5yGROmIsN_jAgdO", - "author": "prove-ability", - "code": "function solution(answers) {\n let result = [];\n\n let players = {\n 1: {\n pattern: [1, 2, 3, 4, 5],\n count: 0,\n },\n 2: {\n pattern: [2, 1, 2, 3, 2, 4, 2, 5],\n count: 0,\n },\n 3: {\n pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],\n count: 0,\n },\n };\n let max = 0;\n answers.forEach((answer, index) => {\n for (let [key, { pattern }] of Object.entries(players)) {\n // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가\n if (pattern[index % pattern.length] === answer) {\n players[key].count++;\n // 제일 높은 count 구하기\n if (max < players[key].count) max = players[key].count;\n }\n }\n });\n // players 중에 count 가 max 와 값이 같다면 result 추가\n for (let [key, { count }] of Object.entries(players)) {\n if (count === max) result.push(parseInt(key, 10));\n }\n\n return result;\n}", - "probId": "42840" - }, - { - "id": "7ocFw-Mfowyrv60oOyoRL", - "author": "yongchanson", - "code": "function solution(answers) {\n let score = [];\n let answer = [];\n let a1 = [1, 2, 3, 4, 5];\n let a2 = [2, 1, 2, 3, 2, 4, 2, 5];\n let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n\n score.push(answers.filter((a, i) => a === a1[i % a1.length]).length);\n score.push(answers.filter((a, i) => a === a2[i % a2.length]).length);\n score.push(answers.filter((a, i) => a === a3[i % a3.length]).length);\n\n for (let i = 0; i < score.length; i++) {\n const max = Math.max(...score);\n if (score[i] === max) {\n answer.push(i + 1);\n }\n }\n\n return answer;\n}", - "probId": "42840" - }, - { - "id": "DsDsHG8XG_QE_c8oxKz0q", - "author": "jaewon1676", - "code": "function solution(answers) {\n let arr1 = [1,2,3,4,5]\n let arr2 = [2,1,2,3,2,4,2,5]\n let arr3 = [3,3,1,1,2,2,4,4,5,5]\n \n let score = [0, 0, 0]\n for (let i=0; i {\n for (let j = 0; j < pattern.length; j++) {\n const patternLength = pattern[j].length;\n if (answer === pattern[j][i % patternLength]) scores[j]++;\n }\n });\n\n const answer = [];\n const maxScore = Math.max(...scores);\n scores.forEach((score, i) => {\n if (score === maxScore) answer.push(i + 1);\n });\n return answer;\n}", - "probId": "42840" - }, - { - "id": "6Xvm3DRqhWlMmXu7pxkMi", - "author": "codeisneverodd", - "code": "function solution(s) {\n const countP = [...s.matchAll(/p/gi)].length;\n const countY = [...s.matchAll(/y/gi)].length;\n return countP === countY;\n}", - "probId": "12916" - }, - { - "id": "gbuN_FBdxM9d3v0pl7f72", - "author": "yongchanson", - "code": "function solution(s) {\n p = s.toLowerCase().split(\"p\").length;\n y = s.toLowerCase().split(\"y\").length;\n\n return p == y ? true : false;\n}", - "probId": "12916" - }, - { - "id": "Wj5GvftUtCNvjbDPeRwyW", - "author": "chaerin-dev", - "code": "function solution(s) {\n let pCount = s.split(/p/i).length - 1;\n let yCount = s.split(/y/i).length - 1;\n return pCount === yCount;\n}\n// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다.\n// Ex. \"ababb\".split(\"a\") 의 결과는 [\"\", \"b\", \"bb\"]\n// => 즉, \"a\"의 갯수는 3에서 1을 뺀 2", - "probId": "12916" - }, - { - "id": "2lh7YnCfgFLvYbiPaXMPY", - "author": "prove-ability", - "code": "function solution(s){\n // 배열로 변환 \n s = s.split(\"\");\n // filter 를 사용해 갯수 추출\n const pCount = s.filter((v) => v === \"p\" || v === \"P\").length;\n const yCount = s.filter((v) => v === \"y\" || v === \"Y\").length;\n return pCount === yCount;\n}", - "probId": "12916" - }, - { - "id": "SuH9zb3QseKwsBlIUvbeb", - "author": "codeisneverodd", - "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n if (a[n] < b[n]) return -1;\n if (a[n] > b[n]) return 1;\n if (a[n] === b[n]) return a < b ? -1 : 1;\n return 0;\n });\n}", - "probId": "12915" - }, - { - "id": "p0UrQpOrzjxTbpCrToefp", - "author": "chaerin-dev", - "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n // 인덱스 n번째 글자를 기준으로 오름차순 정렬\n if (a[n] > b[n]) return 1;\n else if (a[n] < b[n]) return -1;\n // 인덱스 n번째 글자가 같으면 사전순 정렬\n else return a > b ? 1 : -1;\n });\n}", - "probId": "12915" - }, - { - "id": "CZtoJ5hGw6yD6qmcOAxAh", - "author": "prove-ability", - "code": "function solution(strings, n) {\n // 정렬\n strings.sort((a, b) => {\n // n번째 클자가 같다면 사전순\n if(a[n].charCodeAt() === b[n].charCodeAt()) {\n return a > b ? 1 : -1;\n } else return a[n].charCodeAt() - b[n].charCodeAt();\n });\n \n return strings;\n}", - "probId": "12915" - }, - { - "id": "6PBSwqM-7Lxp2uzW3y5Rm", - "author": "codeisneverodd", - "code": "function solution(s) {\n return s\n .split(\"\")\n .sort((a, b) => {\n if (a < b) return 1;\n if (a > b) return -1;\n return 0;\n })\n .join(\"\");\n}", - "probId": "12917" - }, - { - "id": "POlRT_d81WKoMvkOpZLwE", - "author": "chaerin-dev", - "code": "function solution(s) {\n return s.split(\"\").sort((a, b) => (a < b ? 1 : -1)).join(\"\");\n}", - "probId": "12917" - }, - { - "id": "Iht2iJ1-uF8rNDkfvgqA5", - "author": "prove-ability", - "code": "function solution(s) {\n return s.split(\"\").sort().reverse().join(\"\")\n}", - "probId": "12917" - }, - { - "id": "cVAON9iE8SNoeIa0AicHr", - "author": "jaewon1676", - "code": "function solution(s) {\n return s.split('').sort().reverse().join('')\n}\n// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다.\n// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다.\n// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다.", - "probId": "12917" - }, - { - "id": "wOdMGpOtd-sWso4N0zJgS", - "author": "codeisneverodd", - "code": "function solution(s) {\n return s.search(/\\D/g) < 0 && (s.length === 4 || s.length === 6);\n}", - "probId": "12918" - }, - { - "id": "BC2iVdtTid2DmUfOWJ_Wx", - "author": "yongchanson", - "code": "function solution(s) {\n let parseInts = parseInt(s);\n if (s.length == 6 || s.length == 4) {\n if (s == parseInts) {\n return true;\n }\n }\n\n return false;\n}", - "probId": "12918" - }, - { - "id": "BLMS81Kd_3ESK6sJRDBv6", - "author": "prove-ability", - "code": "function solution(s) {\n var answer = true;\n // 문자열 s의 길이가 4 혹은 6이고\n if (s.length === 4 || s.length === 6) {\n for (let i = 0, len = s.length; i < len; i++) {\n // 숫자로만 구성돼있는지 확인\n if (!Number.isInteger(parseInt(s[i], 10))) return false;\n }\n // 문자열 s의 길이가 4 혹은 6 가 아니라면 false\n } else return false;\n\n return answer;\n}", - "probId": "12918" - }, - { - "id": "KdFwqPsbkbeC2sry1YlLP", - "author": "chaerin-dev", - "code": "function solution(s) {\n // 길이가 4 혹은 6이 아니면 false 반환\n if (s.length !== 4 && s.length !== 6) return false;\n // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환\n for (let i = 0; i < s.length; i++) {\n if (isNaN(Number(s[i]))) return false;\n }\n // 위의 모든 조건에 포함되지 않으면\n // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환\n return true;\n}", - "probId": "12918" - }, - { - "id": "8bAMLCGHJsEdyy4w-3wqv", - "author": "soulhn", - "code": "function solution(s) {\n if (s.length !== 4 && s.length !== 6) return false;\n return !s.split(\"\").some((i) => isNaN(parseInt(i, 10))); \n //early return 제외사항 먼저 처리\n //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환\n}", - "probId": "12918" - }, - { - "id": "-D40QnsIG0MSdP2ddCzTM", - "author": "codeisneverodd", - "code": "function solution(s) {\n return parseInt(s);\n}", - "probId": "12925" - }, - { - "id": "M_pnjlqwOE1iXMlP8Sana", - "author": "chaerin-dev", - "code": "function solution(s) {\n return Number(s);\n}", - "probId": "12925" - }, - { - "id": "dcT3fiZrYG9B2fTtKBoYS", - "author": "prove-ability", - "code": "function solution(s) {\n return parseInt(s, 10);\n}", - "probId": "12925" - }, - { - "id": "CUOqDr4YB132Z2jleOMM3", - "author": "jaewon1676", - "code": "function solution(s) {\n return parseInt(s);\n}", - "probId": "12925" - }, - { - "id": "YkiXJ0xsbRd1Coc5zUSFB", - "author": "codeisneverodd", - "code": "function solution(price, money, count) {\n let totalCost = 0;\n for (let i = 1; i <= count; i++) totalCost += price * i;\n return totalCost <= money ? 0 : totalCost - money;\n}", - "probId": "82612" - }, - { - "id": "uezZoEz0m8hdOIR3BleHq", - "author": "yongchanson", - "code": "function solution(price, money, count) {\n var answer = 0;\n let sum = price;\n\n for (i = 2; i <= count; i++) {\n sum += price * i;\n }\n\n if (sum <= money) {\n answer = 0;\n } else {\n answer = sum - money;\n }\n return answer;\n}", - "probId": "82612" - }, - { - "id": "jPwA0bbofjNFRXr-RZahv", - "author": "jaewon1676", - "code": "function solution(price, money, count) {\n let sum_price = 0; // 놀이기구의 이용료의 합\n for (let i = 1; i <= count; i++) {\n sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다.\n }\n if (sum_price <= money) {\n return 0;\n }\n return sum_price - money;\n}", - "probId": "82612" - }, - { - "id": "wgyHIm0C7_YgaxjJ_BNSm", - "author": "prove-ability", - "code": "function solution(price, money, count) {\n let sum = 0;\n for(let i = 1; i <= count; i++) {\n sum += (i * price)\n }\n \n return sum < money ? 0 : sum - money;\n}", - "probId": "82612" - }, - { - "id": "15io-kgHZyB9UaD1R45X3", - "author": "chaerin-dev", - "code": "function solution(price, money, count) {\n let totalPrice = 0;\n for(let i=1; i<=count; i++){\n totalPrice += i * price;\n }\n return money > totalPrice ? 0 : totalPrice-money;\n}", - "probId": "82612" - }, - { - "id": "MAqIJ3oD3esA37-hZPA7q", - "author": "codeisneverodd", - "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}", - "probId": "12919" - }, - { - "id": "1P_8CD3TNq6Oyz3OfshfI", - "author": "chaerin-dev", - "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}", - "probId": "12919" - }, - { - "id": "iPAbSgoCkYxzQbOgEYUbE", - "author": "prove-ability", - "code": "function solution(seoul) {\n return `김서방은 ${seoul.findIndex(v => v === \"Kim\")}에 있다`;\n}", - "probId": "12919" - }, - { - "id": "9gGGQN_CRMDg_SQ5OviA1", - "author": "jaewon1676", - "code": "function solution(seoul) {\n var answer = '';\n for (let i=0; i<1000; i++){\n if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다';\n }\n return 1;\n}", - "probId": "12919" - }, - { - "id": "8NK6j6prhKmavr0TqA-Hz", - "author": "ssi02014", - "code": "function solution(survey, choices) {\n const points = [3, 2, 1, 0, 1, 2, 3];\n const pointBoard = {\n R: 0,\n T: 0,\n C: 0,\n F: 0,\n J: 0,\n M: 0,\n A: 0,\n N: 0,\n };\n let result = \"\";\n\n // 카테고리 별 점수 추가\n for (let i = 0; i < survey.length; i++) {\n const categories = survey[i];\n\n if (choices[i] < 4) {\n pointBoard[categories[0]] += points[choices[i] - 1];\n } else if (choices[i] > 4) {\n pointBoard[categories[1]] += points[choices[i] - 1];\n }\n }\n\n const pointBoardEntries = Object.entries(pointBoard);\n\n // 지표에 맞게 결과 값 도출\n for (let i = 0; i < pointBoardEntries.length; i += 2) {\n const [curCategory, curValue] = pointBoardEntries[i];\n const [nextCategory, nextValue] = pointBoardEntries[i + 1];\n\n if (curValue < nextValue) {\n result += nextCategory;\n } else {\n result += curCategory;\n }\n }\n\n return result;\n}", - "probId": "118666" - }, - { - "id": "gdUf_Jv4tbVVoSAxLASPS", - "author": "codeisneverodd", - "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {});\n survey.forEach((key, i) => {\n const point = points[choices[i] - 1];\n Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point);\n });\n return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join('');\n}", - "probId": "118666" - }, - { - "id": "SNdoQ8Qv9dEeLfLK-anbF", - "author": "codisneverodd", - "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = survey.reduce((a, key, i) => {\n if (types.includes(key)) {\n a[key] = (a[key] || 0) + points[choices[i] - 1];\n return a;\n }\n const rKey = key[1] + key[0];\n a[rKey] = (a[rKey] || 0) - points[choices[i] - 1];\n return a;\n }, {});\n return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join('');\n}", - "probId": "118666" - }, - { - "id": "XyOCnoh_VlUDGSpg85iyg", - "author": "codeisneverodd", - "code": "function solution(nums) {\n let answer = 0;\n const length = nums.length;\n for (let i = 0; i < length; i++) {\n for (let j = i + 1; j < length; j++) {\n for (let k = j + 1; k < length; k++) {\n const sum = nums[i] + nums[j] + nums[k];\n if (isPrime(sum)) answer += 1;\n }\n }\n }\n\n return answer;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}", - "probId": "12977" - }, - { - "id": "0Y_IqC7PEiVWAJcr2duZH", - "author": "jaewon1676", - "code": "// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript\n\nfunction solution(nums) {\n let len = nums.length, answer = 0;\n\n for (let i = 0; i < len - 2; i++) {\n for (let j = i + 1; j < len - 1; j++) {\n for (let k = j + 1; k < len; k++) {\n if (isPrime(nums[i] + nums[j] + nums[k])) {\n answer++;\n }\n }\n }\n }\n return answer;\n}\n\nconst isPrime = (n) => {\n for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회\n if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다.\n return false;\n }\n }\n return true;\n}\n// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다.", - "probId": "12977" - }, - { - "id": "AZXA7k-ElkZZLut4wG3KN", - "author": "chaerin-dev", - "code": "// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수\nconst getCombinations = function (arr, selectNumber) {\n const results = [];\n if (selectNumber === 1) return arr.map((el) => [el]);\n arr.forEach((fixed, index, origin) => {\n const rest = origin.slice(index + 1);\n const combinations = getCombinations(rest, selectNumber - 1);\n const attached = combinations.map((el) => [fixed, ...el]);\n results.push(...attached);\n });\n return results;\n};\n\n// num이 소수인지 여부를 반환하는 함수\nfunction isPrime(num) {\n if (num === 1) return false;\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(nums) {\n const combinationResult = getCombinations(nums, 3);\n let answer = 0;\n combinationResult.forEach((e) => {\n const sum = e[0] + e[1] + e[2];\n if (isPrime(sum)) answer++;\n });\n return answer;\n}", - "probId": "12977" - }, - { - "id": "WdPutYJKYWwobpw3iHgTs", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n let answer = 0;\n const numArr = numbers.split(\"\");\n const permutationAll = [];\n for (let r = 1; r <= numbers.length; r++) {\n const permutationR = Permutation(numArr, r).map((arr) =>\n parseInt(arr.join(\"\"))\n );\n for (let i = 0; i < permutationR.length; i++)\n permutationAll.push(permutationR[i]);\n }\n const permutationSet = [...new Set(permutationAll)];\n for (const number of permutationSet) {\n if (isPrime(number)) answer += 1;\n }\n return answer;\n}\n\nfunction Permutation(arr, r) {\n const result = [];\n if (r === 1) return arr.map((num) => [num]);\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)];\n const permutation = Permutation(rest, r - 1);\n const attached = permutation.map((numbers) => [fixed, ...numbers]);\n result.push(...attached);\n });\n return result;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}", - "probId": "42839" - }, - { - "id": "OLNhvIEzDa8VDxOEZYrAe", - "author": "chaerin-dev", - "code": "// 소수인지 판별하는 함수\nfunction isPrime(x) {\n for (let i = 2; i <= Math.sqrt(x); i++) {\n if (x % i === 0) return false;\n }\n return true;\n}\nfunction solution(n) {\n // 소수의 개수를 저장할 변수\n let answer = 0;\n // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해\n for (let i = 2; i <= n; i++) {\n // 소수이면 소수의 개수에 1 추가\n if (isPrime(i)) answer++;\n }\n return answer;\n}", - "probId": "42839" - }, - { - "id": "GjmTbgvxQwThs5ZSSlu57", - "author": "prove-ability", - "code": "// 소수 판별 로직\nfunction isPrime(n) {\n // n 제곱근 후 올림\n for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) {\n if (n % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(n) {\n let count = 0;\n // 1부터 n까지 반복적으로 접근 - i\n for(let i = 1; i <= n; i++) {\n // i 가 소수인지 확인 후 count++\n if(isPrime(i)) count++;\n }\n \n return count;\n}", - "probId": "42839" - }, - { - "id": "Q1xifF9kpxsX8VQ9MO2tf", - "author": "jaewon1676", - "code": "function solution(n) {\n let arr = [];\n \n // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다.\n for(let i=2; i<=n; i++) {\n arr[i] = i;\n }\n for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다.\n if (arr[i] === 0) continue;\n \n for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다.\n arr[j] = 0;\n }\n }\n \n // filter를 이용해 0이아닌 수들의 개수를 return합니다.\n return arr.filter(v => v!==0).length;\n}", - "probId": "42839" - }, - { - "id": "QOF52m3MtLWnpsPMNKXFq", - "author": "codeisneverodd", - "code": "function solution(n) {\n let answer = '';\n for (let i = 0; i < n; i++) {\n answer += i % 2 === 0 ? '수' : '박';\n }\n return answer;\n}", - "probId": "12922" - }, - { - "id": "xOlxwtmGiP8gpAtX9Pmib", - "author": "chaerin-dev", - "code": "function solution(n) {\n // \"수박\"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환\n return '수박'.repeat(n).substr(0, n);\n}", - "probId": "12922" - }, - { - "id": "9vmmj9sEOyC5yP6s7Zlmy", - "author": "jaewon1676", - "code": "function solution(n) {\n let str = '';\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + '수') : (str = str + '박');\n }\n return str;\n}", - "probId": "12922" - }, - { - "id": "A09IQBDRCEQUKyJ8CzA5B", - "author": "prove-ability", - "code": "function solution(n) {\n let answer = '';\n answer = '수박'.repeat(n / 2);\n if (n % 2 !== 0) answer += '수';\n return answer;\n}", - "probId": "12922" - }, - { - "id": "LoyVegy_UkD2gDWIgfKpp", - "author": "yongchanson", - "code": "function solution(n) {\n return '수박'.repeat(n / 2) + '수'.repeat(n % 2);\n}", - "probId": "12922" - }, - { - "id": "BoOyjfNuDV4C8MS9ly_nQ", - "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = 0;\n let answerString = s;\n const stringToNum = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n for (let i = 0; i < 10; i++) {\n const regex = new RegExp(stringToNum[i], \"g\");\n answerString = answerString.replace(regex, i);\n }\n answer = Number(answerString);\n return answer;\n}", - "probId": "81301" - }, - { - "id": "Vy5CLKCPikelKFvcoMVIR", - "author": "jaewon1676", - "code": "function solution(s) {\n let answer = 0;\n\n s = s.replace(/zero/g, 0);\n s = s.replace(/one/g, 1);\n s = s.replace(/two/g, 2);\n s = s.replace(/three/g, 3);\n s = s.replace(/four/g, 4);\n s = s.replace(/five/g, 5);\n s = s.replace(/six/g, 6);\n s = s.replace(/seven/g, 7);\n s = s.replace(/eight/g, 8);\n s = s.replace(/nine/g, 9);\n\n answer = Number(s);\n return answer;\n}", - "probId": "81301" - }, - { - "id": "5LyTD1YgWMMQWNwVetWEz", - "author": "chaerin-dev", - "code": "function solution(s) {\n s = s\n .replace(/zero/g, 0)\n .replace(/one/g, 1)\n .replace(/two/g, 2)\n .replace(/three/g, 3)\n .replace(/four/g, 4)\n .replace(/five/g, 5)\n .replace(/six/g, 6)\n .replace(/seven/g, 7)\n .replace(/eight/g, 8)\n .replace(/nine/g, 9);\n return parseInt(s);\n}", - "probId": "81301" - }, - { - "id": "ESsEfG25v4htTMfsWv6GX", - "author": "yongchanson", - "code": "function solution(s) {\n let en = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n\n for (let i = 0; i < s.length * 2; i++) {\n let p = i % en.length;\n s = s.replace(en[p], p);\n }\n return Number(s);\n}", - "probId": "81301" - }, - { - "id": "Qz0Q4RxbD0ag_v-SZSnam", - "author": "ssi02014", - "code": "/**\n * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화\n * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 \n * (테스트 케이스 11 ~ 15 100ms~200ms 차이)\n */\nfunction solution(X, Y) {\n const commons = [];\n const obj = {};\n\n for (const el of X) {\n obj[el] = (obj[el] || 0) + 1;\n }\n\n for (const el of Y) {\n if (obj[el]) {\n commons.push(el);\n obj[el]--;\n }\n }\n\n commons.sort((a, b) => b - a);\n\n if (!commons.length) return \"-1\";\n else if (commons[0] === \"0\") return \"0\";\n return commons.join(\"\");\n}", - "probId": "131128" - }, - { - "id": "BDzXjTTuWa38KvnMviYyT", - "author": "codeisneverodd", - "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((element) => {\n if (element === \" \") return \" \";\n const code = element.charCodeAt(0);\n if ((code + n > 90 && code <= 90) || code + n > 122) {\n return String.fromCharCode(code + n - 26);\n } else {\n return String.fromCharCode(code + n);\n }\n })\n .join(\"\");\n}", - "probId": "12926" - }, - { - "id": "-oLnMXLaSmkk5goDvoMio", - "author": "jaewon1676", - "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((el) => {\n if (el == \" \") return el;\n let tmp = el.charCodeAt();\n return el.toLowerCase().charCodeAt() + n > 122\n ? String.fromCharCode(tmp + n - 26)\n : String.fromCharCode(tmp + n);\n })\n .join(\"\");\n}\n\n/* 문자열 -> 아스키코드 : s.charCodeAt()\n아스키코드 -> 문자열 : String.fromCharCode() \n풀이과정 \n1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다.\n2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. \n 대문자 아스키코드는 65가 A, 90이 Z이다.\n 소문자 아스키코드는 97이 a, 122가 z이다.\n3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고\n 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다.\n*/", - "probId": "12926" - }, - { - "id": "aAt0_J8gPPDdzILK3hinK", - "author": "chaerin-dev", - "code": "function solution(s, n) {\n let result = \"\";\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") result += \" \";\n else {\n let charCode = s.charCodeAt(i);\n // 원래 대문자였는데\n if (charCode <= 90) {\n charCode += n;\n // 변경 후 아스키코드값이 90보다 크다면\n if (charCode > 90) charCode -= 26;\n }\n // 원래 소문자였는데\n else {\n charCode += n;\n // 변경 후 아스키코드값이 122보다 크다면\n if (charCode > 122) charCode -= 26;\n }\n result += String.fromCharCode(charCode);\n }\n }\n return result;\n}", - "probId": "12926" - }, - { - "id": "42ZMqrfDapgsuTtfl5Cwk", - "author": "prove-ability", - "code": "function solution(s, n) {\n var answer = '';\n for(let i = 0, len = s.length; i < len; i++) {\n if(s[i] === \" \") {\n answer += \" \";\n continue;\n }\n let index = s[i].charCodeAt();\n // 65 - 90\n // 97 - 122\n if(index <= 90 && index + n > 90) index -= 26; \n else if (index + n > 122) index -= 26;\n \n answer += String.fromCharCode(index + n)\n }\n return answer;\n}", - "probId": "12926" - }, - { - "id": "_yXWsJOpZC1ik98YSVuJn", - "author": "jaewon1676", - "code": "function solution(id_list, report, k) {\n let answer = new Array(id_list.length).fill(0);\n let report_list = {}; // 신고당한 ID\n\n // key, value 형식의 report_list 객체를 만든다.\n id_list.map(user => {\n report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체\n });\n // report_list { muzi: [], frodo: [], apeach: [], neo: [] }\n\n // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다.\n report.map(user => {\n const [user_id, report_id] = user.split(' ');\n // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다.\n if (!report_list[report_id].includes(user_id)) {\n report_list[report_id].push(user_id);\n // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다.\n }\n });\n for (const key in report_list) {\n // report_list의 index 순회\n if (report_list[key].length >= k) {\n report_list[key].map(user => {\n answer[id_list.indexOf(user)] += 1;\n });\n }\n }\n return answer;\n}", - "probId": "92334" - }, - { - "id": "lhGPDTCRYBPDF1CqjNwlA", - "author": "prove-ability", - "code": "function solution(id_list, report, k) {\n // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기\n var answer = Array.from({ length: id_list.length }).fill(0);\n // 신고 내용 객체 초기화 - 신고된 내용 정리\n const reportObj = {};\n // 신고건 반복문으로 하나씩 접근\n for (let i = 0, len = report.length; i < len; i++) {\n const [userId, reportUserId] = report[i].split(' ');\n // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가\n if (reportObj[reportUserId]) {\n if (!reportObj[reportUserId].includes(userId)) {\n reportObj[reportUserId] = [...reportObj[reportUserId], userId];\n }\n // 신고 내용 객체에 신고당한 사람이 없다면 추가\n } else reportObj[reportUserId] = [userId];\n }\n // 만들어진 신고 내용 객체로 반복적으로 접근\n for (const item of Object.values(reportObj)\n .filter(v => v.length >= k)\n .flatMap(v => v)) {\n // 인덱스로 접근해 메일 카운트 증가\n const index = id_list.findIndex(v => v === item);\n answer[index]++;\n }\n\n return answer;\n}", - "probId": "92334" - }, - { - "id": "XsnehvD59CuxJGJpkkWCv", - "author": "chaerin-dev", - "code": "function solution(id_list, report, k) {\n // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리\n let set = new Set(report);\n report = Array.from(set);\n\n // 1. report를 2차원배열로 변형\n // 2. 각 유저가 신고당한 횟수 cnt에 저장\n // 3. 각 유저를 신고한 유저 who에 저장\n let cnt = Array.from({ length: id_list.length }, i => 0);\n let who = Array.from({ length: id_list.length }, i => []);\n for (let i = 0; i < report.length; i++) {\n report[i] = report[i].split(' ');\n cnt[id_list.indexOf(report[i][1])]++;\n who[id_list.indexOf(report[i][1])].push(report[i][0]);\n }\n\n // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장\n let mail = Array.from({ length: id_list.length }, i => 0);\n for (let i = 0; i < cnt.length; i++) {\n if (cnt[i] < k) continue;\n for (let j = 0; j < who[i].length; j++) {\n mail[id_list.indexOf(who[i][j])]++;\n }\n }\n return mail;\n}", - "probId": "92334" - }, - { - "id": "knELcZfUST9z1eYKpIttU", - "author": "codeisneverodd", - "code": "function solution(id_list, report, k) {\n //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장,\n //각 id를 신고한 사람 array를 reportedBy에 저장,\n //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장\n //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장.\n const reportSet = new Set(report);\n const reportedCount = {}; //{\"id\": Number(count)}\n const reportedBy = {}; //{\"id\":[]}\n const mailCount = {}; //{\"id\":Number(count)}\n\n id_list.forEach(element => {\n reportedCount[element] = 0;\n mailCount[element] = 0;\n reportedBy[element] = [];\n });\n\n reportSet.forEach(element => {\n const [id, reported] = element.split(' ');\n reportedCount[reported] += 1;\n reportedBy[reported].push(id);\n });\n\n for (const reportedId in reportedCount) {\n if (reportedCount[reportedId] >= k) {\n reportedBy[reportedId].forEach(reporter => {\n mailCount[reporter] += 1;\n });\n }\n }\n return id_list.map(id => mailCount[id]);\n}", - "probId": "92334" - }, - { - "id": "_SiX4wl7bHj68YYVp_Phb", - "author": "jaewon1676", - "code": "function solution(new_id) {\n // 1 소문자로 치환\n let answer = new_id\n .toLowerCase()\n\n // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거.\n .replace(/[^a-z0-9-_.]/gi, '')\n\n // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환\n .replace(/[.]{2,}/gi, '.')\n\n // 4 마침표(.)가 처음이나 끝에 위치하면 제거\n .replace(/^[.]|[.]$/gi, '');\n\n // 5 빈 문자열이면 a 대입\n if (answer === '') answer = 'a';\n\n // 6 length > 15이면 그 뒤의 문자들은 제거\n if (answer.length > 15) {\n answer = answer.substring(0, 15);\n // 마침표(.)가 끝에 위치하면 마침표(.)제거\n answer = answer.replace(/[.]$/gi, '');\n }\n\n // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임\n while (answer.length < 3) {\n answer += answer[answer.length - 1];\n }\n return answer;\n}", - "probId": "72410" - }, - { - "id": "AMOMEz2Bz_Pt5jgvmesYA", - "author": "chaerin-dev", - "code": "function solution(new_id) {\n // 1단계: 모든 대문자를 소문자로\n new_id = new_id.toLowerCase();\n\n // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거\n new_id = new_id.replace(/[^\\w\\-\\.]/g, '');\n\n // 3단계: 연속되는 마침표는 마침표 하나로\n new_id = new_id.replace(/\\.{2,}/g, '.');\n\n // 4단계: 처음이나 끝에 마침표가 있으면 제거\n new_id = new_id.replace(/^\\.|\\.$/, '');\n\n // 5단계: new_id가 빈 문자열이면 \"a\" 대입\n if (new_id.length === 0) new_id = 'a';\n\n // 6단계: new_id의 길이가 16자 이상이면,\n // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거\n // 제거 후 끝에 마침표가 있으면 제거\n if (new_id.length >= 16) new_id = new_id.slice(0, 15);\n new_id = new_id.replace(/\\.$/, '');\n\n // 7단계: new_id의 길이가 2자 이하이면,\n // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임\n let len = new_id.length;\n if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len);\n\n return new_id;\n}", - "probId": "72410" - }, - { - "id": "jegWLXnzaexxLDEtxqlR-", - "author": "codeisneverodd", - "code": "function solution(new_id) {\n let answer = new_id\n .toLowerCase() //step 1\n .replace(/[^0-9a-z._-]/g, '') // step 2\n .replace(/\\.+/g, '.') //step 3\n .replace(/^\\.|\\.$/g, '') //step 4\n .replace(/^$/, 'a') //step 5\n .slice(0, 15)\n .replace(/\\.$/, ''); //step 6\n // step7\n if (answer.length === 1) answer = answer[0].repeat(3);\n if (answer.length === 2) answer = answer + answer[1];\n\n return answer;\n}", - "probId": "72410" - }, - { - "id": "VboAgE1t6rbLqLDBcavKA", - "author": "codeisneverodd", - "code": "function solution(N, stages) {\n var answer = [];\n let failRate = new Array(N + 2).fill(0);\n let playerChallenging = new Array(N + 2).fill(0);\n let playerReached = new Array(N + 2).fill(0);\n\n for (const stage of stages) {\n for (let i = 1; i <= stage; i++) playerReached[i] += 1;\n playerChallenging[stage] += 1;\n }\n for (let i = 1; i <= N + 1; i++)\n failRate[i] =\n playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i];\n const rateNIndex = failRate\n .slice(1, N + 1)\n .map((rate, stage) => [rate, stage + 1]);\n const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]);\n answer = sortedRate.map((stage) => stage[1]);\n return answer;\n}", - "probId": "42889" - }, - { - "id": "3u-cQ1Lt_RmNzog8GKI8O", - "author": "jaewon1676", - "code": "function solution(N, stages) {\n let map = Array.from(Array(N), () => Array(2).fill(0));\n let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수\n let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율\n let count = 0;\n\n stages.sort(function (a, b) {\n return a - b;\n }); // 난이도 오름차순 정렬\n for (let i = 1; i <= N; i++) {\n while (1) {\n // i 스테이지의 실패율 계산\n if (stages[0] == i) {\n answer[i - 1] += 1;\n count += 1;\n stages.shift();\n } else break;\n }\n rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산\n\n count = 0;\n\n map[i - 1][0] = i;\n map[i - 1][1] = rate[i - 1];\n }\n map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬\n let stack = []; // 답\n for (let i = 0; i < map.length; i++) {\n stack.push(map[i][0]);\n }\n\n return stack;\n}\n\n/* 풀이 과정\n1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다.\n2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다.\n3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서.\n4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다.\n*/", - "probId": "42889" - }, - { - "id": "Av6X7HBEZTken-98C8aB2", - "author": "codeisneverodd", - "code": "function solution(left, right) {\n var answer = 0;\n for (let num = left; num <= right; num++) {\n divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num);\n }\n return answer;\n}\n\nconst divisorCounter = (num) => {\n let count = 0;\n const sqrt = Math.sqrt(num);\n for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1;\n return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2;\n};", - "probId": "77884" - }, - { - "id": "GI7q65ilfJZ8ur-KW253Z", - "author": "jaewon1676", - "code": "function solution(left, right) {\n var answer = 0;\n\n for (left; left <= right; left++) {\n // left의 제곱근이 정수면 약수의 개수는 홀수\n if (Number.isInteger(Math.sqrt(left))) {\n answer -= left;\n } else {\n answer += left;\n }\n }\n return answer;\n}", - "probId": "77884" - }, - { - "id": "WuWuhvRMVKJvMcnEbwQ8_", - "author": "prove-bility", - "code": "function getDivisorCount(i) {\n let count = 0;\n for(let j = 1; j <= i; j++) {\n if(i % j === 0) count++;\n }\n return count;\n}\n\nfunction solution(left, right) {\n let answer = 0;\n for(let i = left; i <= right; i++) {\n let count = getDivisorCount(i);\n if(count % 2 === 0) answer += i;\n else answer -= i;\n }\n return answer;\n}", - "probId": "77884" - }, - { - "id": "yObJuA3KwklreVRYLDiiu", - "author": "codeisneverodd", - "code": "function solution(n) {\n let answer = 0;\n for (let divisor = 1; divisor <= n; divisor++) {\n if (n % divisor === 0) answer += divisor;\n }\n return answer;\n}", - "probId": "12928" - }, - { - "id": "9z7gNX26mVynww375frEd", - "author": "yongchanson", - "code": "function solution(n) {\n var answer = 0;\n let i;\n for (i = 1; i <= Math.sqrt(n); i++) {\n if (n % i == 0) {\n if (i * i == n) {\n //i의 제곱이 n인경우 처리\n answer += i;\n } else {\n answer += i;\n answer += n / i;\n }\n }\n }\n\n return answer;\n}", - "probId": "12928" - }, - { - "id": "Kb-Ud8hRFj3VntSJaRD_k", - "author": "chaerin-dev", - "code": "function solution(n) {\n let result = 0;\n let sqrtN = Math.sqrt(n);\n // 효율성을 위해 1부터 n의 제곱근-1까지만 순회\n for (let i = 1; i < sqrtN; i++) {\n if (n % i === 0) result += i + n / i;\n }\n // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌\n if (Number.isInteger(sqrtN)) result += sqrtN;\n return result;\n}", - "probId": "12928" - }, - { - "id": "2hHCkl2LHLmbNCTMwzQvw", - "author": "jaewon1676", - "code": "function solution(n) {\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n if (n % i == 0) {\n // n으로 i를 나눴을 때, 나머지가 0이면 약수이다.\n answer += i;\n }\n }\n return answer;\n}\n\n// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다.\n// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다.\n// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다.", - "probId": "12928" - }, - { - "id": "Wzs2YemubD5fFV8975Cl3", - "author": "prove-ability", - "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n if(n % i === 0) answer += i;\n }\n return answer;\n}", - "probId": "12928" - }, - { - "id": "qQLomQYYyEENnJPItTH7h", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n var answer = 0;\n for (let i = 0; i < 10; i++) {\n answer += numbers.includes(i) ? 0 : i;\n }\n return answer;\n}", - "probId": "86051" - }, - { - "id": "abMRRy_N5Od0L1J1Fk2cH", - "author": "yongchanson", - "code": "function solution(numbers) {\n var answer = -1;\n\n let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let arr_sum = 0;\n let numbers_sum = 0;\n\n for (i = 0; i < arr.length / 2; i++) {\n if (arr[i] == arr[arr.length - 1 - i]) {\n arr_sum += arr[i];\n } else {\n arr_sum += arr[i] + arr[arr.length - 1 - i];\n }\n }\n\n for (i = 0; i < numbers.length; i++) {\n numbers_sum += numbers[i];\n }\n\n answer = arr_sum - numbers_sum;\n return answer;\n}", - "probId": "86051" - }, - { - "id": "7PooMLPnF3FELewxRVqp9", - "author": "prove-ability", - "code": "function solution(numbers) {\n var answer = 0;\n\n for (let i = 0; i < 10; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n\n return answer;\n}", - "probId": "86051" - }, - { - "id": "yMhu_QGJsXeqlaCo1qG5K", - "author": "chaerin-dev", - "code": "function solution(numbers) {\n let answer = 0;\n for (let i = 0; i <= 9; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n return answer;\n}", - "probId": "86051" - }, - { - "id": "lVSmCdDTM8cUCindwlS8g", - "author": "codeisneverodd", - "code": "function solution(d, budget) {\n let answer = 0;\n d.sort((a, b) => a - b);\n for (const department of d) {\n if (budget < department) break;\n answer += 1;\n budget -= department;\n }\n return answer;\n}", - "probId": "12982" - }, - { - "id": "qXusM8NX60lzwocrZm8pZ", - "author": "prove-ability", - "code": "function solution(d, budget) {\n let sum = 0;\n let count = 0;\n // 오름차순 정렬\n d.sort((a, b) => a - b);\n for(let i = 0, len = d.length; i < len; i++) {\n // 작은 수 부터 하나씩 더해준다\n sum += d[i];\n // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환\n if(sum > budget) return count;\n count++;\n }\n \n return count;\n}", - "probId": "12982" - }, - { - "id": "wGoMl70jO-ZfwphOxu9il", - "author": "jaewon1676", - "code": "function solution(d, budget) {\n let count = 0; // 최대 물품 지원 할 수 있는 부서 수 \n d.sort((a, b) => a - b) // 오름차순 정렬\n for (let i=0; i (v === participant[i] ? a + 1 : a),\n 0\n );\n // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면\n // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다\n if (count > 1 && max < count) {\n answer = participant[i];\n // 조건에 맞는 동명이인 수 저장\n max = count;\n }\n }\n return answer;\n}\n\n//완벽한 정답이 아닙니다.", - "probId": "42576" - }, - { - "id": "iYWX53fSR9dGhM_f2iKhP", - "author": "chaerin-dev", - "code": "function solution(participant, completion) {\n var answer = \"\";\n // 두 배열을 정렬한다!\n participant.sort();\n completion.sort();\n // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!!\n // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로\n // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만\n // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음!\n for (let i = 0; i < participant.length; i++) {\n if (participant[i] != completion[i]) {\n answer = participant[i];\n break;\n }\n }\n return answer;\n}", - "probId": "42576" - }, - { - "id": "mK5dnWttxK4bzZaDoen7x", - "author": "codeisneverodd", - "code": "function solution(absolutes, signs) {\n return absolutes.reduce(\n (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1),\n 0\n );\n}", - "probId": "76501" - }, - { - "id": "oafF4T4y5vl4OcYBuzMlM", - "author": "codeisneverod", - "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (let i = 0; i < absolutes.length; i++) {\n answer += signs[i] ? absolutes[i] : -1 * absolutes[i];\n }\n return answer;\n}", - "probId": "76501" - }, - { - "id": "PHxsJEC41hkuqLR9jZfLB", - "author": "jaewon1676", - "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (var i = 0; i < absolutes.length; i++) {\n if (signs[i] === false) {\n answer = answer - absolutes[i];\n } else {\n answer = answer + absolutes[i];\n }\n }\n\n return answer;\n}", - "probId": "76501" - }, - { - "id": "VavYZ0Yo3L_kfJjz4Imum", - "author": "prove-ability", - "code": "function solution(absolutes, signs) {\n let answer = 0;\n absolutes.forEach((absolute, i) => {\n if(!signs[i]) absolute *= -1;\n answer += absolute;\n })\n return answer;\n}", - "probId": "76501" - }, - { - "id": "xoDbdrm9SYhSQjb_f4FPY", - "author": "chaerin-dev", - "code": "function solution(absolutes, signs) {\n // 연산 결과를 저장할 변수\n let result = 0;\n // signs의 각 요소에 대해\n signs.forEach((e, i) => {\n // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌\n if (e) result += absolutes[i];\n // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌\n else result -= absolutes[i];\n });\n // result 반환\n return result;\n}", - "probId": "76501" - }, - { - "id": "klP9xJHjOoo88wPJGPL_U", - "author": "codeisneverodd", - "code": "function solution(s) {\n return s\n .split(\" \")\n .map((word) =>\n word\n .split(\"\")\n .map((char, index) =>\n index % 2 === 0\n ? word[index].toUpperCase()\n : word[index].toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}", - "probId": "12930" - }, - { - "id": "ghWDHDJDoQyhuF6qDhi7i", - "author": "chaerin-dev", - "code": "// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..!\nfunction solution(s) {\n let result = \"\";\n let flag = true;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") {\n flag = false;\n result += s[i];\n } else if (flag) {\n result += s[i].toUpperCase();\n } else {\n result += s[i].toLowerCase();\n }\n flag = !flag;\n }\n return result;\n}", - "probId": "12930" - }, - { - "id": "l3wUBAT9KqGlEv-l3000E", - "author": "jaewon1676", - "code": "function solution(s) {\n return s\n .split(\" \")\n .map((el) =>\n el\n .split(\"\")\n .map((el, index) =>\n index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}\n\n/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ]\n \n.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 \n[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]]\n \n.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase())\n//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다!\n//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다.\n[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]]\n \n.join('') 작은 배열들을 합쳐줍니다.\n['TrY', 'HeLlO', 'WoRlD']\n \n.join(' ') 큰 배열들을 합쳐줍니다.\n\"TrY HeLlO WoRlD\"\n\n대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 \n문자열을 연습하는데 좋은 문제입니다.\n*/", - "probId": "12930" - }, - { - "id": "7pKivSXqs3zO0lOkISP4s", - "author": "prove-ability", - "code": "function solution(s) {\n let answer = '';\n s.split(\" \").forEach((word) => {\n for(let i = 0, len = word.length; i < len; i++) {\n if(i % 2 === 0) answer+=word[i].toUpperCase();\n else answer+=word[i].toLowerCase();\n }\n answer += \" \";\n })\n answer = answer.slice(0, answer.length - 1)\n return answer;\n}", - "probId": "12930" - }, - { - "id": "KsHkHFSHZ5_q5H0lT4TCm", - "author": "codeisneverodd", - "code": "function solution(n) {\n return n\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr, 0);\n}", - "probId": "12931" - }, - { - "id": "rcCmcnK9rWAurCQbV9EBf", - "author": "chaerin-dev", - "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 10;\n n = Math.floor(n / 10);\n }\n return result;\n}", - "probId": "12931" - }, - { - "id": "OMq9nGAGm11PY-z4EsQ4s", - "author": "prove-ability", - "code": "function solution(n) {\n var answer = 0;\n n.toString()\n .split(\"\")\n .forEach((v) => {\n answer += parseInt(v);\n });\n return answer;\n}", - "probId": "12931" - }, - { - "id": "lsVTnwM-8e4pB_oCBzF0q", - "author": "codeisneverodd", - "code": "function solution(n) {\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((x) => parseInt(x));\n}", - "probId": "12932" - }, - { - "id": "8RRpcAtRB1unJ874JhZuI", - "author": "chaerin-dev", - "code": "function solution(n) {\n // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환\n return String(n)\n .split(\"\")\n .reverse()\n .map((item) => parseInt(item));\n}", - "probId": "12932" - }, - { - "id": "U6O8TExlKPNEPgeSKe6g9", - "author": "jaewon1676", - "code": "function solution(n) {\n return (n = n\n .toString()\n .split(\"\")\n .reverse()\n .map((o) => (o = parseInt(o))));\n}", - "probId": "12932" - }, - { - "id": "LUf4Zhl2TFK5I7HJzrOH8", - "author": "prove-ability", - "code": "function solution(n) {\n // 1. 문자열 변환\n // 2. 배열로 변환\n // 3. 배열 반전\n // 4. 정수로 변환\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((v) => parseInt(v));\n}", - "probId": "12932" - }, - { - "id": "DeTwAbPzJQTYHfFSYeyQo", - "author": "yongchanson", - "code": "function solution(n) {\n let answer = [];\n let string = n.toString();\n for (let i = string.length - 1; i >= 0; i--) {\n let slice = string.substr(i, 1) * 1;\n answer.push(slice);\n }\n return answer;\n}", - "probId": "12932" - }, - { - "id": "AaKhktbCwYIvuLdqtVkNd", - "author": "codeisneverodd", - "code": "function solution(n) {\n return parseInt(\n n\n .toString()\n .split(\"\")\n .sort((a, b) => b - a)\n .join(\"\")\n );\n}", - "probId": "12933" - }, - { - "id": "Dv63J0O2GNbleNOxMz2Xt", - "author": "chaerin-dev", - "code": "function solution(n) {\n // 정수 -> 문자열 -> 배열\n let arrN = String(n).split(\"\");\n // 배열 내림차순 정렬\n arrN.sort((a, b) => b - a);\n // 배열 -> 문자열 -> 정수\n return parseInt(arrN.join(\"\"));\n}", - "probId": "12933" - }, - { - "id": "qfpLTD851pQJuKNfQzp2t", - "author": "prove-ability", - "code": "function solution(n) {\n return parseInt(n.toString().split(\"\").sort((a, b) => b - a).join(\"\"), 10);\n}", - "probId": "12933" - }, - { - "id": "6QJtzbbAPWi0dYskBUOY5", - "author": "codeisneverodd", - "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1;\n}", - "probId": "12934" - }, - { - "id": "60u_rYRNkIfmgaN_kHfcK", - "author": "chaerin-dev", - "code": "function solution(n) {\n // n의 제곱근값을 x에 저장\n let x = Math.sqrt(n);\n // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환\n return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1;\n}", - "probId": "12934" - }, - { - "id": "xcml0sXpJFts_rH6YPv9T", - "author": "prove-ability", - "code": "function solution(n) {\n // n의 제곱근을 x 초기화\n const x = Math.sqrt(n);\n // 양의 정수라면 x + 1 제곱 반환\n if(Number.isInteger(x)) return Math.pow(x + 1, 2)\n // 아니라면 -1 반환\n return -1;\n}", - "probId": "12934" - }, - { - "id": "RW2uCQ6hMfNMAoXTJZkEB", - "author": "jaewon1676", - "code": "function solution(n) {\n let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인\n if (s ** 2 === n) return ((s+1) ** 2)\n \n return -1;\n}", - "probId": "12934" - }, - { - "id": "LdOofECKfNCcPD_77jFrO", - "author": "yongchanson", - "code": "function solution(n) {\n const sqrt = Math.sqrt(n);\n //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수\n return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1;\n}", - "probId": "12934" - }, - { - "id": "B9slrixZJciwmd952NdVz", - "author": "codeisneverodd", - "code": "function solution(arr) {\n const index = arr.indexOf(Math.min(...arr));\n arr.splice(index, 1);\n return arr.length === 0 ? [-1] : arr;\n}", - "probId": "12935" - }, - { - "id": "LoSHgCe7ylxHusDVr2-zX", - "author": "jaewon1676", - "code": "function solution(arr) {\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n if (arr.length < 1) return [-1];\n return arr;\n}\n\n/* 풀이과정 arr [4,3,2,1] 일경우\nMath.min(...arr)은 1\narr.indexOf(1), 1이 있는 index가 3이므로 3 반환.\narr.splice(3, 1) arr의 3번째 index만 제거 해준다.\narr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */", - "probId": "12935" - }, - { - "id": "iaE7QvR9yOJqvB5MoSqiw", - "author": "chaerin-dev", - "code": "function solution(arr) {\n // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환\n return arr.length ? arr : [-1];\n}", - "probId": "12935" - }, - { - "id": "Fo72LEa6RrJ9yvfb4xd_j", - "author": "prove-ability", - "code": "function solution(arr) {\n // 최솟값 찾기\n const min = Math.min(...arr);\n // arr 중 min 과 같은 요소의 인덱스 제거\n arr.splice(\n arr.findIndex((num) => num === min),\n 1\n );\n // 만약 arr 가 비어있다면 [-1] 반환\n if (arr.length === 0) return [-1];\n return arr;\n}", - "probId": "12935" - }, - { - "id": "LjNarjFhD8SKHsKs3UTF2", - "author": "chaerin-dev", - "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n // 정답을 저장할 문자열 answer\n answer = \"\";\n // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복\n for (let i = 0; i < b; i++) {\n // 가로 길이만큼 문자열에 별 더해주기\n for (let j = 0; j < a; j++) answer += \"*\";\n // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기\n answer += \"\\n\";\n }\n // 정답 출력\n console.log(answer);\n});", - "probId": "12969" - }, - { - "id": "6EejGKp__RPMVZw1Jg5Lh", - "author": "prove-ability", - "code": "process.stdin.setEncoding('utf8');\nprocess.stdin.on('data', data => {\n const nums = data.split(\" \");\n const n = Number(nums[0]), m = Number(nums[1]);\n \n let result = \"\";\n // 2차원으로 접근\n // 세로 길이만큼 반복\n for(let i = 0; i < m; i++) {\n // 가로 길이만큼 별 더하기\n for(let j = 0; j < n; j++) {\n result += \"*\";\n }\n // 가로가 끝나면 줄내림\n result += \"\\n\";\n }\n console.log(result)\n});", - "probId": "12969" - }, - { - "id": "24VCY_CYJhFP96mVIvqwh", - "author": "yongchanson", - "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n console.log((\"*\".repeat(a) + `\\n`).repeat(b));\n});\n/*\n<풀이과정>\nrepeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count);\n'*'.repeat(a) : *를 a만큼 반복한다.\n*/", - "probId": "12969" - }, - { - "id": "Wv-MBFA5NHmUW8uTwXrei", - "author": "codeisneverodd", - "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}", - "probId": "12937" - }, - { - "id": "27S6lHdgIBoq9T6OqNMSt", - "author": "chaerin-dev", - "code": "function solution(num) {\n return num % 2 == 0 ? \"Even\" : \"Odd\";\n}", - "probId": "12937" - }, - { - "id": "iP9qldlsLGaQ6zSbDN0f5", - "author": "jaewon1676", - "code": "function solution(num) {\n let answer;\n num % 2 == 0 ? (answer = \"Even\") : (answer = \"Odd\");\n // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환.\n return answer;\n}", - "probId": "12937" - }, - { - "id": "U726lfDR_pckQ93HTvQTL", - "author": "prove-ability", - "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}", - "probId": "12937" - }, - { - "id": "NCUk0-GHkrAvIwcvfBjRX", - "author": "yongchanson", - "code": "function solution(num) {\n return num % 2 ? \"Odd\" : \"Even\";\n}", - "probId": "12937" - }, - { - "id": "A-7EsySAVrBLbzbRxj41q", - "author": "codeisneverodd", - "code": "function solution(n, lost, reserve) {\n let answer = 0;\n let studentClothes = new Array(n + 2).fill(1);\n for (const student of reserve) studentClothes[student] += 1;\n for (const student of lost) studentClothes[student] -= 1;\n for (let i = 1; i < n + 1; i++) {\n if (studentClothes[i] === 0) {\n if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) {\n if (studentClothes[i - 1] === 2) {\n studentClothes[i - 1] -= 1;\n studentClothes[i] += 1;\n } else {\n studentClothes[i + 1] -= 1;\n studentClothes[i] += 1;\n }\n }\n }\n }\n for (const student of studentClothes) {\n answer += student > 0 ? 1 : 0;\n }\n answer -= 2;\n return answer;\n}", - "probId": "42862" - }, - { - "id": "Jp_bARhodqdiX76BskYEU", - "author": "prove-ability", - "code": "function solution(n, lost, reserve) {\n // students 초기화 - 학생들은 체육복 개수 1로 초기화\n let students = Array.from({ length: n }).fill(1);\n\n // 읽어버린 학생 개수 반영\n lost.forEach((target) => {\n students[target - 1]--;\n });\n\n // 여별 체육복 개수 반영\n reserve.forEach((target) => {\n students[target - 1]++;\n });\n\n // 학생들 순차적으로 접근\n for (let i = 0, len = students.length; i < len; i++) {\n // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue\n if (students[i] === 0 || students[i] === 1) continue;\n // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (i !== 0 && students[i - 1] === 0) {\n // 이전 학생 증가\n students[i - 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) {\n // 다음 학생 증가\n students[i + 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n }\n // 체육복 1개 이상을 가진 학생들의 수 반환\n return students.filter((v) => v >= 1).length;\n}", - "probId": "42862" - }, - { - "id": "rBOyp_uZuvqujFMkrXKh8", - "author": "jaewon1676", - "code": "function solution(n, lost, reserve) {\n let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다\n let cnt = 0;\n for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복\n answer[reserve[i]-1] += 1\n }\n for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1\n answer[lost[i]-1] -= 1\n }\n for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다.\n if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){\n answer[i] = 1\n answer[i+1] = 1\n }\n }\n for(let i = 0; i < answer.length; i++){\n (answer[i] >= 1 ? cnt += 1 : null)\n }\n return cnt\n }\n //그리디\n // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다.\n // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다.", - "probId": "42862" - }, - { - "id": "4mh35T96w0o_dN-4qMn3P", - "author": "chaerin-dev", - "code": "function solution(n, lost, reserve) {\n // 학생들의 체육복 개수를 저장할 배열 students\n // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정\n // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음\n const students = Array.from({ length: n + 1 }, () => 1);\n\n // 체육복 분실/여분 정보 students 배열에 반영\n lost.forEach((lostStudent) => students[lostStudent]--);\n reserve.forEach((reserveStudent) => students[reserveStudent]++);\n\n // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt\n let cnt = 0;\n students.forEach((student, i) => {\n // 현재 인덱스의 학생이 체육복이 없다면\n if (student === 0) {\n // 바로 앞 학생이 체육복 여분이 있다면\n if (students[i - 1] === 2) {\n // 바로 앞 학생에게 체육복 빌리기\n students[i - 1]--;\n student++;\n }\n // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면\n else if (students[i + 1] === 2) {\n // 바로 뒤 학생에게 체육복 빌리기\n students[i + 1]--;\n student++;\n }\n // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음\n else cnt++;\n }\n });\n\n // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수\n return n - cnt;\n}", - "probId": "42862" - }, - { - "id": "9Q0lkYcedv8SgcgtzudB0", - "author": "codeisneverodd", - "code": "function solution(n, m) {\n const gcd = greatestCommonDivisor(n, m);\n return [gcd, (n * m) / gcd];\n}\n\nconst greatestCommonDivisor = (a, b) => {\n if (b === 0) return a;\n else return greatestCommonDivisor(b, a % b);\n};", - "probId": "12940" - }, - { - "id": "ewsZ9r3rqM2clbYhxTpQY", - "author": "chaerin-dev", - "code": "function solution(n, m) {\n // 최대공약수 구하기\n let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m));\n // 최소공배수 구하기\n let lcm = (n, m) => (n * m) / gcd(n, m);\n // 결과 출력\n return [gcd(n, m), lcm(n, m)];\n}", - "probId": "12940" - }, - { - "id": "Jr7B5dlwFDqEXbETHep2j", - "author": "yongchanson", - "code": "function solution(a, b) {\n let gcd = 0;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if ((a % i) + (b % i) === 0) {\n gcd = i;\n }\n }\n return [gcd, (a / gcd) * b];\n}", - "probId": "12940" - }, - { - "id": "MXwkymbFd1kz6TIgqL_fK", - "author": "prove-ability", - "code": "function solution(sizes) {\n // 가로, 세로 중 큰 값을 가로 길이로 변경(스압)\n sizes.forEach(([width, height], index) => {\n if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]];\n });\n\n // 가로, 세로 각각 큰 값 추출\n const widthMax = Math.max(...sizes.map(v => v[0]));\n const widthHeight = Math.max(...sizes.map(v => v[1]));\n\n return widthMax * widthHeight;\n}", - "probId": "86491" - }, - { - "id": "zTwUH1w_o_TSBqvU8Ui72", - "author": "codeisneverodd", - "code": "function solution(sizes) {\n for (let card of sizes) {\n if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]];\n }\n\n const maxWidth = Math.max(...sizes.map(card => card[0]));\n const maxHeight = Math.max(...sizes.map(card => card[1]));\n return maxWidth * maxHeight;\n}", - "probId": "86491" - }, - { - "id": "94qlDqEmbjX9Yz8rrbh1O", - "author": "codeisneverodd", - "code": "function solution(num) {\n let answer = 0;\n while (answer <= 500) {\n if (num === 1) return answer;\n num = num % 2 === 0 ? num / 2 : num * 3 + 1;\n answer += 1;\n }\n return -1;\n}", - "probId": "12943" - }, - { - "id": "Dm96pBci7mCGP2WUd4bXY", - "author": "chaerin-dev", - "code": "function solution(num) {\n // 작업을 반복한 횟수를 저장할 변수\n let cnt = 0;\n // num이 1이 되면 반복 종료\n while (num > 1) {\n // 작업을 500번 반복해도 1이 되지 않으면 -1 반환\n if (cnt == 500) return -1;\n // 작업 반복 횟수 증가\n cnt++;\n // 입력된 수가 짝수이면 2로 나누기\n if (num % 2 == 0) num /= 2;\n // 입력된 수가 홀수이면 3을 곱하고 1을 더하기\n else {\n num *= 3;\n num++;\n }\n }\n // 작업을 반복한 횟수 반환\n return cnt;\n}", - "probId": "12943" - }, - { - "id": "6Pz55YxSqwfiwool34rmC", - "author": "jaewon1676", - "code": "function solution(num) {\n var answer = 0;\n // num이 1이 아니고, answer이 500이 아니면 진행.\n // 두 가지 조건중 하나라도 맞지 않으면 while문 종료.\n while (num != 1 && answer != 500) {\n //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다.\n num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1);\n answer++;\n }\n return num == 1 ? answer : -1;\n}", - "probId": "12943" - }, - { - "id": "UzH0LHREY5CZkFDEx6SnK", - "author": "prove-ability", - "code": "function solution(num) {\n let count = 0;\n\n // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.\n while (num !== 1) {\n // 입력된 수가 짝수라면 2로 나눕니다.\n if (num % 2 === 0) num /= 2;\n // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.\n else num = num * 3 + 1;\n count++;\n // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요\n if (count > 500) return -1;\n }\n\n return count;\n}", - "probId": "12943" - }, - { - "id": "7hfenXvttHxJdStgWjkFM", - "author": "yongchanson", - "code": "function solution(num) {\n let count = 0;\n while (num !== 1) {\n if (count++ === 500) return -1;\n num = num % 2 ? num * 3 + 1 : num / 2;\n }\n return count;\n}", - "probId": "12943" - }, - { - "id": "iPMEN0ayXeCq9KiQBcBKJ", - "author": "codeisneverodd", - "code": "function solution(board, moves) {\n let answer = 0;\n const length = board.length\n let basket = []\n moves.forEach(move => {\n for (let i = 0; i < length; i++) {\n const item = board[i][move - 1]\n if (item !== 0) {\n if (basket[basket.length - 1] !== item) {\n basket.push(item)\n } else {\n basket.pop()\n answer += 2\n }\n board[i][move - 1] = 0\n break\n }\n }\n })\n\n return answer;\n}", - "probId": "64061" - }, - { - "id": "S52gfdXl4Vf3G1iqQsGZk", - "author": "jaewon1676", - "code": "function solution(board, moves) {\n var answer = 0; // 인형을 터뜨린 횟수\n let basket = []; // 바구니\n let crane = 0; // 크레인의 행의 위치\n for (let i = 0; i < moves.length; i++) {\n crane = moves[i] - 1; // crane = 0\n for (let j = 0; j < board.length; j++) {\n if (board[j][crane] == 0)\n else if (board[j][crane] != 0) {\n basket.push(board[j][crane])\n board[j][crane] = 0\n if (basket[basket.length - 1] == basket[basket.length - 2]) {\n basket.pop();\n basket.pop();\n answer += 2;\n }\n break;\n }\n }\n }\n\n return answer;\n}\n\n/* 풀이 과정\n1. 입력받은 moves의 length만큼 for문을 돌린다.\n2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다.\n3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다.\n4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */", - "probId": "64061" - }, - { - "id": "pfHtfsZVkkHiayrYTOHoG", - "author": "chaerin-dev", - "code": "function solution(board, moves) {\n let n = board.length;\n\n // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경\n board = board.flat();\n let rotatedBoard = Array.from({ length: n }, (i) => []);\n for (let i = 0; i < board.length; i++) {\n if (board[i]) rotatedBoard[i % n].push(board[i]);\n }\n\n // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기\n let stack = [];\n let cnt = 0;\n for (let move of moves) {\n let doll = rotatedBoard[move - 1].shift();\n if (doll === undefined) continue;\n if (stack[stack.length - 1] === doll) {\n stack.pop();\n cnt += 2;\n } else {\n stack.push(doll);\n }\n }\n\n return cnt;\n}", - "probId": "64061" - }, - { - "id": "ZCxqB6BbJUzqxD9zJ5HfP", - "author": "chaerin-dev", - "code": "function solution(numbers, hand) {\n // 키패드를 4행 3열의 이차원 배열이라고 생각\n\n // leftRow, leftCol: 왼손의 현재 위치\n let [leftRow, leftCol] = [3, 0];\n // rightRow, rightCol: 오른손의 현재 위치\n let [rightRow, rightCol] = [3, 2];\n // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열\n let result = '';\n\n // 눌러야할 각 번호가\n numbers.forEach(e => {\n // 1/4/7이면 왼손으로 눌러야하므로\n if (e === 1 || e === 4 || e === 7) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 3/6/9이면 오른손으로 눌러야하므로\n else if (e === 3 || e === 6 || e === 9) {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2];\n // result 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n\n // 2/5/8/0이면\n else {\n // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌\n if (e === 0) e = 11;\n\n // leftRow, leftCol: 다음에 눌러야 할 번호의 위치\n let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1];\n // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol);\n // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol);\n\n // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로\n if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [nextRow, nextCol];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로\n else {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [nextRow, nextCol];\n // reuslt 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n }\n });\n\n // result 문자열 반환\n return result;\n}", - "probId": "67256" - }, - { - "id": "68jNGoyytzcOlAS5SyGFJ", - "author": "codeisneverodd", - "code": "function solution(numbers, hand) {\n let leftNum = 10;\n let rightNum = 12;\n return numbers\n .map(num => {\n if (num === 0) {\n num = 11;\n }\n if (num % 3 === 1) {\n return leftTo(num);\n } else if (num % 3 === 0) {\n return rightTo(num);\n } else {\n const numLocation = numToLocation(num);\n const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation);\n const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation);\n if (leftDistance === rightDistance) {\n return hand === 'left' ? leftTo(num) : rightTo(num);\n } else if (leftDistance < rightDistance) {\n return leftTo(num);\n } else {\n return rightTo(num);\n }\n }\n })\n .join('');\n\n function leftTo(num) {\n leftNum = num;\n return 'L';\n }\n\n function rightTo(num) {\n rightNum = num;\n return 'R';\n }\n}", - "probId": "67256" - }, - { - "id": "4MhQup3fXXKL9MmSX8T8n", - "author": "codeisneverodd", - "code": "function solution(arr) {\n return arr.reduce((acc, curr) => acc + curr) / arr.length;\n}", - "probId": "12944" - }, - { - "id": "hj6e3dHd8OFlm9FdM7EjK", - "author": "jaewon1676", - "code": "function solution(arr) {\n var answer = 0;\n for (var i = 0; i < arr.length; i++) {\n answer += arr[i];\n }\n return answer / arr.length;\n}", - "probId": "12944" - }, - { - "id": "HAOzveHmR3uEuIw0sngUX", - "author": "chaerin-dev", - "code": "function solution(arr) {\n // arr의 모든 요소를 sum에 더힘\n let sum = arr.reduce((sum, e) => sum + e);\n // sum을 arr의 요소의 갯수로 나눈 후 반환\n return sum / arr.length;\n}", - "probId": "12944" - }, - { - "id": "gm7pLWLd9DyjvgskAV2FJ", - "author": "prove-ability", - "code": "function solution(arr) {\n var answer = 0;\n arr.forEach((num) => {\n answer += num;\n });\n return answer / arr.length;\n}", - "probId": "12944" - }, - { - "id": "MmmrvwJ7lrAf31EdIDPfg", - "author": "codeisneverodd", - "code": "function solution(nums) {\n const numLen = nums.length;\n const setLen = [...new Set(nums)].length;\n return numLen / 2 >= setLen ? setLen : numLen / 2;\n}", - "probId": "1845" - }, - { - "id": "yhtVkzIR36dqONCwB25S2", - "author": "jaewon1676", - "code": "function solution(nums) {\n let max = nums.length / 2; // N / 2\n let set = [...new Set(nums)]; // 중복을 없앤다.\n return set.length > max ? max : set.length;\n}\n\n/* 풀이 과정\n1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다.\n2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다.\n3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 \n 두가지 경우의 수로 좁혀진다. */", - "probId": "1845" - }, - { - "id": "4TV8GYuTck0WnYo6CflGw", - "author": "prove-ability", - "code": "function solution(nums) {\n var answer = 0;\n // set 을 사용해 중복 제거\n const set = new Set();\n nums.forEach((num) => {\n set.add(num);\n });\n // set 의 사이즈가 N/2 보다 크다면 N/2 반환\n // 그렇지 않다면 set size 반환\n if (set.size > nums.length / 2) answer = nums.length / 2;\n else answer = set.size;\n\n return answer;\n}", - "probId": "1845" - }, - { - "id": "mYSk3xSypHHsW1bV15ymJ", - "author": "yongchanson", - "code": "function solution(nums) {\n const unique = nums.filter((element, index) => {\n return nums.indexOf(element) === index;\n });\n\n return unique.length > nums.length / 2 ? nums.length / 2 : unique.length;\n}", - "probId": "1845" - }, - { - "id": "1buPydN5hvSMYxiJWJhWk", - "author": "chaerin-dev", - "code": "function solution(nums) {\n // 가질 수 있는 폰켓몬의 수\n const getCnt = nums.length / 2;\n // 폰켓몬 종류의 수\n const setSize = new Set(nums).size;\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면\n // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면\n // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수\n return setSize > getCnt ? getCnt : setSize;\n}", - "probId": "1845" - }, - { - "id": "1gdqtkUhXrhHbYE9Duzvi", - "author": "codeisneverodd", - "code": "function solution(x) {\n const sum = x\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr);\n return x % sum === 0;\n}", - "probId": "12947" - }, - { - "id": "KzMzxIkslLO020nqk83NZ", - "author": "chaerin-dev", - "code": "function solution(x) {\n // x의 각 자리에 접근하기 위해 x를 문자열로 변환\n let x_str = x.toString();\n // 각 자릿수의 합을 저장할 변수\n let sum_of_digits = 0;\n // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌\n for (let i = 0; i < x_str.length; i++) {\n sum_of_digits += Number(x_str[i]);\n }\n // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환\n return x % sum_of_digits == 0;\n}", - "probId": "12947" - }, - { - "id": "wofD5Hv4OpVm-o9uHmILl", - "author": "jaewon1676", - "code": "function solution(x) {\n let sum = 0;\n let arr = String(x).split(\"\"); // 숫자를 하나씩 분리한다.\n\n for (var i = 0; i < arr.length; i++) {\n sum += Number(arr[i]); // 각 숫자를 더해준다.\n }\n\n return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수\n}", - "probId": "12947" - }, - { - "id": "DyuxxksmPktyA4cq5Lqum", - "author": "prove-ability", - "code": "function solution(x) {\n var answer = true;\n // 모든 자릿수의 합을 구한다\n const sum = x\n .toString()\n .split(\"\")\n .reduce((acc, cur) => acc + parseInt(cur, 10), 0);\n // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환\n if (x % sum !== 0) return false;\n return answer;\n}", - "probId": "12947" - }, - { - "id": "Y5u7p4htZYqblMzR79zHj", - "author": "codeisneverodd", - "code": "function solution(phone_number) {\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}", - "probId": "12948" - }, - { - "id": "RegkLLoeWx_PnVUz6Qs1L", - "author": "chaerin-dev", - "code": "function solution(phone_number) {\n // \"*\"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과\n // phone_number의 -4인덱스부터 끝까지 추출한 문자열을\n // 이어붙인 후 반환\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}", - "probId": "12948" - }, - { - "id": "2-xaBZIgoE2krNO-WwgBd", - "author": "prove-ability", - "code": "function solution(phone_number) {\n var answer = \"\";\n answer += \"*\".repeat(phone_number.length - 4);\n answer += phone_number.slice(phone_number.length - 4, phone_number.length);\n return answer;\n}", - "probId": "12948" - }, - { - "id": "6h5JI_CTavzPJH7MtISGv", - "author": "codeisneverodd", - "code": "function solution(arr1, arr2) {\n var answer = new Array(arr1.length);\n for (let i = 0; i < arr1.length; i++) {\n answer[i] = new Array(arr1[0].length);\n }\n for (let row = 0; row < answer.length; row++) {\n for (let col = 0; col < answer[0].length; col++) {\n answer[row][col] = arr1[row][col] + arr2[row][col];\n }\n }\n return answer;\n}", - "probId": "12950" - }, - { - "id": "TWduPWGleuME_CJQCTSPk", - "author": "chaerin-dev", - "code": "function solution(arr1, arr2) {\n var answer = [];\n for (let i = 0; i < arr1.length; i++) {\n let ans_row = [];\n for (let j = 0; j < arr1[0].length; j++) {\n ans_row.push(arr1[i][j] + arr2[i][j]);\n }\n answer.push(ans_row);\n }\n return answer;\n}", - "probId": "12950" - }, - { - "id": "QC1oG84-d4QJwG15v-Ti7", - "author": "yongchanson", - "code": "function solution(A, B) {\n let answer = [];\n\n for (let i = 0; i < A.length; i++) {\n answer[i] = [];\n for (let j = 0; j < A[0].length; j++) {\n answer[i][j] = A[i][j] + B[i][j];\n }\n }\n return answer;\n}", - "probId": "12950" - }, - { - "id": "VjakovEpxyPzA5dcN2rzZ", - "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n if (remainder === 0) {\n n = Math.floor((n - 1) / 3)\n } else {\n n = Math.floor(n / 3)\n }\n }\n return answer;\n}", - "probId": "12899" - }, - { - "id": "7LgMYX1DApNTOR0a8CSTp", - "author": "jaewon1676", - "code": "function solution(n) {\n const number = [ 4, 1, 2];\n let answer = \"\";\n \n while(n){ // \n answer = number[n%3] + answer;\n n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3);\n }\n\n return answer\n}", - "probId": "12899" - }, - { - "id": "9W6tETWU0iM4iM27P11Mr", - "author": "RyanDeclan", - "code": "// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용\n// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드\nlet result = \"\";\nfunction solution(n) {\n let remainder = n % 3;\n let quotient = Math.floor(n / 3)\n if(!remainder){\n quotient = Math.floor(n / 3) - 1;\n remainder = 3\n }\n result += remainder;\n if( quotient <= 3){\n if(quotient)result += quotient\n result = result.replace(/[\"3\"]/g,\"4\")\n return result.split(\"\").reverse().join(\"\")\n } \n return solution(quotient);\n}", - "probId": "12899" - }, - { - "id": "nKaTjadaguUkLwT6umotE", - "author": "jaewon1676", - "code": "function solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", - "probId": "12900" - }, - { - "id": "AOPsrD2ijP3-40z3nFgW1", - "author": "le2sky", - "code": "function solution(numbers) {\n const answer = [];\n numbers.forEach((num) => {\n if (num % 2 == 0) answer.push(num + 1);\n else {\n let binary = [\"0\", ...num.toString(2)];\n let last = binary.lastIndexOf(\"0\");\n binary[last] = \"1\";\n binary[last + 1] = \"0\";\n answer.push(parseInt(binary.join(\"\"), 2));\n }\n });\n return answer;\n}", - "probId": "77885" - }, - { - "id": "zlZcsNzLVWdMwgVIPU8I2", - "author": "codeisneverodd", - "code": "function solution(n) {\n if (n % 2 !== 0) return 0;\n\n const getCount = n => {\n const k = n / 2;\n const count = [3, 11, ...Array(k - 2)];\n const divider = 1000000007;\n for (let i = 2; i < k; i++) {\n count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider;\n }\n return count[count.length - 1];\n };\n\n return getCount(n);\n}", - "probId": "12902" - }, - { - "id": "28P5BaMjEWq4UWKkmwqQz", - "author": "codeisneverodd", - "code": "function solution(citations) {\n var answer = 0;\n let h = 0\n let length = 0\n while (length >= h) {\n h++\n length = citations.filter(citation => citation >= h).length\n }\n answer = h - 1\n return answer;\n}", - "probId": "42747" - }, - { - "id": "07_VeueyKdEDFDyNjPTao", - "author": "jaewon1676", - "code": "function solution(citations) {\n var answer = 0;\n citations.sort((a,b)=>(b-a))\n\n for(var i=0; i word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')\n //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다.\n return answer;\n}", - "probId": "12951" - }, - { - "id": "zJu4dHtoKmaZoeqGvYxO6", - "author": "jaewon1676", - "code": "function solution(s) {\n s = s.split(' ').map(el => el.split('').map((el, index) => \n index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ')\n return s;\n}\n// 문자열을 연습하기에 좋은 문제입니다.\n \n// s.split(' ') // 띄어쓰기를 기준으로 나눕니다.\n// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 \n// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase())\n// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. \n// .join('') 작은 배열들을 합쳐줍니다.\n// .join(' ') 큰 배열들을 합쳐줍니다.", - "probId": "12951" - }, - { - "id": "hK9f9ndQDE1sXaUinfKAe", - "author": "yongchanson", - "code": "function solution(s) {\n let answer = [];\n s = s.split(\" \");\n\n for (let i = 0; i < s.length; i++) {\n answer.push(\n s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase()\n );\n }\n return answer.join(\" \");\n}", - "probId": "12951" - }, - { - "id": "sPlDt5aiENmQJgvlQmebU", - "author": "RyanDeclan", - "code": "function solution(s) {\n return s.toLowerCase().split(\" \").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : \"\").join(\" \");\n}\n\n// 이 문제에서 제일 핵심은 \"공백문자가 연속해서 나올 수 있습니다.\" 입니다. 이 부분을 꼭 고려하셔야합니다. \n// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다.\n// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. \n//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다.", - "probId": "12951" - }, - { - "id": "TBwaxd9mZyrzb-Durxs46", - "author": "codeisneverodd", - "code": "function solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", - "probId": "12952" - }, - { - "id": "JL6PQjS1Ye6tolU8A_E6R", - "author": "codeisneverodd", - "code": "function solution(arr) {\n var answer = 0;\n answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1)\n return answer;\n}\n\nfunction leastCommonMultiple(a, b) {\n return a * b / greatestCommonDivisor(a, b)\n}\n\nfunction greatestCommonDivisor(a, b) {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", - "probId": "12953" - }, - { - "id": "i8sYJBOLUeicvCcuIG3se", - "author": "codeisneverodd", - "code": "function solution(str1, str2) {\n var answer = 0;\n let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2)\n const union = new Set([...compare1, ...compare2])\n let multiIntersectionLen = 0, multiUnionLen = 0\n for (const slice of union) {\n const compare1Count = compare1.filter(x => x === slice).length,\n compare2Count = compare2.filter(x => x === slice).length\n multiIntersectionLen += Math.min(compare1Count, compare2Count)\n multiUnionLen += Math.max(compare1Count, compare2Count)\n }\n answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536)\n return answer;\n}\n\nfunction verifiedSlices(str) {\n const onlyAlphabet = /[a-zA-Z]{2}/\n let result = []\n for (let i = 0; i < str.length - 1; i++) {\n const slice = str.slice(i, i + 2)\n if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase())\n }\n return result\n}", - "probId": "17677" - }, - { - "id": "RBflJhaKTzyHXGsgMh8Tp", - "author": "jaewon1676", - "code": "function solution(str1, str2) {\n\n str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌.\n str2 = str2.toUpperCase();\n let arr1 = new Array() // 빈 객체를 만들어줌.\n let arr2 = new Array()\n \n for (var i = 0; i < str1.length - 1; i++) {\n let tmp = str1.substr(i, 2) // i부터 2개 ( i, i+1 )\n if (tmp.search(/[^A-Z]/g) >= 0) {\n // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) \n // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환.\n continue\n }\n arr1.push(tmp)\n }\n \n for (var i = 0; i < str2.length - 1; i++) {\n let tmp = str2.substr(i, 2)\n if (tmp.search(/[^A-Z]/g) >= 0) {\n continue\n }\n arr2.push(tmp)\n }\n arr1.sort()\n arr2.sort()\n var a = [] // 중복포함, 교집합 배열\n var b = [] // 중복포함, 합집합 배열\n \n for (var i = 0; i < arr2.length; i++) {\n if (arr1.indexOf(arr2[i]) >= 0) { \n // arr1 객체에 arr2[i]과 같은 값이 있는지 확인.\n // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. \n a.push(arr1.splice(arr1.indexOf(arr2[i]), 1))\n }\n // 교집합이 성립되지 않으면 실행.\n b.push(arr2[i])\n }\n\n for (var i = 0; i < arr1.length; i++) {\n b.push(arr1[i])\n }\n\n // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함\n if (b.length === 0) return 65536\n if (a.length === 0) return 0\n\n return Math.floor((a.length / b.length) * 65536)\n}", - "probId": "17677" - }, - { - "id": "AknDF5Bz9CpCYN5i9q76r", - "author": "codeisneverodd", - "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = []\n if (cacheSize === 0) return 5 * cities.length\n for (const city of cities) {\n const cityLC = city.toLowerCase()\n if (cache.includes(cityLC)) {\n cache.splice(cache.indexOf(cityLC), 1)\n cache.unshift(cityLC)\n answer += 1\n } else {\n if (cache.length >= cacheSize) cache.pop()\n cache.unshift(cityLC)\n answer += 5\n }\n }\n return answer;\n}", - "probId": "17680" - }, - { - "id": "DWtHGPN_Hr99gIXXEB6Uo", - "author": "jaewon1676", - "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = [];\n \n //캐시 크기가 0인 경우는 따로 처리\n if (cacheSize === 0) return cities.length * 5;\n \n while (cities.length != 0) {\n // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다.\n const city = cities.shift().toLowerCase(); \n // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss)\n if (cache.includes(city)) { \n // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고,\n cache.splice(cache.indexOf(city), 1);\n // 맨 뒤로 push 해준다.\n cache.push(city);\n // cache hit\n answer += 1;\n } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다.\n if (cache.length === cacheSize) {\n cache.shift();\n }\n // 새로운 캐시 맨 뒤로 push\n cache.push(city);\n // cache miss\n answer += 5;\n }\n }\n return answer;\n }\n /* LRU 알고리즘\n n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다.\n n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면\n 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */", - "probId": "17680" - }, - { - "id": "hKVFCuqW6bqhwkd-G1poJ", - "author": "codeisneverodd", - "code": "function solution(m, n, board) {\n board = board.map(r => r.split(''));\n const getSquare = ([r, c]) => [\n [r, c],\n [r, c + 1],\n [r + 1, c],\n [r + 1, c + 1],\n ];\n\n const isSquare = ([r, c]) => {\n if (board[r][c] === '@') return false;\n return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1;\n };\n\n const remove = () => {\n const removeArr = [];\n for (let r = 0; r < m - 1; r++) {\n for (let c = 0; c < n - 1; c++) {\n if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v));\n }\n }\n removeArr.forEach(([r, c]) => {\n board[r][c] = '@';\n });\n return removeArr.length !== 0;\n };\n\n const pull = () => {\n for (let c = 0; c < n; c++) {\n const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@');\n const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn];\n resultColumn.forEach((v, r) => {\n board[r][c] = v;\n });\n }\n return board;\n };\n\n while (remove()) {\n pull();\n }\n\n return board.flat().filter(v => v === '@').length;\n}", - "probId": "17679" - }, - { - "id": "zGjcAQnQZZy9HifTDSHMS", - "author": "codeisneverodd", - "code": "function solution(n, t, m, p) {\n let queue = [], result = [], currentNumDecimal = -1, turn = 0\n while (result.length < t) {\n if (queue.length === 0) {\n currentNumDecimal++\n currentNumDecimal.toString(n).split('').forEach(x => queue.push(x))\n }\n const currentChar = queue.shift()\n if (turn % m === p - 1) result.push(currentChar)\n turn++\n }\n return result.join('').toUpperCase()\n}", - "probId": "17687" - }, - { - "id": "nWgDR9ot7FpFEI6isToMa", - "author": "minjongbaek", - "code": "function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수\n return m\n .replace(/C#/g, 'c')\n .replace(/D#/g, 'd')\n .replace(/F#/g, 'f')\n .replace(/G#/g, 'g')\n .replace(/A#/g, 'a');\n}\n\nfunction solution(m, musicinfos) {\n\n // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다.\n // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다.\n // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다.\n\n const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다.\n \n const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다.\n for (const info of musicinfos) {\n const [start, finish, title, _score] = info.split(',');\n // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다.\n const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5))));\n \n const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다.\n\n // 재생된 멜로디를 구합니다.\n // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다.\n // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다.\n const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration);\n if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다.\n map.set(title, {score, playScore});\n }\n }\n \n // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다.\n // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다.\n const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length);\n return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다.\n}", - "probId": "17683" - }, - { - "id": "Qxd8IoGaRi1uE89pRilU0", - "author": "codeisneverodd", - "code": "function solution(msg) {\n const outputs = [];\n const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))];\n let [start, end] = [0, 1];\n\n const doesDictHave = (start, end) => dict.includes(msg.substring(start, end));\n\n const getInput = (start, end) => {\n if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end];\n return getInput(start, end + 1);\n };\n\n const addToDict = (start, end) => {\n if (doesDictHave(start, end)) return;\n dict.push(msg.substring(start, end));\n };\n\n const addToOutputs = (start, end) => {\n if (!doesDictHave(start, end)) return;\n outputs.push(dict.indexOf(msg.substring(start, end)));\n };\n\n while (start < msg.length) {\n [start, end] = getInput(start, end);\n addToDict(start, end + 1);\n addToOutputs(start, end);\n start = end;\n }\n return outputs;\n}", - "probId": "17684" - }, - { - "id": "z1cEapQw_vTaWCYmPzbhM", - "author": "ssi02014", - "code": "function solution(msg) {\n const result = [];\n const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i))\n\n // 시간 복잡도 O(N^2)\n const lastWordAndCompression = msg.split(\"\").reduce((acc, cur) => {\n const nextWord = acc + cur;\n const nextWordIdx = dict.indexOf(nextWord);\n const prevWordIdx = dict.indexOf(acc);\n\n if (nextWordIdx !== -1) return acc + cur;\n dict.push(nextWord);\n\n if (prevWordIdx !== -1) result.push(prevWordIdx + 1);\n return cur;\n }, \"\");\n\n result.push(dict.indexOf(lastWordAndCompression) + 1);\n return result;\n}", - "probId": "17684" - }, - { - "id": "9Z-Irf_aJY5hilnChcmkF", - "author": "codeisneverodd", - "code": "function solution(files) {\n var answer = [];\n const numberRegex = /[0-9]+/\n answer = files.sort((a, b) => {\n const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)]\n const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()]\n const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])]\n return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0\n })\n return answer;\n}", - "probId": "17686" - }, - { - "id": "c92OX1CC72SNkMj5AsE1y", - "author": "minjongbaek", - "code": "function isPrime(number) { // 소수를 판별하는 함수\n if (number < 2) return false;\n for (let i = 2; i * i <= number; i += 1) {\n if (number % i === 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction solution(n, k) {\n // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만,\n // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다.\n // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다.\n\n // (n).toString(k) // n을 k진수로 변환합니다.\n // .split('0') // 0을 기준으로 나눕니다.\n // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다.\n return (n).toString(k).split('0').filter((number) => isPrime(+number)).length;\n}", - "probId": "92335" - }, - { - "id": "27x71P9qSjKl6H067BaL5", - "author": "jaewon1676", - "code": "function solution (n, left, right) {\n const answer = [];\n \n for (let i=left; i <= right; i++) { // left부터 right까지를 구한다.\n let row = parseInt(i/n);\t// 행(row)을 구한다.\n let column = i%n;\t// 열(column)을 구한다.\n answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다.\n }\n return answer\n}", - "probId": "87390" - }, - { - "id": "pRFDxEW6rpM6_8FS6eh6n", - "author": "codeisneverodd", - "code": "function solution(numbers) {\n var answer = '';\n numbers.sort(sortFunc)\n answer = numbers.join('')\n if (answer[0] === '0') return '0'\n return answer;\n}\n\nconst sortFunc = (a, b) => {\n const compareA = parseInt(a.toString() + b.toString())\n const compareB = parseInt(b.toString() + a.toString())\n return compareB - compareA\n}", - "probId": "42746" - }, - { - "id": "gI-HXKVi3H1H4Rxop37ag", - "author": "createhb21", - "code": "function solution(numbers) {\n let stringNum = \n numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b));\n \n return stringNum[0] === '0' ? '0' : stringNum.join('');\n}", - "probId": "42746" - }, - { - "id": "9ocRqeQxGL8vljoJt2EKG", - "author": "prove-ability", - "code": "function solution(numbers) {\n return numbers.every(v => v === 0) ? \"0\" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(\"\");\n}", - "probId": "42746" - }, - { - "id": "7tq89XCXxHf6bAZ3N0QZq", - "author": "codeisneverodd", - "code": "function solution(board) {\n for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능\n for (let col = 0; col < board[0].length; col++) {\n if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined)))\n board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1;\n }\n }\n return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대\n}", - "probId": "12905" - }, - { - "id": "OA4EV_bKkYpVL0WV_mOTj", - "author": "codeisneverodd", - "code": "function solution(places) {\n var answer = [];\n answer = places.map(place => {\n return place.some((row, rowIndex) =>\n row.split('').some((mark, colIndex, rowArr) => {\n if (mark === 'X') return false\n const countPeopleAround = [\n rowArr[colIndex - 1] || '',\n rowArr[colIndex + 1] || '',\n (place[rowIndex - 1] || '')[colIndex],\n (place[rowIndex + 1] || '')[colIndex],\n ].filter(mark => mark === 'P').length\n return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1)\n })\n ) ? 0 : 1\n })\n return answer;\n}", - "probId": "81302" - }, - { - "id": "B2euqt_Oe9uzKkVn_4p2k", - "author": "prove-ability", - "code": "function solution(maps) {\n // BFS 활용\n const row = maps.length - 1, col = maps[0].length - 1;\n \n // 큐 - 시작 위치 y, x, 이동 거리\n const queue = [[0, 0, 1]];\n \n while(queue.length) {\n // 큐 추출\n let [y, x, count] = queue.shift();\n // 상대 팀 진영이라면\n if(y === row && x === col) return count;\n // 동서남북 확인\n for(let i = 0; i < 4; i++) {\n const [dy, dx] = DIRECTION[i];\n // 다음 길 위치\n const nextY = dy + y, nextX = dx + x;\n // 맵 밖으로 나간다면\n if(isOut(nextY, nextX, row, col)) continue;\n // 도착한 곳이 벽이라면\n if(maps[nextY][nextX] === 0) continue;\n // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지\n maps[nextY][nextX] = 0;\n // 다음에 확인해야하는 곳 큐에 추가\n // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 \n queue.push([nextY, nextX, count + 1]);\n // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음..\n }\n }\n \n return -1;\n}\n\n// 상 우 하 좌\nconst DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]];\n\n// 사용이 가능한 길인지 확인하는 함수\nconst isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col;", - "probId": "1844" - }, - { - "id": "tFgh55K9T3Fa-uPBaUKle", - "author": "codeisneverodd", - "code": "function solution(p) {\n if (p.length === 0) {\n return p\n } else {\n const sliceIndex = balancedIndex(p)\n const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)]\n if (isRight(u)) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n}\n\nconst isRight = (str) => {\n if (str[0] === ')') return false\n let stack = 0\n for (let i = 0; i < str.length; i++) {\n stack = str[i] === '(' ? stack + 1 : stack - 1\n if (stack < 0) return false\n }\n return stack === 0\n}\nconst balancedIndex = (str) => {\n let count = 0\n for (let i = 0; i < str.length; i++) {\n count = str[i] === '(' ? count + 1 : count - 1\n if (count === 0) return i\n }\n}", - "probId": "60058" - }, - { - "id": "9A8pSUiT7gTgf5i5_sc4S", - "author": "codeisneverodd", - "code": "function solution(s) {\n let answer = 0;\n let sArr = s.split('')\n if (isRight(sArr.join(''))) answer += 1\n for (let i = 0; i < sArr.length - 1; i++) {\n sArr.push(sArr.shift())\n if (isRight(sArr.join(''))) answer += 1\n }\n return answer;\n}\n\nfunction isRight(str) {\n const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')']\n let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}]\n for (let sIndex = 0; sIndex < str.length; sIndex++) {\n for (let bIndex = 0; bIndex < 3; bIndex++) {\n if (str[sIndex] === bracketOpen[bIndex]) {\n status[bIndex].open = true\n status[bIndex].openOrder.push(sIndex)\n }\n if (str[sIndex] === bracketClose[bIndex]) {\n if (status[bIndex].openOrder.length > 0) {\n if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0)\n return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘\n status[bIndex].openOrder.pop()\n status[bIndex].open = false\n } else {\n return false //열리기 전에 닫힘\n }\n }\n }\n }\n for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음\n return true\n}", - "probId": "76502" - }, - { - "id": "KrD3_BIcUBFqXxi-vQXC0", - "author": "codeisneverodd", - "code": "function solution(line) {\n const getCrossPoint = ([A, B, E], [C, D, F]) => {\n if (A * D - B * C === 0) return [Infinity, Infinity];\n return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)];\n }; //문제 설명 최하단 참조\n\n const crossPoints = line.flatMap((lineA, i) =>\n line\n .slice(i + 1)\n .map(lineB => getCrossPoint(lineA, lineB))\n .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y))\n );\n\n const generateCanvas = crossPoints => {\n const xPoints = [...crossPoints.map(([x, y]) => x)];\n const yPoints = [...crossPoints.map(([x, y]) => y)];\n const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)];\n const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)];\n const xLength = Math.abs(maxX - minX) + 1;\n const yLength = Math.abs(maxY - minY) + 1;\n\n return {\n canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')),\n draw([x, y], value) {\n this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value;\n },\n print() {\n return this.canvas.map(row => row.join(''));\n },\n };\n };\n\n const canvas = generateCanvas(crossPoints);\n\n crossPoints.forEach(point => {\n canvas.draw(point, '*');\n });\n\n return canvas.print();\n}", - "probId": "87377" - }, - { - "id": "GmyNKZ1InATO0-mX7t4j5", - "author": "jaewon1676", - "code": "function solution(people, limit) {\n let cnt = 0;\n \n people.sort((a, b) => {return a - b}) // 몸무게 오름차순\n \n while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 \n if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기\n people.pop()\n people.shift()\n } else {\n people.pop() // 무거운사람을 뺴주자\n }\n cnt++;\n }\n return cnt;\n} // 4주차 2번 문제와 유사함", - "probId": "42885" - }, - { - "id": "rnxXpn50bj2uSIZOWgX1b", - "author": "prove-ability", - "code": "function solution(people, limit) {\n let count = 0;\n // 오름차순 정렬\n people.sort((a, b) => a - b);\n \n // people 배열 요소가 있다면?\n while(people.length) {\n \n // 요소 중 가장 큰 수인 마지막 요소를 가져온다\n let sum = people.pop();\n \n // 요소 중 가장 작은 수를 더한다\n sum += people[0]\n \n // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거\n if(sum <= limit) people.shift();\n \n count++;\n }\n \n return count;\n}", - "probId": "42885" - }, - { - "id": "GQgbNBSKI2JnPrJpE2HcO", - "author": "iHoHyeon", - "code": "function solution(people, limit) {\n people.sort((a, b) => a - b); // 오름차순 정렬\n\n let cnt = 0; // 구명보트 개수\n\n let front = 0; // 가장 몸무게가 작은 사람의 index\n let last = people.length; // 가장 몸무게가 큰 사람의 index\n\n while (last > front) {\n cnt++;\n\n const now = people.pop();\n last--;\n\n if (now + people[front] <= limit) {\n front++; // shift() 연산의 비효율로 인해 front 사용\n }\n }\n\n return cnt;\n}", - "probId": "42885" - }, - { - "id": "hU3-XGy5Dh5NouMa-QYII", - "author": "codeisneverodd - 시간복잡도 감소", - "code": "function solution(progresses, speeds) {\n var answer = [];\n const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index]))\n console.log(remainDays)\n let maxDay = remainDays[0]\n answer.push(0)\n for (let i = 0; i < remainDays.length; i++) {\n if (remainDays[i] <= maxDay) {\n answer[answer.length - 1] += 1\n } else {\n answer.push(1)\n maxDay = remainDays[i]\n }\n }\n return answer;\n}", - "probId": "42586" - }, - { - "id": "MDAltVc9KeeEZgMIeeet4", - "author": "codeisneverodd", - "code": "function solution(progresses, speeds) {\n var answer = [];\n while (progresses.length > 0) {\n let done = 0\n progresses = progresses.map((prog, index) => prog + speeds[index])\n const length = progresses.length\n for (let i = 0; i < length; i++) {\n if (progresses[0] >= 100) {\n progresses.shift()\n speeds.shift()\n done += 1\n } else {\n break\n }\n }\n if (done > 0) answer.push(done)\n }\n return answer;\n}", - "probId": "42586" - }, - { - "id": "YQvnq0DpOo94g-ZmlgFfh", - "author": "jaewon1676", - "code": "function solution(progresses, speeds) {\n let answer = [];\n \n while(speeds.length > 0) { \n for(let i=0;i= 100) { \n progresses.shift();\n speeds.shift();\n count++;\n }\n if(count > 0) { // 결과 배열에 넣어주기\n answer.push(count);\n }\n }\n return answer;\n}", - "probId": "42586" - }, - { - "id": "cvP9QQXeqFnvI8xgnwUQl", - "author": "createhb21", - "code": "function solution(progresses, speeds) {\n // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열\n var answer = [];\n // 각각의 기능이 몇 일 소요되는지 담은 큐\n let queue = [];\n \n for (let i = 0; i < speeds.length; i++) {\n // 각각의 기능이 몇 일 걸리는지 계산\n let task = Math.ceil((100 - progresses[i]) / speeds[i]);\n // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다.\n queue.push(task);\n \n // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push()\n // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화\n if(task > queue[0]) {\n answer.push(queue.length-1);\n // 큐 초기화\n queue = [task];\n }\n }\n \n answer.push(queue.length);\n return answer;\n }", - "probId": "42586" - }, - { - "id": "rAFFsDtNjHyvISgoZJAo-", - "author": "chaerin-dev", - "code": "function solution(progresses, speeds) {\n // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장\n const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i]));\n\n // 최초 배포날은 daysLeftArr의 첫 번째 요소\n let deployDay = daysLeftArr[0];\n // 각 배포에 몇 개의 기능이 배포될지 셀 변수\n let cnt = 0;\n // 각 배포에 몇 개의 기능이 배포될지 저장할 배열\n const answer = [];\n\n // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포\n daysLeftArr.forEach((daysLeft) => {\n if (deployDay < daysLeft) {\n deployDay = daysLeft;\n answer.push(cnt);\n cnt = 0;\n }\n cnt++;\n });\n answer.push(cnt);\n\n // 정답 반환\n return answer;\n}", - "probId": "42586" - }, - { - "id": "5egs3UUVQZKQu_4u4UAok", - "author": "RyanDeclan", - "code": "// 예제1) 입력값 : [93, 30, 55], [1, 30, 5]\nfunction solution(progresses, speeds) {\n // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열\n let countBox = [];\n let completeBox = [];\n for(k=1; k<100; k++){\n let complete = []\n for(i=0; i= 100){\n complete.push([i,k]);\n progresses.splice(i,1,\"end\")\n } \n }\n if(complete[0] != null)completeBox.push(...complete)\n } \n completeBox.sort((a,b) => a[0] - b[0])\n \n //여기까지 한다면 console.log(completeBox) \t[ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. \n // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 \n \n // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 \n let count = 0;\n completeBox.reduce((acc, cur, i) => {\n if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 \n if(i) countBox.push(count)\n acc[0] = cur[1];\n count = 0;\n count++\n }else{count++}\n if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. \n return acc\n } ,[0])\n return countBox;\n}", - "probId": "42586" - }, - { - "id": "I_BeTPeqYJu7WrkmGpgOY", - "author": "codeisneverodd", - "code": "function solution(bridge_length, weight, truck_weights) {\n const bridge = new Array(bridge_length).fill(0)\n let tick = 0\n do {\n tick++\n bridge.pop()\n bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ?\n bridge.unshift(truck_weights.shift()) : bridge.unshift(0)\n } while (bridge.reduce((a, b) => a + b) !== 0)\n return tick;\n}", - "probId": "42583" - }, - { - "id": "-cHOpUytMAnEUFlNx9D78", - "author": "jaewon1676", - "code": "function solution(bridge_length, weight, truck_weights) {\n var answer = 0; // 총 걸리는 시간\n let bridge = []; // 다리를 건너는 트럭\n let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게\n \n while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다.\n answer++; // 1초 추가\n if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다.\n bridge_weight -= bridge.shift();\n }\n if (bridge_weight + truck_weights[0] > weight) { \n bridge.push(0);\n continue;\n }\n let truck_weight = truck_weights.shift();\n bridge.push(truck_weight);\n bridge_weight += truck_weight;\n }\n \n answer += bridge_length;\n \n return answer;\n }", - "probId": "42583" - }, - { - "id": "WOEHE3aeD1nT7kWkRw_ng", - "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = 0;\n let find = false\n const nCountOne = countOne(n.toString(2))\n let counter = 1\n while (!find) {\n if (nCountOne === countOne((n + counter).toString(2))) {\n answer = n + counter\n find = true\n }\n counter++\n }\n return answer;\n}\n\nconst countOne = (str) => {\n return str.split('').reduce((sum, currentChar) =>\n currentChar === '1' ? sum += 1 : sum, 0)\n}", - "probId": "12911" - }, - { - "id": "a3oIfmg9mz5ioPQMr21vu", - "author": "prove-ability", - "code": "function solution(n) {\n let i = n;\n n = n.toString(2).match(/1/g).length;\n while(true) {\n i++;\n const value = i.toString(2).match(/1/g).length;\n if(n === value) return i;\n }\n}", - "probId": "12911" - }, - { - "id": "l95ho5Jwir614tOg5zY0m", - "author": "dia", - "code": "function solution(n) {\n const count = (num) => num.toString(2).match(/1/g).length;\n for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i\n}", - "probId": "12911" - }, - { - "id": "Hw4Uvj4iiYalJiSxgHjUR", - "author": "codeisneverodd", - "code": "function solution(queue1, queue2) {\n const getSum = arr => arr.reduce((a, c) => a + c, 0);\n\n if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1;\n\n const queue = [...queue1, ...queue2, ...queue1, ...queue2];\n const maxCount = queue.length;\n const average = getSum(queue) / 4;\n let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length];\n\n const pop = () => {\n currentSum -= queue[start];\n start += 1;\n count += 1;\n };\n const insert = () => {\n currentSum += queue[end];\n end += 1;\n count += 1;\n };\n\n while (count <= maxCount) {\n if (currentSum < average) insert();\n if (currentSum > average) pop();\n if (currentSum === average) return count;\n }\n return -1;\n}", - "probId": "118667" - }, - { - "id": "fTOq7pYYB9bscgn2zupAh", - "author": "jaewon1676", - "code": "function solution(land) {\n var answer = 0;\n \n for (i = 1; i < land.length; i++){\n land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3]));\n land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3]));\n land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3]));\n land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2]))\n }\n answer = land[land.length - 1]\n return Math.max(...answer)\n}\n/* 풀이 과정\n1. land의 행만큼 반복문을 돌린다.\n2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다.\n3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/", - "probId": "12913" - }, - { - "id": "HPyYrHXIrMycrG0bq4EQD", - "author": "codeisneverodd", - "code": "function solution(land) {\n for (let rowIndex = 1; rowIndex < land.length; rowIndex++) {\n for (let colIndex = 0; colIndex < land[0].length; colIndex++) {\n land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1))\n }\n }\n return Math.max(...land[land.length - 1])\n}", - "probId": "12913" - }, - { - "id": "ZZz7GQgS64dtdd3u9DJyV", - "author": "codeisneverodd", - "code": "function solution(n) {\n if (n < 2) return 1;\n const count = [0, 1, 2, ...Array(n - 2).fill(0)];\n count.forEach((_, i) => {\n if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567;\n });\n return count[n];\n}\n//재귀를 사용하면 콜스택 오버플로우가 발생합니다.", - "probId": "12914" - }, - { - "id": "Wu7paTcG7YzIMjk1uBSP7", - "author": "codeisneverodd", - "code": "function solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor2(w, h)\n const erasedBoxInUnit = h / gcd + w / gcd - 1\n answer = w * h - erasedBoxInUnit * gcd\n return answer;\n}\n\nlet greatestCommonDivisor2 = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", - "probId": "62048" - }, - { - "id": "rn6KK1xRT0IxHWmnGvOY4", - "author": "jaewon1676", - "code": "// 유클리드 호제법을 이용한 최대 공약수 구하기\nfunction gcd(w, h) { \n let mod = w % h; // w와 h의 나머지를 구합니다.\n\n if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다.\n return h;\n }\n // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다.\n return gcd(h, mod);\n}\nfunction solution(w, h) {\n const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다.\n return w * h - (w + h - gcdVal);\n}", - "probId": "62048" - }, - { - "id": "sj4JCFVuhirDTa3u5lH4y", - "author": "yongchanson", - "code": "function solution(w,h){\n const slope = h / w;\n let cnt = 0;\n //대각선 아래에 위치한 도형의 개수를 구합니다.\n //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다.\n for(let i = 1; i <= w; i++){\n cnt += Math.ceil(slope * i);\n }\n //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다.\n return ((w*h - cnt) * 2);\n}", - "probId": "62048" - }, - { - "id": "sDZT5JV-1nxnQsPC7kAoX", - "author": "codeisneverodd", - "code": "function solution(orders, course) {\n var answer = [];\n for (const selectNum of course) {\n let combinations = []\n for (const order of orders) {\n getCombinations(Array.from(order), selectNum)\n .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다.\n .forEach(combString => combinations.push(combString))\n }\n const combCounts = combinations.reduce((counts, combination) => {\n counts[combination] = (counts[combination] || 0) + 1;\n return counts;\n }, {});\n let maxCount = 0, maxComb = []\n for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb]\n for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb)\n answer.push(...maxComb)\n }\n answer = answer.sort()\n return answer;\n}\n\nconst getCombinations = (array, selectNum) => {\n const result = [];\n if (selectNum === 1) return array.map((element) => [element]);\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}", - "probId": "72411" - }, - { - "id": "7irtNw9hvAlaZPb_MDTcj", - "author": "codeisneverodd", - "code": "function solution(word) {\n const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 };\n const price = calculatePrice([1], 5);\n return word\n .split(\"\")\n .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet])\n .reduce((acc, curr) => acc + curr, 0);\n}\nconst calculatePrice = (result = [1], targetLength) => {\n if (result.length === targetLength) return result;\n return calculatePrice([result[0] * 5 + 1, ...result], targetLength);\n};\n/*\n각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까?\n4번째 자리 - 1\n3번째 자리 - 1*5 + 1 = 6\n2번째 자리 - 6*5 + 1 = 31\n1번째 자리 - 31*5 + 1 = 156\n0번째 자리 - 156*5 + 1 = 781\n\n검증(1부터 시작하므로 1 + 비용)\nI => (1 + 781 * 2) = 1563\nEIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189\nAAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10\nAAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6\n추천 레퍼런스: https://seongho96.tistory.com/50\n*/", - "probId": "84512" - }, - { - "id": "-5BZuGm5AyC5ZKLKpd7JE", - "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = 0;\n let lengthArr = []\n for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length)\n answer = Math.min(...lengthArr)\n return answer;\n}\n\nfunction compressedString(str, unitNum) {\n let count = 1\n let result = ['']\n for (let repeat = 0; repeat <= str.length / unitNum; repeat++) {\n const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum)\n if (result[result.length - 1] === slicedGroup) {\n count++\n } else {\n if (count > 1) result[result.length - 1] = count + result[result.length - 1]\n result.push(slicedGroup)\n count = 1\n }\n }\n return result.join('')\n}", - "probId": "60057" - }, - { - "id": "uW25FzfRyHvkJYHKFHBWN", - "author": "chaerin-dev", - "code": "function solution(s) {\n // len: 압축 전 문자열 길이\n const len = s.length;\n // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화)\n let shortenLen = len;\n\n // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행\n for (let i = 1; i <= len / 2; i++) {\n // cnt: 단위가 반복되는 횟수를 카운트할 변수\n let cnt = 1;\n // temp: 현재 단위 문자열을 임시로 저장해둘 변수\n let temp = s.slice(0, i);\n // shhortenS: 압축 후 문자열을 저장할 변수\n let shortenS = \"\";\n\n // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단\n for (let j = i; j < len; j += i) {\n // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가\n if (temp === s.slice(j, j + i)) cnt++;\n // 현재 단위 문자열과 일치하지 않으면\n else {\n // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 단위가 반복되는 횟수는 다시 1로 초기화\n cnt = 1;\n // 현재 단위 문자열 업데이트\n temp = s.slice(j, j + i);\n }\n }\n\n // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 압축 후 문자열 길이의 최솟값 업데이트\n shortenLen = Math.min(shortenLen, shortenS.length);\n }\n\n // 압축 후 문자열 길이의 최솟값 반환\n return shortenLen;\n}", - "probId": "60057" - }, - { - "id": "Z8cmY--tXmTO-zeIET6sc", - "author": "codeisneverodd", - "code": "function solution(dirs) {\n const move = ([x, y], dir) => {\n let next = [x, y];\n if (dir === 'U') next = [x, y + 1];\n if (dir === 'D') next = [x, y - 1];\n if (dir === 'R') next = [x + 1, y];\n if (dir === 'L') next = [x - 1, y];\n if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y];\n return next;\n };\n\n const isSameRoute = ([s1, e1], [s2, e2]) => {\n const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2;\n return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1));\n };\n\n const trace = {\n visited: [],\n visit(start, end) {\n if (start[0] === end[0] && start[1] === end[1]) return;\n if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]);\n },\n };\n\n let current = [0, 0];\n\n dirs.split('').forEach(dir => {\n const next = move(current, dir);\n trace.visit(current, next);\n current = next;\n });\n\n return trace.visited.length;\n}", - "probId": "49994" - }, - { - "id": "Kq1GVFNQc8tCairBbSKlp", - "author": "pereng11", - "code": "// 다익스트라 + 최소힙 O( N * logN ) \n // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 \nclass MinHeap{\n constructor ()\n {\n this.heap = [ null ];\n }\n // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬\n push ( val )\n {\n this.heap.push(val);\n let childIdx = this.heap.length-1;\n let parentIdx = Math.floor(childIdx / 2);\n while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){\n this.swap( childIdx, parentIdx );\n childIdx = parentIdx;\n parentIdx = Math.floor(childIdx / 2);\n }\n }\n pop ()\n {\n if ( this.heap.length === 1 )\n {\n return undefined;\n }\n // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬\n const minNode = this.heap[ 1 ];\n this.heap[ 1 ] = this.heap[ this.heap.length - 1 ];\n this.heap.pop();\n let parentIdx = 1;\n let leftChildIdx = 2;\n let rightChildIdx = 3;\n while ( parentIdx < this.heap.length )\n {\n // 자식이 없는 경우 \n if ( !this.heap[ leftChildIdx ] )\n {\n break;\n } // 왼쪽 자식만 있는 경우\n else if ( !this.heap[ rightChildIdx ] )\n {\n if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] )\n {\n this.swap( parentIdx, leftChildIdx );\n }\n break;\n // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬\n } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] )\n {\n const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx;\n this.swap( parentIdx, minChildIdx );\n parentIdx = minChildIdx;\n leftChildIdx = parentIdx * 2\n rightChildIdx = parentIdx * 2 + 1;\n } else\n {\n // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지\n break;\n }\n }\n return minNode;\n }\n swap ( idx1, idx2 )\n {\n [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ];\n }\n length ()\n {\n return this.heap.length;\n }\n}\n \nfunction solution ( N, road, K )\n{\n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const heap = new MinHeap();\n\n //시작점 삽입\n heap.push( [sp, 0] );\n\n // 가장 가까운 목적지부터 순서대로 방문\n while ( heap.length() > 1 )\n {\n //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리]\n const [ ep, val ] = heap.pop();\n //아직 방문하지 않은 곳만 처리\n if ( !visited[ ep ] )\n {\n //방문처리, 거리 저장\n visited[ ep ] = true;\n dist[ ep ] = val;\n //방문 지점을 거쳐서 가는 다른 목적지 구하기\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n {\n heap.push( [ nextEp, val + nextVal ] );\n }\n })\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", - "probId": "12978" - }, - { - "id": "msy-ML-qEtm5CfrdCPenf", - "author": "pereng11 O(N * N);", - "code": "//다익스트라 + 선형탐색\nfunction solution ( N, road, K )\n{ \n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const queue = [];\n\n queue.push( [sp, 0] );\n\n while ( queue.length > 0 )\n {\n const [ ep, val ] = queue.shift();\n if ( dist[ ep ] > val )\n {\n dist[ ep ] = val;\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n if ( dist[ nextEp ] > val + nextVal )\n {\n queue.push( [ nextEp, val + nextVal ] );\n }\n } );\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", - "probId": "12978" - }, - { - "id": "lr1m9SNkA3cP3Kko4poyk", - "author": "minjongbaek", - "code": "// 빛의 이동을 위한 DX, DY 변수를 선언합니다.\nconst DX = [-1, 1, 0, 0];\nconst DY = [0, 0, -1, 1];\n\nfunction solution(grid) {\n\n // DFS에 4방향을 고려하여 문제를 풉니다.\n // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다.\n\n const answer = [];\n\n // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]]\n const visited = Array.from({ length: grid.length }, () => []).map((v) => {\n for (let i = 0; i < grid[0].length; i += 1) {\n v.push(new Array(4).fill(false));\n }\n return v\n });\n\n for (let x = 0; x < grid.length; x += 1) {\n for (let y = 0; y < grid[0].length; y += 1) {\n for (let d = 0; d < 4; d += 1) {\n // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다.\n if (!visited[x][y][d]) {\n const stack = [];\n stack.push([x, y, d]);\n\n let cnt = 0;\n while (stack.length !== 0) {\n const [currentX, currentY, currentD] = stack.pop();\n if (!visited[currentX][currentY][currentD]) {\n visited[currentX][currentY][currentD] = true;\n cnt += 1;\n\n const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다.\n const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다.\n \n stack.push([nextX, nextY, nextD])\n }\n\n }\n answer.push(cnt);\n }\n }\n }\n }\n return answer.sort((a, b) => a - b);\n}\n\n// 다음 행선지를 구하는 함수\nfunction getNextXY(x, y, d, xLength, yLength) {\n x += DX[d];\n y += DY[d];\n\n // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다.\n if (x < 0) x = xLength - 1;\n if (x >= xLength) x = 0;\n if (y < 0) y = yLength - 1;\n if (y >= yLength) y = 0;\n\n return [x, y];\n}\n\n// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수\nfunction getNextD(command, d) {\n if (command === 'L') {\n d = [2, 3, 1, 0][d]\n } else if (command === 'R') {\n d = [3, 2, 0, 1][d]\n }\n return d\n}", - "probId": "86052" - }, - { - "id": "1z-2PinVSvQGSCBO6kbcX", - "author": "codeisneverodd", - "code": "function solution(n) {\n const snail = Array.from(Array(n), (_, index) => Array(index + 1));\n let currentNum = 0;\n let [currentRow, currentCol] = [-1, 0];\n let shouldMove = n;\n while (shouldMove > 0) {\n for (let i = 0; i < shouldMove; i++)\n snail[++currentRow][currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 1; i++)\n snail[currentRow][++currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 2; i++)\n snail[--currentRow][--currentCol] = ++currentNum;\n shouldMove -= 3;\n }\n return snail.flatMap((num) => num);\n}", - "probId": "68645" - }, - { - "id": "r_27wlpTxUvAtFpPJ1Muf", - "author": "jaewon1676", - "code": "function solution(n) {\n const answer = new Array(n).fill().map((e, i) => new Array(i + 1));\n // 이차원배열을 만들어준다\n \n let count = 0;\n let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다.\n let y = 0; // 열 \n while (n > 0) {\n for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다.\n for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다.\n for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다.\n \n n -= 3;\n }\n return answer.flatMap(e => e);\n // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. \n // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] \n // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7]\n}", - "probId": "68645" - }, - { - "id": "lVgctjAf-exC5vJPEUJbT", - "author": "codeisneverodd", - "code": "function solution(expression) {\n var answer = 0;\n const mathExp = ['*', '+', '-']\n let priorityArr = Permutation(mathExp, 3)\n const calculated = []\n for (const priority of priorityArr) {\n const expressionArr = expression.split(/(\\D)/)\n for (const exp of priority) {\n while (expressionArr.includes(exp)) {\n const index = expressionArr.indexOf(exp)\n expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join('')))\n }\n }\n calculated.push(Math.abs(expressionArr[0]))\n }\n answer = Math.max(...calculated)\n return answer\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}", - "probId": "67257" - }, - { - "id": "rWHtuGCQ8Bi-ns1CkKnGB", - "author": "codeisneverodd", - "code": "function solution(infos, queries) {\n const infoData = {};\n\n const fetchInfoData = (keyArr, score, start) => {\n const key = keyArr.join('');\n\n infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]);\n\n for (let i = start; i < keyArr.length; i++) {\n fetchInfoData(\n keyArr.map((v, index) => (index === i ? '-' : v)),\n score,\n i + 1\n );\n }\n };\n\n const getPassCount = (key, passScore) => {\n const scores = infoData[key];\n\n if (!scores) return 0;\n\n let [left, right] = [0, scores.length];\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n scores[mid] >= passScore ? (right = mid) : (left = mid + 1);\n }\n\n return scores.length - left;\n };\n\n infos\n .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]])\n .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0));\n\n Object.keys(infoData).forEach(key => {\n infoData[key].sort((a, b) => a - b);\n });\n\n return queries\n .map(query => query.replace(/ and /g, '').split(' '))\n .map(([key, passScore]) => getPassCount(key, +passScore));\n}\n// 주의 할 점\n// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림\n// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림.\n// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음.", - "probId": "72412" - }, - { - "id": "ADsyb_WjuSSyUyZN5m2ms", - "author": "iHoHyeon", - "code": "function solution(begin, end) {\n return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx));\n // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다.\n}\n \nconst calc = (number) => {\n if (number === 1) return 0;\n // 1번째 위치는 무조건 0블록이 위치\n\n for (let i = 2; i <= Math.sqrt(number); i++) {\n if (number % i === 0 && number / i <= 10_000_000) return number / i;\n // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외\n }\n\n return 1;\n};\n\n/*\n 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는\n 시간 / 공간 복잡도가 급상승\n\n -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자\n \n -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다.\n\n -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다.\n\n + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다.\n*/", - "probId": "12923" - }, - { - "id": "epYEmCvF69vISKQQao27r", - "author": "codeisneverodd", - "code": "function solution(n) { //수학적 풀이는 별도로 하지 않았습니다.\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n let sum = 0\n for (let j = i; j <= n; j++) {\n sum += j\n if (sum >= n) {\n if (sum === n) answer++\n break\n }\n }\n }\n return answer;\n}", - "probId": "12924" - }, - { - "id": "P-SWSqmBiDEVa1fxk6yWa", - "author": "prove-ability", - "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n let sum = 0;\n for(let j = i; j <= n; j++) {\n sum += j;\n if(sum > n) break;\n if(n === sum) {\n answer++;\n break;\n }\n }\n }\n return answer;\n}", - "probId": "12924" - }, - { - "id": "56IM1kIWG8vovFb8FvlKD", - "author": "yongchanson", - "code": "function solution(n) {\n /*\n 정답 = n의 홀수 약수의 개수\n 15의 홀수 약수 : 1,3,5,15\n 1+2+3+4+5=15 (중간값 3)\n 4+5+6=15 (중간값 5)\n 7+8=15 (연속된 값)\n 15=15 (15)\n */\n let result = 0;\n\n for (let i = 1; i <= n; i++) {\n if (n % i == 0 && i % 2 == 1) result++;\n }\n return result;\n}", - "probId": "12924" - }, - { - "id": "8igzK_8Vg_mn3wJvxre2g", - "author": "codeisneverodd", - "code": "function solution(skill, skill_trees) {\n var answer = 0;\n for (const tree of skill_trees) {\n let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x))\n if (checkOrder(check)) answer += 1\n }\n return answer;\n}\n\nfunction checkOrder(checkArr) {\n for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false\n return true\n}", - "probId": "49993" - }, - { - "id": "_Y9o25wC8QdSGtoAs53PM", - "author": "codeisneverodd", - "code": "// 문제 풀이 전략\n// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다.\n// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다.\n// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다.\n// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다.\n// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다.\n// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다\n// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다.\n// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다.\nfunction solution(possibleArrows, apeachComb) {\n const compareTable = apeachComb.map(apeachArrow => ({\n apeachArrow,\n ryanArrow: 0,\n }));\n const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows);\n const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff));\n const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff);\n if (maxScoreDiff <= 0) return [-1];\n const getIndexOfLastArrow = arrowTable =>\n arrowTable.length -\n arrowTable\n .slice()\n .reverse()\n .findIndex(x => x !== 0);\n return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable;\n}\nfunction getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) {\n const { apeachArrow } = compareTable[currentIndex];\n const lastIndex = compareTable.length - 1;\n const possibleRyanArrows = [\n 0,\n numberOfArrowLeft > apeachArrow && apeachArrow + 1,\n numberOfArrowLeft >= apeachArrow && apeachArrow,\n ];\n\n if (currentIndex === lastIndex || numberOfArrowLeft === 0) {\n if (numberOfArrowLeft > 0) {\n compareTable[compareTable.length - 1] = {\n apeachArrow,\n ryanArrow: numberOfArrowLeft,\n };\n }\n const appeachScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) =>\n apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc,\n 0\n );\n const ryanScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc),\n 0\n );\n return [\n {\n scoreDiff: ryanScore - appeachScore,\n ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow),\n },\n ];\n }\n return [\n ...possibleRyanArrows.flatMap(ryanUsedArrow => {\n const nextCompareTable = [...compareTable];\n nextCompareTable.splice(currentIndex, 1, {\n apeachArrow,\n ryanArrow: ryanUsedArrow,\n });\n return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow);\n }),\n ];\n}", - "probId": "92342" - }, - { - "id": "vXqqWwDddeHUK1og0nBmR", - "author": "codeisneverodd", - "code": "function solution(n, words) {\n var answer = [];\n let turn = 1\n for (let i = 1; i < words.length; i++) {\n let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i]))\n if (i % n === 0) turn++\n if (!pass) return [i % n + 1, turn]\n }\n return [0, 0];\n}", - "probId": "12981" - }, - { - "id": "oejp1FMB4gLCyabKsl2QQ", - "author": "codeisneverodd", - "code": "function solution(n, a, b) {\n let currentRound = 1;\n const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호\n while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다.\n if (myNextNumber(a) === myNextNumber(b)) break\n a = myNextNumber(a)\n b = myNextNumber(b)\n currentRound++\n }\n return currentRound\n}", - "probId": "12985" - }, - { - "id": "1qQBLwDgkV8i1jHbXrqgo", - "author": "le2sky", - "code": "function solution(n, a, b) {\n let arr = Array.from({ length: n }, () => 0)\n arr[b - 1] = \"B\"\n arr[a - 1] = \"A\"\n\n const isDiff = () => {\n return (\n (arr.indexOf(\"A\") + 1 > arr.length / 2 && arr.indexOf(\"B\") + 1 <= arr.length / 2) ||\n (arr.indexOf(\"A\") + 1 <= arr.length / 2 && arr.indexOf(\"B\") + 1 > arr.length / 2)) ? true : false\n };\n const isLeft = () => {\n return (arr.indexOf(\"A\") + 1 > arr.length / 2) ? false : true\n };\n\n //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴\n while (!isDiff()) {\n if (isLeft()) {\n arr.splice(arr.length / 2)\n } else {\n arr.splice(0, arr.length / 2)\n }\n }\n return Math.log2(arr.length)\n}", - "probId": "12985" - }, - { - "id": "WqmL2Na4bYUXvbpas_beg", - "author": "codeisneverodd", - "code": "function solution(record) {\n var answer = [];\n const users = {}\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action !== 'Leave') users[id] = name\n })\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`)\n if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`)\n })\n return answer;\n}", - "probId": "42888" - }, - { - "id": "L4ouXXaVgcMhVlgbrHcAW", - "author": "jaewon1676", - "code": "function solution(record) {\n let answer = [];\n const map = new Map();\n \n for (let i = 0; i < record.length; ++i) {\n const [state, uid, name] = record[i].split(' '); \n\n if (state == 'Leave') {\n answer.push([uid, '님이 나갔습니다.']);\n \n continue;\n }\n \n if (state == 'Enter') {\n answer.push([uid, '님이 들어왔습니다.']);\n }\n map.set(uid, name);\n }\n return answer.map(ele => map.get(ele[0]) + ele[1]);\n}", - "probId": "42888" - }, - { - "id": "ukiGWrvIwF3CSE8NsZGZf", - "author": "chaerin-dev", - "code": "function solution(record) {\n // 최종 메시지를 저장할 배열\n let result = [];\n // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열\n let resultId = [];\n // 유저의 아이디: 닉네임 쌍을 저장할 Map\n let idNameMap = new Map();\n\n // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환\n record = record.map((e) => e.split(\" \"));\n\n // record의 각 요소에 대해\n record.forEach((e) => {\n // 각 요소의 첫 번째 요소(Enter/Leave/Change)가\n switch (e[0]) {\n // Enter이면\n case \"Enter\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 들어왔습니다.\");\n // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장\n idNameMap.set(e[1], e[2]);\n break;\n // Leave이면\n case \"Leave\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 나갔습니다.\");\n break;\n // Change이면\n case \"Change\":\n // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경\n idNameMap.set(e[1], e[2]);\n break;\n }\n });\n\n // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환\n return result.map((e, i) => idNameMap.get(resultId[i]) + e);\n}", - "probId": "42888" - }, - { - "id": "-nrwIjEg7lUKSi4DaTTEY", - "author": "codeisneverodd", - "code": "function solution(s) {\n let opened = 0;\n for (const bracket of s) {\n if (bracket === \"(\") opened += 1;\n if (bracket === \")\") opened -= 1;\n if (opened < 0) return false;\n }\n return opened === 0;\n}", - "probId": "12909" - }, - { - "id": "CI2BZYf06lWIw_JFexsaq", - "author": "codeisneverodd", - "code": "function solution(clothes) {\n\tvar answer = 0;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes) {\n\t\tif (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = [];\n\t\tspyWear[clothNPart[1]].push(clothNPart[0]);\n\t}\n\tconst clothesCount = [];\n\tfor (const part in spyWear) clothesCount.push(spyWear[part].length + 1);\n\tanswer =\n\t\tclothesCount.reduce((previous, current) => previous * current, 1) - 1;\n\treturn answer;\n}", - "probId": "42578" - }, - { - "id": "39IUEp57bhrqiS-t-iI-D", - "author": "hyosung", - "code": "function solution(clothes) {\n\tlet answer = 1;\n\t// 옷 종류\n\tconst types = {};\n\t// 반복문 최적화 - length, 비교연산 제거\n\tconst length = clothes.length;\n\tfor (let i = length; i--; ) {\n\t\t// 해당 옷의 종류가 없다면 종류 1\n\t\tif (!types[clothes[i][1]]) types[clothes[i][1]] = 1;\n\t\t// 해당 옷의 종류가 있다면 종류 증가\n\t\telse types[clothes[i][1]] += 1;\n\t}\n\t// (종류 별 값 + 1 ) 을 다 곱셈\n\tObject.values(types).forEach((v) => {\n\t\tanswer *= v + 1;\n\t});\n\n\treturn answer - 1;\n}", - "probId": "42578" - }, - { - "id": "DSBtX18gKMNaJrGch8gX7", - "author": "jaewon1676", - "code": "function solution(clothes) {\n var answer = 1;\n var obj={};\n for(var i=0;i\n clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1)\n );\n\n // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐\n // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나)\n // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨\n let answer = 1;\n for (let key of Object.keys(clothsObj)) {\n answer *= clothsObj[key] + 1;\n }\n\n // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기\n return answer - 1;\n}", - "probId": "42578" - }, - { - "id": "HsabCQxkazjk8-nxkXZLR", - "author": "codeisneverodd", - "code": "function solution(s) {\n const removeZero = s => {\n const removed = s\n .split('')\n .filter(n => n !== '0')\n .join('');\n return { removed, count: s.length - removed.length };\n };\n\n const convertToBinary = (s, turnCount, removedCount) => {\n if (s === '1') return [turnCount, removedCount];\n const { removed, count } = removeZero(s);\n return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count);\n };\n\n return convertToBinary(s, 0, 0);\n}", - "probId": "70129" - }, - { - "id": "3DQJbbkh30kukb_u8-iUt", - "author": "RyanDeclan", - "code": "function solution(s) {\n let box = [0,0]\n while(s.length > 1){\n let reamain = s.replace(/0/g,\"\").length\n box[0] += 1\n box[1] += (s.length - reamain)\n s = reamain.toString(2)\n }\n return box;\n}", - "probId": "70129" - }, - { - "id": "CAQQEDkBb3To_C9jvFqs_", - "author": "codeisneverodd", - "code": "function solution(n, wires) {\n const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b);\n\n const convertWiresToTree = wires => [...new Set(wires.flat())];\n\n const generateTree = (wires, tree) => {\n if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree;\n\n const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire));\n const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))];\n\n return [...new Set(generateTree(nextWires, nextTree))];\n };\n\n let minDiff = Infinity;\n const length = convertWiresToTree(wires).length;\n\n wires.forEach((_, i) => {\n const [initWire, ...remainWires] = wires.filter((_, j) => j !== i);\n const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length;\n const diff = Math.abs(lengthA - (length - lengthA));\n minDiff = Math.min(diff, minDiff);\n });\n\n return minDiff;\n}", - "probId": "86971" - }, - { - "id": "J3oOt_BhD7UCkxSbXOpzE", - "author": "codeisneverodd", - "code": "function solution(n) {\n var ans = 0;\n while (n > 0) {\n if (n % 2 !== 0) {\n n = (n - 1) / 2\n ans++\n } else {\n n = n / 2\n }\n }\n return ans;\n}", - "probId": "12980" - }, - { - "id": "gmqlVlP3Y8jTkL8DkaU7B", - "author": "yongchanson", - "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 2;\n n = Math.floor(n / 2);\n }\n return result;\n}", - "probId": "12980" - }, - { - "id": "QoGVCaku34rJVqQRX2TJp", - "author": "codeisneverodd", - "code": "function solution(name) {\n var answer = 0;\n const length = name.length;\n let upDownCount = 0\n let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때\n for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i])\n for (let startOfA = 0; startOfA < name.length; startOfA++) {\n let endOfA = startOfA + 1;\n while (endOfA < length && name[endOfA] === 'A') endOfA++;\n const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA]\n leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1\n leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A..\n }\n answer = upDownCount + Math.min(...leftRightCountList)\n return answer;\n}\n\nfunction minUpOrDownCount(destination) {\n const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const index = Alphabet.indexOf(destination)\n return Math.min(index, Alphabet.length - index)\n}", - "probId": "42860" - }, - { - "id": "t6z3H25tPulkTlyJaRhfF", - "author": "ljw0096", - "code": "function solution(fees, records) {\n const answer = []\n\n const parkingTable = getParkingTable(records)\n const sortedKeys = Object.keys(parkingTable).sort()\n\n for (const targetCar of sortedKeys) {\n if (parkingTable[targetCar].length % 2 === 1) {\n parkingTable[targetCar].push(['23:59', 'OUT'])\n }\n const totalTime = getTotalTime(parkingTable, targetCar)\n const fee = calculateFee(totalTime, fees)\n answer.push(fee)\n }\n\n return answer\n}\n\nfunction getParkingTable(records) {\n const parkingTable = {}\n\n records.forEach((val) => {\n const info = val.split(' ')\n if (Object.keys(parkingTable).includes(info[1])) {\n parkingTable[info[1]].push([info[0], info[2]])\n } else {\n parkingTable[info[1]] = [[info[0], info[2]]]\n }\n })\n\n return parkingTable\n}\n\nfunction getTotalTime(parkingTable, targetCar) {\n let totalTime = 0\n for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) {\n totalTime += calculateTotalTime(\n parkingTable[targetCar][i][0],\n parkingTable[targetCar][i + 1][0]\n )\n }\n return totalTime\n}\n\nfunction calculateTotalTime(time1, time2) {\n const [hour1, minute1] = time1.split(':').map((val) => parseInt(val))\n const [hour2, minute2] = time2.split(':').map((val) => parseInt(val))\n\n return hour2 * 60 + minute2 - (hour1 * 60 + minute1)\n}\n\nfunction calculateFee(totalTime, feeInfo) {\n let fee = 0\n if (feeInfo[0] >= totalTime) {\n fee = feeInfo[1]\n } else {\n fee =\n feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3]\n }\n return fee\n}", - "probId": "92341" - }, - { - "id": "kNhne_-9qa6A70jJI3s7A", - "author": "codeisneverodd", - "code": "function solution(n, k) {\n const getFactorial = n => {\n const result = [1, 1, 2, ...Array(n - 2)];\n result.forEach((_, i) => {\n if (i > 2) result[i] = result[i - 1] * i;\n });\n return result;\n };\n\n const getDivision = (dividend, divisor) => {\n const quotient = Math.floor(dividend / divisor);\n const remainder = dividend % divisor;\n return [quotient, remainder];\n };\n\n const stepCount = getFactorial(n).reverse();\n\n const generateSteps = (k, step) => {\n const [q, r] = getDivision(k, stepCount[step]);\n if (r === 0) return [q];\n return [q, ...generateSteps(r, step + 1)];\n };\n\n const answer = [];\n\n const steps = generateSteps(k - 1, 0);\n\n const notUsedNums = Array.from({ length: n }, (_, i) => i + 1);\n\n steps.slice(1).forEach(q => {\n answer.push(notUsedNums[q]);\n notUsedNums.splice(q, 1);\n });\n\n return [...answer, ...notUsedNums];\n}", - "probId": "12936" - }, - { - "id": "HK9ptDmy8O0AWl-b4C8xX", - "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = -1;\n let notPairStack = []\n notPairStack.push(s[0])\n for (let i = 1; i < s.length; i++) {\n if (notPairStack[notPairStack.length - 1] === s[i]) {\n notPairStack.pop()\n } else {\n notPairStack.push(s[i])\n }\n }\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}", - "probId": "12973" - }, - { - "id": "A1eHRdaz8Haz6HcQ661RQ", - "author": "jaewon1676", - "code": "function solution(s){\n let cnt = 0; // 빼준 부분을 카운트 해줍니다\n let answer;\n let stack = []\n for (let i of s){\n if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다\n stack.pop();\n cnt++;; \n } else {\n stack.push(i)\n }\n }\n \n (s.length / 2 == cnt ? answer = 1 : answer = 0 ) \n // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다\n return answer;\n }\n // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다", - "probId": "12973" - }, - { - "id": "CQt47w1Rkj3wzrx_KPRQH", - "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = '';\n const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b)\n answer = arr[0] + ' ' + arr[arr.length - 1]\n return answer;\n}", - "probId": "12939" - }, - { - "id": "gJbHOI90B9U2PgJhfx5lx", - "author": "jaewon1676", - "code": "function solution(s) {\n s = s.split(' ')\n s.sort((a, b) => {return a - b}) // 오름차순 정렬\n let small = s[0] // s의 최솟값\n let large = s[s.length - 1] // s의 최댓값\n return (small + ' ' + large)\n}", - "probId": "12939" - }, - { - "id": "yBhUFqKetjxAdygubedf4", - "author": "prove-ability", - "code": "function solution(s) {\n s = s.split(\" \").map((v) => parseInt(v, 10))\n return `${Math.min(...s)} ${Math.max(...s)}`;\n}", - "probId": "12939" - }, - { - "id": "RCe6dqEFVBlbw2Z1vzhwn", - "author": "yongchanson", - "code": "function solution(s) {\n let arr = s.split(\" \").sort((a, b) => a - b);\n arr.splice(1, arr.length - 2, \" \");\n let result = arr.join(\"\");\n return result;\n}", - "probId": "12939" - }, - { - "id": "ZagjFEXwfraHemfRfFgUS", - "author": "codeisneverodd", - "code": "function solution(A, B) {\n var answer = 0;\n A = A.sort((a, b) => a - b)\n B = B.sort((a, b) => b - a)\n for (let i = 0; i < A.length; i++) answer += A[i] * B[i]\n return answer;\n}", - "probId": "12941" - }, - { - "id": "4bClFnncYWhFex1Lfup3h", - "author": "prove-ability", - "code": "function solution(A,B){\n let sum = 0;\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n \n for(let i = 0, len = A.length; i < len; i++) {\n sum += A[i] * B[i];\n }\n\n return sum;\n}", - "probId": "12941" - }, - { - "id": "jwKRjvyzgD21fL-3MPvht", - "author": "yongchanson", - "code": "function solution(A, B) {\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n return A.reduce((t, n, i) => t + n * B[i], 0);\n}", - "probId": "12941" - }, - { - "id": "ZRCoORaCjptFmvuCGAdyP", - "author": "codeisneverodd", - "code": "function solution(brown, yellow) {\n var answer = [];\n const size = brown + yellow\n answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0]\n return answer;\n}\n\nfunction widthHeightPair(size) {\n let result = []\n for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i])\n return result\n}", - "probId": "42842" - }, - { - "id": "F8IWVoPp35R-_7wvY6KPI", - "author": "jaewon1676", - "code": "function solution(brown, yellow) {\n var answer = [];\n let sum = brown + yellow; \n \n //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색)\n for(let height=3; height {\n const length = matrix.length;\n const half = length / 2;\n const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0]));\n\n if (pass(matrix)) return [matrix[0][0]];\n if (length <= 2) return matrix;\n\n const startPoints = [\n [0, 0],\n [0, half],\n [half, 0],\n [half, half],\n ];\n\n return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half))));\n };\n return quad(arr)\n .flat(Infinity)\n .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]);\n}", - "probId": "68936" - }, - { - "id": "szaRprAfZy_qUOWpA27cx", - "author": "codeisneverodd", - "code": "function solution(number, k) {\n var answer = '';\n let answerStack = [0]\n let deleteCount = -1\n for (let i = 0; i < number.length; i++) {\n while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) {\n answerStack.pop()\n deleteCount++\n }\n if (answerStack.length < number.length - k) answerStack.push(number[i])\n }\n answer = answerStack.join('')\n return answer;\n}", - "probId": "42883" - }, - { - "id": "EyQH8kejDSI0N4q9lG02r", - "author": "jaewon1676", - "code": "function solution(number, k) {\n const stack = [];\n let answer = '';\n \n for(let i=0; i 0 && stack[stack.length-1] < el){\n stack.pop();\n k--;\n }\n stack.push(el);\n }\n stack.splice(stack.length-k, k);\n answer = stack.join(\"\");\n return answer;\n}", - "probId": "42883" - }, - { - "id": "yE5QUyga-dDB9MnM34OhF", - "author": "ssi02014", - "code": "function solution(numbers, target) {\n let answer = 0;\n\n dfs(0, 0);\n return answer;\n\n function dfs(index, sum) {\n // 재귀 종료\n if (index === numbers.length) {\n if (sum === target) {\n answer++;\n }\n return;\n }\n\n dfs(index + 1, sum + numbers[index]);\n dfs(index + 1, sum - numbers[index]);\n }\n}", - "probId": "43165" - }, - { - "id": "NMURcMhFuwRUsJWmaW1To", - "author": "codeisneverodd", - "code": "function solution(numbers, target) {\n var answer = 0;\n const binaryLength = numbers.length;\n const binary = 2 ** binaryLength;\n for (let i = 0; i < binary; i++) {\n const numSlice = numbers.slice();\n const binaryString = i.toString(2).padStart(binaryLength, '0');\n for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null;\n const calculated = numSlice.reduce((prev, current) => prev + current);\n if (calculated === target) answer += 1;\n }\n return answer;\n}", - "probId": "43165" - }, - { - "id": "KG0o_ArOVK7FGDSi2Uxj_", - "author": "codeisneverodd", - "code": "function solution(s) {\n var answer = [];\n let sets = s\n .slice(2, -2)\n .split('},{')\n .map(set => set.split(',').map(x => parseInt(x)))\n .sort((a, b) => a.length - b.length)\n for (const set of sets) answer.push(...set.filter(x => !answer.includes(x)))\n return answer;\n}", - "probId": "64065" - }, - { - "id": "ljkFBseZ_xqY2qwOlnE0q", - "author": "chaerin-dev", - "code": "function solution(s) {\n // 문자열 -> 정수 이차원 배열\n const sArr = s\n .substring(2, s.length - 2)\n .split(\"},{\")\n .map((e) => e.split(\",\").map((e) => parseInt(e)))\n .sort((a, b) => a.length - b.length);\n // 정답을 저장할 배열\n const answer = [];\n // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가\n for (let i = 0; i < sArr.length; i++) {\n for (let j = 0; j < sArr[i].length; j++) {\n const temp = sArr[i][j];\n if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]);\n }\n }\n return answer;\n}", - "probId": "64065" - }, - { - "id": "qEH0Pyao5w3x9ZFjUKlNB", - "author": "jaewon1676", - "code": "function solution(priorities, location) {\n var answer = 0;\n while (true) {\n\n if (priorities[0] < Math.max(...priorities)) {\n if (location - 1 < 0) location = priorities.length\n priorities.push(priorities.shift())\n location--;\n } else {\n answer++;\n if (location - 1 < 0) {\n return answer;\n }\n priorities.shift()\n location--;\n }\n console.log(priorities, location, answer)\n\n }\n return answer\n}", - "probId": "42587" - }, - { - "id": "Rk4Let4yq3vO47W6aO2vR", - "author": "createhb21", - "code": "function solution(priorities, location) {\n var answer = priorities.map((priority, index) => {\n return {\n index,\n priority\n };\n });\n \n let queue = [];\n \n while(answer.length > 0){\n const first = answer.shift();\n const isPriority = answer.some((p) => p.priority > first.priority);\n isPriority ? answer.push(first) : queue.push(first);\n }\n const idx = queue.findIndex(p => p.index === location) + 1;\n return idx;\n }", - "probId": "42587" - }, - { - "id": "Z7hpmyMSWenF2xM3-NSVa", - "author": "codeisneverodd", - "code": "//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다.\nfunction solution(priorities, location) {\n let answer = 0;\n const printer = new Queue;\n priorities.forEach((priority, index) => {\n printer.enqueue([priority, index])\n })\n while (printer.size() > 0) {\n const check = printer.dequeue()\n const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length\n if (countHigherPriority > 0) {\n printer.enqueue(check)\n } else {\n answer += 1\n if (check[1] === location) break\n }\n\n }\n return answer;\n}\n\nclass Queue {\n constructor() {\n this.queue = []\n this.front = 0\n this.rear = 0\n }\n\n enqueue(value) {\n this.queue[this.rear++] = value\n }\n\n dequeue() {\n const value = this.queue[this.front]\n delete this.queue[this.front]\n this.front += 1\n return value\n }\n\n peek() {\n return this.queue(this.front)\n }\n\n size() {\n return this.rear - this.front\n }\n}", - "probId": "42587" - }, - { - "id": "VTaNyHO40w4_74rGMSLnW", - "author": "pereng11", - "code": "//완전 탐색, greedy O(N^2)\nfunction solution(currentFatigue, dungeons) {\n return getMaxCount(currentFatigue, 0, dungeons);\n}\n\nfunction getMaxCount(currentFatigue, visitedCount, dungeons) {\n const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue);\n if (possibleDungeons.length === 0) return visitedCount;\n\n const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => {\n const [_, usedFatigue] = curr;\n const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex);\n const currentCount = getMaxCount(\n currentFatigue - usedFatigue,\n visitedCount + 1,\n nextDungeons\n );\n return Math.max(currentCount, prevCount);\n }, 0);\n\n return maxCount;\n}", - "probId": "87946" - }, - { - "id": "EMiltQkFNcp5H6BUbdl7p", - "author": "codeisneverodd", - "code": "function solution(n) {\n var answer = 0;\n answer = fibonacci1234567(n)\n return answer;\n}\n\nfunction fibonacci1234567(n) { //재귀적으로 하면 시간초과\n let fiboArr = new Array(n + 1).fill(0)\n fiboArr[0] = 0\n fiboArr[1] = 1\n for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과\n return fiboArr[n]\n}", - "probId": "12945" - }, - { - "id": "4DrrCFprxb0yTmo9JtSSy", - "author": "jaewon1676", - "code": "function solution(n) {\n let f_1 = 0;\n let f_2 = 1;\n \n for (let i=2; i<=n; i++) {\n let temp = (f_1 + f_2) % 1234567;\n f_1 = f_2;\n f_2 = temp;\n }\n \n return f_2;\n}", - "probId": "12945" - }, - { - "id": "Y7oLGRpRRd1_S1LWhiXZ8", - "author": "codeisneverodd", - "code": "function solution(n) {\n return move(1, 3, 2, n);\n}\nconst move = (departure, destination, waypoint, numberOfPlate) => {\n if (numberOfPlate === 1) return [[departure, destination]];\n return [\n ...move(departure, waypoint, destination, numberOfPlate - 1),\n ...move(departure, destination, waypoint, 1),\n ...move(waypoint, destination, departure, numberOfPlate - 1),\n ];\n};\n//재귀를 생각해보기에 좋은 문제입니다.\n//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi\n/*\nn개가 있다면\n1. 1->2로 n-1개를 옮김\n2. 1->3으로 가장 큰 1개를 옮김\n3. 2->1로 n-2개를 옮김\n4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김\n의 반복\n\n결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨.\na->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 \n함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음.\n*/", - "probId": "12946" - }, - { - "id": "ekrHtfPyU_KAhsRjznZC_", - "author": "codeisneverodd", - "code": "function solution(rows, columns, queries) {\n var answer = [];\n let matrix = new Array(rows)\n for (let i = 0; i < rows; i++) matrix[i] = new Array(columns)\n for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1\n for (const query of queries) {\n let order = []\n const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1]\n //fill order (row1->row2, col1->col2, row2->row2, col2->col1)\n for (let i = row1; i <= row2; i++) order.push(matrix[i][col1])\n for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i])\n for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2])\n for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i])\n //rotate clockwise\n order.push(order.shift())\n answer.push(Math.min(...order))\n //change value in matrix\n for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift()\n for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift()\n for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift()\n for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift()\n }\n return answer;\n}", - "probId": "77485" - }, - { - "id": "B3sjdQsVrwveW4L7oRxEt", - "author": "codeisneverodd", - "code": "function solution(arr1, arr2) {\n const [row, col] = [arr1.length, arr2[0].length]\n let answer = new Array(row);\n for (let i = 0; i < row; i++) answer[i] = new Array(col)\n //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값\n for (let i = 0; i < row; i++) {\n for (let j = 0; j < col; j++) {\n answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0)\n }\n }\n return answer;\n}", - "probId": "12949" - }, - { - "id": "iKL3fAei0gfK59hQFY4XZ", - "author": "prove-ability", - "code": "function solution(arr1, arr2) {\n var answer = [];\n // 행만큼 반복\n for(let i = 0, len = arr1.length; i < len; i++) {\n const arr = []\n // 열만큼 반복\n for(let j = 0, len = arr1[i].length; j < len; j++) {\n // 각의 배열에서 행을 더해서 arr push\n arr.push(arr1[i][j] + arr2[i][j])\n }\n // 열 만큼 추가된 arr 를 answer 가 추가\n answer.push(arr)\n }\n \n return answer;\n}", - "probId": "12949" - }, - { - "id": "ehCNYvlPKOQOovwHefyQa", - "author": "codeisneverodd", - "code": "function solution(relation) {\n //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다.\n //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다.\n //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다.\n const keys = []\n const totalAttrCount = relation[0].length\n const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1]\n\n //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수\n const isUnique = (relation, attrIndexComb) => {\n let result = Array.from(Array(relation.length), x => '')\n for (const attrIndex of attrIndexComb) {\n relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음.\n }\n return result.length === [...new Set(result)].length\n }\n\n //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다.\n const isMinimal = (attrComb) => {\n for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false\n return true\n }\n\n //가능한 모든 조합을 검사\n for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) {\n const combinations = getCombinations(indexList, attrCount)\n for (const attrComb of combinations) {\n if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb)\n }\n }\n\n return keys.length\n}\n\n//Fn for 1. 조합을 반환하는 함수\nconst getCombinations = (array, selectNumber) => {\n const result = [];\n if (selectNumber === 1) {\n return array.map((element) => [element]);\n }\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}", - "probId": "42890" - }, - { - "id": "DfVmns6ufjgJmwcNV82zI", - "author": "codeisneverodd", - "code": "function solution(n, edge) {\n const graph = Array.from(Array(n + 1), () => [])\n for (const [src, dest] of edge) {\n graph[src].push(dest)\n graph[dest].push(src)\n }\n const distance = Array(n + 1).fill(0)\n distance[1] = 1\n const toBeSearched = [1]\n while (toBeSearched.length > 0) {\n const src = toBeSearched.shift()\n for (const dest of graph[src]) {\n if (distance[dest] === 0) {\n distance[dest] = distance[src] + 1\n toBeSearched.push(dest)\n }\n }\n }\n return distance.filter(x => x === Math.max(...distance)).length\n}", - "probId": "49189" - }, - { - "id": "4SAsYCuYpAaqiXVcDdgW2", - "author": "codeisneverodd", - "code": "function solution(n, computers) {\n let answer = 0\n const visited = new Array(n).fill(false)\n const newNetwork = (startComputer) => {\n //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다.\n const toBeVisited = [startComputer]\n while (toBeVisited.length > 0) {\n //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다\n const currentComputer = toBeVisited.pop()\n visited[currentComputer] = true\n for (let nextComputer = 0; nextComputer < n; nextComputer++) {\n if (!visited[nextComputer] && computers[currentComputer][nextComputer]) {\n toBeVisited.push(nextComputer)\n }\n }\n }\n }\n\n for (let startComputer = 0; startComputer < n; startComputer++) {\n if (!visited[startComputer]) {\n newNetwork(startComputer)\n //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다.\n answer++\n }\n }\n return answer\n}", - "probId": "43162" - }, - { - "id": "nKPtmI7XNC26XpIlYbbVA", - "author": "jaewon1676", - "code": "function solution(routes) {\n let cctv = 1; // cctv의 개수는 최소 1개\n routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬\n // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]\n let out = routes[0][1]; // -15\n // 나간 시점(out)은 첫 차량의 나간시점으로 초기화\n \n for(let i = 1; i < routes.length; i++) {\n // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치\n if(out < routes[i][0]) {\n cctv++;\n out = routes[i][1]; // out 시점 업데이트\n }\n \n // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 \n if(out > routes[i][1]) {\n out = routes[i][1]; // out 시점 업데이트 \n }\n }\n \n return cctv;\n}\n// 그리디\n\n// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.\n// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 \n// 나간시점만 검사 해주면 됩니다.\n\n// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.\n// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)\n// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.", - "probId": "42884" - }, - { - "id": "FyidIwW1ocs08d8zOmC5U", - "author": "codeisneverodd", - "code": "//Map과 고차함수를 적극적으로 이용한 풀이\nfunction solution(genres, plays) {\n const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]}\n genres\n .map((genre, id) => [genre, plays[id]])\n .forEach(([genre, play], id) => {\n const data = genreMap.get(genre) || {totalPlay: 0, songs: []}\n genreMap.set(genre, {\n totalPlay: data.totalPlay + play,\n songs: [...data.songs, {play: play, id: id}]\n .sort((a, b) => b.play - a.play)\n .slice(0, 2)\n })\n })\n\n return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...]\n .sort((a, b) => b[1].totalPlay - a[1].totalPlay)\n .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs]\n .map(song => song.id)\n}", - "probId": "42579" - }, - { - "id": "0f66lOgRfqED_HCdCqEw_", - "author": "codeisneverodd", - "code": "function solution(tickets) {\n const routes = [] //최종 가능 루트들을 담을 배열\n const makeRoutes = (currentDepart, remainTickets, currentRoute) => {\n //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수\n if (remainTickets.length > 0) {\n remainTickets.forEach(([depart, nextDepart], index) => {\n if (depart === currentDepart)\n //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정\n makeRoutes(\n nextDepart,\n [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)],\n [...currentRoute, currentDepart])\n })\n } else {\n //티켓을 모두 사용하면 최종 가능 루트에 포함\n routes.push([...currentRoute, currentDepart])\n }\n }\n makeRoutes(\"ICN\", tickets, [])\n return routes.sort()[0]\n}", - "probId": "43164" - }, - { - "id": "-Jf1bx2PH3d58y5kpI3HP", - "author": "jaewon1676", - "code": "function solution(operations) {\n var answer = [];\n for (let i = 0; i < operations.length; i++) {\n // 숫자 삽입\n if (operations[i][0] == 'I') {\n let m = operations[i].substring(2, operations[i].length);\n answer.push(m);\n }\n // if 최댓값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) {\n answer.pop();\n }\n // if 최솟값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) {\n answer.shift();\n }\n\n answer.sort((a, b) => {\n return a - b;\n });\n }\n if (answer.length == 0) return [0, 0];\n else {\n return [parseInt(answer.pop()), parseInt(answer.shift())];\n }\n}\n/* 풀이 과정\n1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다.\n2. answer 배열을 정렬 해준다\n3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다.\n*/", - "probId": "42628" - }, - { - "id": "gZxB5yD_He6RsHLSk2pdY", - "author": "codeisneverodd", - "code": "function solution(n, times) {\n //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right\n let [left, right] = [1, Math.max(...times) * n];\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0);\n //sum은 mid 시간 동안 처리 할 수 있는 사람의 수\n if (sum < n) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다.\n return left;\n}", - "probId": "43238" - }, - { - "id": "qRYf80Us-O-lhErUFQ2mK", - "author": "ryong9rrr", - "code": "class Node {\n constructor(value = '') {\n this.value = value\n this.children = new Map()\n this.count = 0\n }\n}\n\nclass Trie {\n constructor() {\n this.root = new Node()\n }\n\n insert(string) {\n let currentNode = this.root\n for (const char of string) {\n if (!currentNode.children.has(char)) {\n currentNode.children.set(char, new Node(currentNode.value + char))\n }\n currentNode = currentNode.children.get(char)\n currentNode.count++\n }\n }\n\n startsWithCount(prefix) {\n let currentNode = this.root\n for (const char of prefix) {\n if (!currentNode.children.has(char)) {\n return 0\n }\n currentNode = currentNode.children.get(char)\n }\n return currentNode.count\n }\n}\n\nfunction reverseString(string) {\n return [...string].reverse().join('')\n}\n\nfunction solution(words, queries) {\n const table = {}\n const reverseTable = {}\n const counter = {}\n\n words.forEach((word) => {\n const key = word.length\n if (!table[key]) table[key] = new Trie()\n if (!reverseTable[key]) reverseTable[key] = new Trie()\n table[key].insert(word)\n reverseTable[key].insert(reverseString(word))\n if (counter[key] === undefined) counter[key] = 0\n counter[key]++\n })\n\n return queries.map((query) => {\n const key = query.length\n if (!table[key]) {\n return 0\n }\n const tQuery = query.replace(/\\?/g, '')\n if (!tQuery) {\n return counter[key]\n }\n if (query[query.length - 1] === '?') {\n return table[key].startsWithCount(tQuery)\n }\n return reverseTable[key].startsWithCount(reverseString(tQuery))\n })\n}", - "probId": "60060" - }, - { - "id": "PcDl6DL2PASDq1U6OtLKw", - "author": "codeisneverodd", - "code": "//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90\nfunction solution(strs, t) {\n const tLength = t.length; //자주 쓰는 값 미리 계산\n //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다.\n const minCountToIndex = new Array(tLength).fill(Infinity);\n for (let currentIndex = 0; currentIndex < tLength; currentIndex++) {\n //내가 검사할 부분은 t의 0~currentIndex 영역\n const currentSlice = t.slice(0, currentIndex + 1);\n for (const str of strs) {\n //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면\n if (currentSlice.endsWith(str)) {\n //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이\n const frontLength = currentIndex - str.length + 1;\n if (frontLength === 0) {\n //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각\n minCountToIndex[currentIndex] = 1;\n } else {\n //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값\n minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1);\n }\n }\n }\n }\n //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴\n return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1];\n}\n\n//리드미 테스트용 코멘트", - "probId": "12983" - }, - { - "id": "l5j723vS_BE1IKwxV_QEr", - "author": "ryong9rrr", - "code": "function solution(food_times, k) {\n const total = food_times.reduce((a, b) => a + b)\n if (total <= k) {\n return -1\n }\n\n // stack으로 풀기\n const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA)\n\n let prev = 0\n while (stack.length > 0 && k >= 0) {\n const [time] = stack[stack.length - 1]\n const acc = (time - prev) * stack.length\n if (k < acc) {\n break\n }\n stack.pop()\n k -= acc\n prev = time\n }\n\n const result = stack\n .reverse()\n .map(([_, order]) => order)\n .sort((orderA, orderB) => orderA - orderB)\n return result[k % result.length]\n}", - "probId": "42891" - }, - { - "id": "_IJtm5VqJrpQBeBjgqmqR", - "author": "cg10036", - "code": "function solution(n) {\n const fact = n => n ? BigInt(n) * fact(n - 1) : 1n;\n return fact(n * 2) / (fact(n) * fact(n + 1));\n}", - "probId": "12929" - } - ] -} diff --git a/build/newSol.json b/build/newSol.json deleted file mode 100644 index dc3652b..0000000 --- a/build/newSol.json +++ /dev/null @@ -1,27 +0,0 @@ -{ "author": "codeisneverodd", "code": "function solution(n, t, m, timetable) { - const hhmmToMin = (hhmm) => { - const [h, m] = hhmm.split(':').map((v) => +v); - return h * 60 + m; - }; - - const minToHHMM = (min) => { - const hh = ('' + Math.floor(min / 60)).padStart(2, '0'); - const mm = ('' + (min % 60)).padStart(2, '0'); - return `${hh}:${mm}`; - }; - - let clock = hhmmToMin('09:00'); - let waiting = timetable.map((t) => hhmmToMin(t)).sort((a, b) => a - b); - - for (let bus = 0; bus < n - 1; bus++) { - const possible = waiting.filter((time) => time <= clock).length; - const boarding = possible >= m ? m : possible; - waiting = waiting.slice(boarding); - clock += t; - } - - waiting = waiting.filter((time) => time <= clock); - const answer = waiting.length >= m ? waiting[m - 1] - 1 : clock; - return minToHHMM(answer); -} -", "probId": "" } diff --git "a/build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" "b/build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" deleted file mode 100644 index 24affdc..0000000 --- "a/build/oldSols/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234-\353\247\214\353\223\244\352\270\260&120842&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num_list, n) { - let result = []; - for (let i = 0; i < num_list.length / n; i++) { - result = [...result, num_list.slice(i * n, i * n + n)]; - } - return result; -} diff --git "a/build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" "b/build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" deleted file mode 100644 index 4e4415e..0000000 --- "a/build/oldSols/level-0/369\352\262\214\354\236\204&120891&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(order) { - return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length; -} diff --git "a/build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" "b/build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" deleted file mode 100644 index 873de1e..0000000 --- "a/build/oldSols/level-0/7\354\235\230-\352\260\234\354\210\230&120912&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array) { - return [...array.join('')].filter(a => a === '7').length; -} diff --git "a/build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" "b/build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" deleted file mode 100644 index 2077ea2..0000000 --- "a/build/oldSols/level-0/A\353\241\234-B-\353\247\214\353\223\244\352\270\260&120886&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(before, after) { - const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); - return sort(before) === sort(after) ? 1 : 0; -} diff --git "a/build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" "b/build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" deleted file mode 100644 index f28d23e..0000000 --- "a/build/oldSols/level-0/OX\355\200\264\354\246\210&120907&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(quiz) { - return quiz.map(q => { - const [formula, answer] = q.split('='); - return eval(formula) === +answer ? 'O' : 'X'; - }); -} diff --git "a/build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" "b/build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" deleted file mode 100644 index cebb90d..0000000 --- "a/build/oldSols/level-0/k\354\235\230-\352\260\234\354\210\230&120887&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(i, j, k) { - let count = 0; - for (let num = i; num <= j; num++) { - count += [...('' + num)].filter(n => +n === k).length; - } - return count; -} diff --git "a/build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" "b/build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" deleted file mode 100644 index 9d44755..0000000 --- "a/build/oldSols/level-0/n\354\235\230-\353\260\260\354\210\230-\352\263\240\353\245\264\352\270\260&120905&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, numlist) { - return numlist.filter(num => num % n === 0); -} diff --git "a/build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" "b/build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" deleted file mode 100644 index ee4c433..0000000 --- "a/build/oldSols/level-0/\352\260\200\352\271\214\354\232\264-\354\210\230&120890&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array, n) { - const minDiff = Math.min(...array.map(a => Math.abs(a - n))); - return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff); -} diff --git "a/build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" "b/build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" deleted file mode 100644 index 94afcdf..0000000 --- "a/build/oldSols/level-0/\352\260\200\354\234\204-\353\260\224\354\234\204-\353\263\264&120839&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(rsp) { - const win = { 0: 5, 2: 0, 5: 2 }; - return [...rsp].map(num => win[num]).join(''); -} diff --git "a/build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" "b/build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" deleted file mode 100644 index a861b97..0000000 --- "a/build/oldSols/level-0/\352\260\200\354\236\245-\355\201\260-\354\210\230-\354\260\276\352\270\260&120899&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array) { - const max = Math.max(...array); - return [max, array.indexOf(max)]; -} diff --git "a/build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" "b/build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" deleted file mode 100644 index e21ec41..0000000 --- "a/build/oldSols/level-0/\352\260\201\353\217\204\352\270\260&120829&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(angle) { - if (angle === 180) return 4; - if (angle > 90) return 3; - if (angle === 90) return 2; - return 1; -} diff --git "a/build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" "b/build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" deleted file mode 100644 index 9624393..0000000 --- "a/build/oldSols/level-0/\352\260\234\353\257\270-\352\265\260\353\213\250&120837&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(hp) { - const first = Math.floor(hp / 5); - const second = Math.floor((hp - first * 5) / 3); - const third = hp - first * 5 - second * 3; - return first + second + third; -} diff --git "a/build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" "b/build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" deleted file mode 100644 index df5f34e..0000000 --- "a/build/oldSols/level-0/\352\262\271\354\271\230\353\212\224-\354\204\240\353\266\204\354\235\230-\352\270\270\354\235\264&120876&.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(lines) { - const visited = lines.reduce((a, [x, y]) => { - for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1; - return a; - }, {}); - - return Object.values(visited).filter(v => v > 1).length; -} diff --git "a/build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" "b/build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" deleted file mode 100644 index ecb6380..0000000 --- "a/build/oldSols/level-0/\352\263\265-\353\215\230\354\247\200\352\270\260&120843&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers, k) { - const goNext = current => (current + 2) % numbers.length; - let current = 0; - for (let i = 0; i < k - 1; i++) current = goNext(current); - return numbers[current]; -} diff --git "a/build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" "b/build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" deleted file mode 100644 index bdcfcf3..0000000 --- "a/build/oldSols/level-0/\352\265\254\354\212\254\354\235\204-\353\202\230\353\210\204\353\212\224-\352\262\275\354\232\260\354\235\230-\354\210\230&120840&.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(balls, share) { - const [n, m] = [balls, share]; - const fact = [BigInt(1), BigInt(1)]; - - for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i); - - return Number(fact[n] / (fact[n - m] * fact[m])); -} diff --git "a/build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" "b/build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" deleted file mode 100644 index dc0a2c4..0000000 --- "a/build/oldSols/level-0/\353\202\230\353\250\270\354\247\200-\352\265\254\355\225\230\352\270\260&120810&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 % num2; -} diff --git "a/build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" "b/build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" deleted file mode 100644 index 26db990..0000000 --- "a/build/oldSols/level-0/\353\202\230\354\235\264-\354\266\234\353\240\245&120820&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(age) { - return 2022 - age + 1; -} diff --git "a/build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" "b/build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" deleted file mode 100644 index 9c6f012..0000000 --- "a/build/oldSols/level-0/\353\213\244\354\235\214\354\227\220-\354\230\254-\354\210\253\354\236\220&120924&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(common) { - const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0]; - return isAP(common) - ? common[common.length - 1] + common[1] - common[0] - : common[common.length - 1] * (common[1] / common[0]); -} diff --git "a/build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" "b/build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" deleted file mode 100644 index f243aef..0000000 --- "a/build/oldSols/level-0/\353\213\244\355\225\255\354\213\235-\353\215\224\355\225\230\352\270\260&120863&.js" +++ /dev/null @@ -1,22 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(polynomial) { - const countX = x => { - const count = x.replaceAll('x', ''); - return count === '' ? 1 : +count; - }; - - const count = polynomial - .split(' + ') - .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), { - x: 0, - num: 0, - }); - - const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : ''; - const num = count.num > 0 ? '' + count.num : ''; - const plus = x !== '' && num !== '' ? ' + ' : ''; - - return x + plus + num; -} diff --git "a/build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" "b/build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" deleted file mode 100644 index b7c8a5c..0000000 --- "a/build/oldSols/level-0/\353\214\200\353\254\270\354\236\220\354\231\200-\354\206\214\353\254\270\354\236\220&120893&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join(''); -} \ No newline at end of file diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" deleted file mode 100644 index 99e32c9..0000000 --- "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\352\263\261&120804&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 * num2; -} diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" deleted file mode 100644 index 3f9065f..0000000 --- "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\353\202\230\353\210\227\354\205\210&120806&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return Math.floor((num1 / num2) * 1000); -} diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" deleted file mode 100644 index 48d89cb..0000000 --- "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\354\260\250&120803&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 - num2; -} diff --git "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" "b/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" deleted file mode 100644 index 514526e..0000000 --- "a/build/oldSols/level-0/\353\221\220-\354\210\230\354\235\230-\355\225\251&120802&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 + num2 -} \ No newline at end of file diff --git "a/build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" "b/build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" deleted file mode 100644 index 5c01af3..0000000 --- "a/build/oldSols/level-0/\353\223\261\354\210\230-\353\247\244\352\270\260\352\270\260&120882&.js" +++ /dev/null @@ -1,12 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(score) { - const avgs = score.map(([a, b]) => (a + b) / 2); - const avgRank = [...avgs] - .sort((a, b) => b - a) - .map((avg, i) => ({ avg, rank: i + 1 })) - .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a)); - - return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank); -} diff --git "a/build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" "b/build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" deleted file mode 100644 index 82f42d8..0000000 --- "a/build/oldSols/level-0/\353\241\234\352\267\270\354\235\270-\354\204\261\352\263\265?&120883&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(id_pw, db) { - const [id, pw] = id_pw; - if (!db.find(([_id]) => _id === id)) return 'fail'; - return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw'; -} diff --git "a/build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" "b/build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" deleted file mode 100644 index 0a70867..0000000 --- "a/build/oldSols/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244-\355\202\244-\355\201\260-\354\202\254\353\236\214&120585&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array, height) { - return array.filter(a => a > height).length; -} diff --git "a/build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" "b/build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" deleted file mode 100644 index 032c628..0000000 --- "a/build/oldSols/level-0/\353\252\250\354\212\244\353\266\200\355\230\270-(1)&120838&.js" +++ /dev/null @@ -1,16 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(letter) { - const morse = { - '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f', - '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l', - '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r', - '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x', - '-.--':'y','--..':'z' - } - return letter - .split(' ') - .map(l => morse[l]) - .join(''); -} diff --git "a/build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" "b/build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" deleted file mode 100644 index 9781d17..0000000 --- "a/build/oldSols/level-0/\353\252\250\354\235\214-\354\240\234\352\261\260&120849&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return my_string.replace(/[aeiou]/g, ''); -} diff --git "a/build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" "b/build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" deleted file mode 100644 index d199103..0000000 --- "a/build/oldSols/level-0/\353\252\253-\352\265\254\355\225\230\352\270\260&120805&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return Math.floor(num1 / num2); -} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" deleted file mode 100644 index 16b267b..0000000 --- "a/build/oldSols/level-0/\353\254\270\354\236\220-\353\260\230\353\263\265-\354\266\234\353\240\245\355\225\230\352\270\260&120825&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string, n) { - return [...my_string].map(char => char.repeat(n)).join(''); -} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" deleted file mode 100644 index d0c4618..0000000 --- "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\352\263\204\354\202\260\355\225\230\352\270\260&120902&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return eval(my_string); -} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" deleted file mode 100644 index e728b21..0000000 --- "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\222\244\354\247\221\352\270\260&120822&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return [...my_string].reverse().join(''); -} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" deleted file mode 100644 index 03a03b5..0000000 --- "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\353\260\200\352\270\260&120921&.js" +++ /dev/null @@ -1,12 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(A, B) { - const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join(''); - for (let i = 0; i <= A.length; i++) { - if (A === B) return i; - A = pushRight(A); - } - - return -1; -} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" deleted file mode 100644 index 61a3f82..0000000 --- "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(1)&120850&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return my_string - .match(/[0-9]/g) - .map(str => +str) - .sort((a, b) => a - b); -} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" deleted file mode 100644 index ac952aa..0000000 --- "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264-\354\240\225\353\240\254\355\225\230\352\270\260-(2)&120911&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return [...my_string] - .map(char => char.toLowerCase()) - .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) - .join(''); -} diff --git "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" "b/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" deleted file mode 100644 index 09dea0e..0000000 --- "a/build/oldSols/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220-\353\254\270\354\236\220\354\227\264&120908&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(str1, str2) { - return str1.includes(str2) ? 1 : 2; -} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" deleted file mode 100644 index 7637b49..0000000 --- "a/build/oldSols/level-0/\353\260\260\354\227\264-\353\221\220-\353\260\260-\353\247\214\353\223\244\352\270\260&120809&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - return numbers.map(n => n * 2); -} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" deleted file mode 100644 index d6d4759..0000000 --- "a/build/oldSols/level-0/\353\260\260\354\227\264-\353\222\244\354\247\221\352\270\260&120821&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num_list) { - return num_list.reverse(); -} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" deleted file mode 100644 index 32ac56e..0000000 --- "a/build/oldSols/level-0/\353\260\260\354\227\264-\354\233\220\354\206\214\354\235\230-\352\270\270\354\235\264&120854&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(strlist) { - return strlist.map(s => s.length); -} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" deleted file mode 100644 index c04d4df..0000000 --- "a/build/oldSols/level-0/\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&120833&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers, num1, num2) { - return numbers.slice(num1, num2 + 1); -} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" deleted file mode 100644 index 711d42b..0000000 --- "a/build/oldSols/level-0/\353\260\260\354\227\264-\355\232\214\354\240\204\354\213\234\355\202\244\352\270\260&120844&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers, direction) { - return direction === 'right' - ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)] - : [...numbers.slice(1), numbers[0]]; -} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" deleted file mode 100644 index fa9550c..0000000 --- "a/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\354\234\240\354\202\254\353\217\204&120903&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s1, s2) { - return s1.filter(s => s2.includes(s)).length; -} diff --git "a/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" "b/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" deleted file mode 100644 index c97a515..0000000 --- "a/build/oldSols/level-0/\353\260\260\354\227\264\354\235\230-\355\217\211\352\267\240\352\260\222&120817&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - return numbers.reduce((a, c) => a + c, 0) / numbers.length; -} diff --git "a/build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" "b/build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" deleted file mode 100644 index 1b66e1a..0000000 --- "a/build/oldSols/level-0/\353\266\204\354\210\230\354\235\230-\353\215\247\354\205\210&120808&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(denum1, num1, denum2, num2) { - const denum = denum2 * num1 + denum1 * num2; - const num = num1 * num2; - const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b)); - const gcd = getGCD(denum, num); - return [denum / gcd, num / gcd]; -} diff --git "a/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" "b/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" deleted file mode 100644 index 17ff2b2..0000000 --- "a/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(1)&120889&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(sides) { - const max = Math.max(...sides); - return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2; -} diff --git "a/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" "b/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" deleted file mode 100644 index a4e0b37..0000000 --- "a/build/oldSols/level-0/\354\202\274\352\260\201\355\230\225\354\235\230-\354\231\204\354\204\261\354\241\260\352\261\264-(2)&120868&.js" +++ /dev/null @@ -1,14 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(sides) { - const min = Math.min(...sides); - const max1 = Math.max(...sides); - const max2 = min + max1 - 1; - return max2 - (max1 - min); -} - -//정답 2 - codeisneverodd -function solution(sides) { - return Math.min(...sides) * 2 - 1; -} diff --git "a/build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" "b/build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" deleted file mode 100644 index 0dffb96..0000000 --- "a/build/oldSols/level-0/\354\204\270\352\267\240-\354\246\235\354\213\235&120910&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, t) { - return n * 2 ** t; -} diff --git "a/build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" "b/build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" deleted file mode 100644 index 7540490..0000000 --- "a/build/oldSols/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264&120852&.js" +++ /dev/null @@ -1,29 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let pFactors = []; - for (let i = 2; i <= Math.sqrt(n); i++) { - while (n % i === 0) { - pFactors = [...pFactors, i]; - n /= i; - } - } - if (n >= 2) pFactors = [...pFactors, n]; - return [...new Set(pFactors)].sort((a, b) => a - b); -} - -const funcB = () => { - return new Promise(resolve => { - setTimeout(resolve('guys'), 1000); - }); -}; - -const funcC = async () => { - const m = 1; - const res = await funcB(); - return res; -}; -window.addEventListener('DOMContentLoaded', async () => { - console.log(await funcC()); -}); diff --git "a/build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" "b/build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" deleted file mode 100644 index 99ee6e6..0000000 --- "a/build/oldSols/level-0/\354\210\234\354\204\234\354\214\215\354\235\230-\352\260\234\354\210\230&120836&.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let count = 0; - for (let i = 1; i < Math.sqrt(n); i++) { - if (n % i === 0) count += 2; - } - if (n % Math.sqrt(n) === 0) count += 1; - return count; -} diff --git "a/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" "b/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" deleted file mode 100644 index 08f71f5..0000000 --- "a/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(1)&120851&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0); -} diff --git "a/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" "b/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" deleted file mode 100644 index 8efbb5a..0000000 --- "a/build/oldSols/level-0/\354\210\250\354\226\264\354\236\210\353\212\224-\354\210\253\354\236\220\354\235\230-\353\215\247\354\205\210-(2)&120864&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - const nums = my_string.match(/[0-9]+/g); - return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0; -} diff --git "a/build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" "b/build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" deleted file mode 100644 index 3e9246a..0000000 --- "a/build/oldSols/level-0/\354\210\253\354\236\220-\353\271\204\352\265\220\355\225\230\352\270\260&120807&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num1, num2) { - return num1 === num2 ? 1 : -1; -} diff --git "a/build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" "b/build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" deleted file mode 100644 index 6a64cfe..0000000 --- "a/build/oldSols/level-0/\354\210\253\354\236\220-\354\260\276\352\270\260&120904&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num, k) { - const index = [...('' + num)].findIndex(n => +n === k); - return index === -1 ? -1 : index + 1; -} diff --git "a/build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" "b/build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" deleted file mode 100644 index 1d3b080..0000000 --- "a/build/oldSols/level-0/\354\225\204\354\235\264\354\212\244-\354\225\204\353\251\224\353\246\254\354\271\264\353\205\270&120819&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(money) { - return [Math.floor(money / 5500), money % 5500]; -} diff --git "a/build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" "b/build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" deleted file mode 100644 index b675974..0000000 --- "a/build/oldSols/level-0/\354\225\210\354\240\204\354\247\200\353\214\200&120866&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(board) { - const isBombNearby = (r, c) => { - const nearby = [ - [-1, -1], - [-1, 0], - [-1, 1], - [0, -1], - [0, 1], - [1, -1], - [1, 0], - [1, 1], - ]; - - const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length; - - return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1); - }; - - let count = 0; - - for (let r = 0; r < board.length; r++) { - for (let c = 0; c < board.length; c++) { - if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1; - } - } - return count; -} diff --git "a/build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" "b/build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" deleted file mode 100644 index 960f78a..0000000 --- "a/build/oldSols/level-0/\354\225\224\355\230\270-\355\225\264\353\217\205&120892&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(cipher, code) { - return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), ''); -} diff --git "a/build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" "b/build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" deleted file mode 100644 index 4cbd275..0000000 --- "a/build/oldSols/level-0/\354\225\275\354\210\230-\352\265\254\355\225\230\352\270\260&120897&.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let answer = []; - for (let i = 1; i < Math.sqrt(n); i++) { - if (n % i === 0) answer = [...answer, i, n / i]; - } - if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)]; - return answer.sort((a, b) => a - b); -} diff --git "a/build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" "b/build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" deleted file mode 100644 index 81b2485..0000000 --- "a/build/oldSols/level-0/\354\226\221\352\274\254\354\271\230&120830&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, k) { - return n * 12000 + (k - Math.floor(n / 10)) * 2000; -} diff --git "a/build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" "b/build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" deleted file mode 100644 index f67702e..0000000 --- "a/build/oldSols/level-0/\354\227\260\354\206\215\353\220\234-\354\210\230\354\235\230-\355\225\251&120923&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num, total) { - const numArr = Array.from({ length: num }, (_, i) => i); - const sum = numArr.reduce((a, c) => a + c); - return numArr.map(n => n - (sum - total) / num); -} diff --git "a/build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" "b/build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" deleted file mode 100644 index eb1f8c6..0000000 --- "a/build/oldSols/level-0/\354\230\201\354\226\264\352\260\200-\354\213\253\354\226\264\354\232\224&120894&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 }; - const regex = new RegExp(Object.keys(nums).join('|'), 'g'); - return +numbers.replace(regex, key => nums[key]); -} diff --git "a/build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" "b/build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" deleted file mode 100644 index 0fbd920..0000000 --- "a/build/oldSols/level-0/\354\230\267\352\260\200\352\262\214-\355\225\240\354\235\270-\353\260\233\352\270\260&120818&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(price) { - if (price >= 500000) return Math.floor(price * 0.8); - if (price >= 300000) return Math.floor(price * 0.9); - if (price >= 100000) return Math.floor(price * 0.95); - return price; -} diff --git "a/build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" "b/build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" deleted file mode 100644 index a8bfecb..0000000 --- "a/build/oldSols/level-0/\354\230\271\354\225\214\354\235\264&120956&.js" +++ /dev/null @@ -1,15 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(babbling) { - const convertPWordsToNum = word => { - const pWords = ['aya', 'ye', 'woo', 'ma']; - return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word); - }; - const canPronounce = word => { - const result = convertPWordsToNum(word); - return !/[^\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]); - }; - - return babbling.filter(b => canPronounce(b)).length; -} diff --git "a/build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" "b/build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" deleted file mode 100644 index 505e556..0000000 --- "a/build/oldSols/level-0/\354\231\270\352\263\204\354\226\264-\354\202\254\354\240\204&120869&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(spell, dic) { - const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); - return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2; -} diff --git "a/build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" "b/build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" deleted file mode 100644 index 996b91b..0000000 --- "a/build/oldSols/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230-\353\202\230\354\235\264&120834&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(age) { - return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join(''); -} \ No newline at end of file diff --git "a/build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" "b/build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" deleted file mode 100644 index fe8b4f7..0000000 --- "a/build/oldSols/level-0/\354\234\240\355\225\234\354\206\214\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120878&.js" +++ /dev/null @@ -1,26 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(a, b) { - const getGCD = (a, b) => { - let gcd = 1; - for (let i = 1; i <= Math.min(a, b); i++) { - if (a % i === 0 && b % i === 0) gcd = i; - } - return gcd; - }; - - const getPrimeFactors = num => { - let pFactors = []; - for (let i = 2; i <= Math.sqrt(num); i++) { - while (num % i === 0) { - pFactors = [...pFactors, i]; - num /= i; - } - } - if (num > 2) pFactors = [...pFactors, num]; - return pFactors; - }; - - return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1; -} diff --git "a/build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" "b/build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" deleted file mode 100644 index ea257ef..0000000 --- "a/build/oldSols/level-0/\354\235\264\354\247\204\354\210\230-\353\215\224\355\225\230\352\270\260&120885&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(bin1, bin2) { - return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2); -} diff --git "a/build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" "b/build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" deleted file mode 100644 index 176b728..0000000 --- "a/build/oldSols/level-0/\354\235\270\353\215\261\354\212\244-\353\260\224\352\276\270\352\270\260&120895&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string, num1, num2) { - const str = [...my_string]; - - [str[num1], str[num2]] = [str[num2], str[num1]]; - - return str.join(''); -} diff --git "a/build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" "b/build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" deleted file mode 100644 index 0b60127..0000000 --- "a/build/oldSols/level-0/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&120906&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0); -} diff --git "a/build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" "b/build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" deleted file mode 100644 index a854dc6..0000000 --- "a/build/oldSols/level-0/\354\236\230\353\235\274\354\204\234-\353\260\260\354\227\264\353\241\234-\354\240\200\354\236\245\355\225\230\352\270\260&120913&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_str, n) { - let result = []; - for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)]; - return result; -} diff --git "a/build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" "b/build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" deleted file mode 100644 index 8e1f33a..0000000 --- "a/build/oldSols/level-0/\354\240\200\354\243\274\354\235\230-\354\210\253\354\236\220-3&120871&.js" +++ /dev/null @@ -1,14 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let num = 0; - let count = 0; - - while (count < n) { - num += 1; - if (!('' + num).includes('3') && num % 3 !== 0) count += 1; - } - - return num; -} diff --git "a/build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" "b/build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" deleted file mode 100644 index b84f0fd..0000000 --- "a/build/oldSols/level-0/\354\240\220\354\235\230-\354\234\204\354\271\230-\352\265\254\355\225\230\352\270\260&120841&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(dot) { - const [x, y] = dot; - if (y > 0) return x > 0 ? 1 : 2; - return x < 0 ? 3 : 4; -} diff --git "a/build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" "b/build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" deleted file mode 100644 index 5c55144..0000000 --- "a/build/oldSols/level-0/\354\240\234\352\263\261\354\210\230-\355\214\220\353\263\204\355\225\230\352\270\260&120909&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - return Number.isInteger(Math.sqrt(n)) ? 1 : 2; -} diff --git "a/build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" "b/build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" deleted file mode 100644 index 9ec19bc..0000000 --- "a/build/oldSols/level-0/\354\242\205\354\235\264-\354\236\220\353\245\264\352\270\260&120922&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(M, N) { - return M * N - 1; -} diff --git "a/build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" "b/build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" deleted file mode 100644 index ba6a201..0000000 --- "a/build/oldSols/level-0/\354\243\274\354\202\254\354\234\204\354\235\230-\352\260\234\354\210\230&120845&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(box, n) { - return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n); -} diff --git "a/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" "b/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" deleted file mode 100644 index f2e5f0e..0000000 --- "a/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\353\254\270\354\236\220-\354\240\234\352\261\260&120888&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string) { - return [...new Set(my_string)].join(''); -} diff --git "a/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" "b/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" deleted file mode 100644 index 4428b1a..0000000 --- "a/build/oldSols/level-0/\354\244\221\353\263\265\353\220\234-\354\210\253\354\236\220-\352\260\234\354\210\230&120583&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array, n) { - return array.filter(a => a === n).length; -} diff --git "a/build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" "b/build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" deleted file mode 100644 index ed158ed..0000000 --- "a/build/oldSols/level-0/\354\244\221\354\225\231\352\260\222-\352\265\254\355\225\230\352\270\260&120811&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array) { - return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]; -} diff --git "a/build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" "b/build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" deleted file mode 100644 index 9563816..0000000 --- "a/build/oldSols/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225-\354\266\234\353\240\245\355\225\230\352\270\260&120823&.js" +++ /dev/null @@ -1,16 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -const readline = require('readline'); -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); - -let input = []; - -rl.on('line', function (line) { - input = line.split(' '); -}).on('close', function () { - for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i)); -}); diff --git "a/build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" "b/build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" deleted file mode 100644 index dc022c9..0000000 --- "a/build/oldSols/level-0/\354\247\201\354\202\254\352\260\201\355\230\225-\353\204\223\354\235\264-\352\265\254\355\225\230\352\270\260&120860&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(dots) { - const xDots = dots.flatMap(([x, y]) => x); - const yDots = dots.flatMap(([x, y]) => y); - const width = Math.max(...xDots) - Math.min(...xDots); - const height = Math.max(...yDots) - Math.min(...yDots); - return width * height; -} diff --git "a/build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" "b/build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" deleted file mode 100644 index 6efc72e..0000000 --- "a/build/oldSols/level-0/\354\247\204\353\243\214\354\210\234\354\204\234-\354\240\225\355\225\230\352\270\260&120835&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(emergency) { - const sorted = [...emergency].sort((a, b) => b - a); - return emergency.map(e => sorted.findIndex(s => s === e) + 1); -} diff --git "a/build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" "b/build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" deleted file mode 100644 index 3312f99..0000000 --- "a/build/oldSols/level-0/\354\247\235\354\210\230-\355\231\200\354\210\230-\352\260\234\354\210\230&120824&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(num_list) { - const evenLength = num_list.filter(n => n % 2 === 0).length; - return [evenLength, num_list.length - evenLength]; -} diff --git "a/build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" "b/build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" deleted file mode 100644 index e308d35..0000000 --- "a/build/oldSols/level-0/\354\247\235\354\210\230\353\212\224-\354\213\253\354\226\264\354\232\224&120813&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let nums = []; - for (let i = 0; i <= n; i++) { - if (i % 2 === 1) nums = [...nums, i]; - } - return nums; -} diff --git "a/build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" "b/build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" deleted file mode 100644 index 8c6c310..0000000 --- "a/build/oldSols/level-0/\354\247\235\354\210\230\354\235\230-\355\225\251&120831&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let answer = 0; - for (let i = 0; i <= n; i++) { - if (i % 2 === 0) answer += i; - } - return answer; -} diff --git "a/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" "b/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" deleted file mode 100644 index bcd34e7..0000000 --- "a/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260(1)&120847&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - const [first, second, ...rest] = numbers.sort((a, b) => b - a); - return first * second; -} diff --git "a/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" "b/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" deleted file mode 100644 index 62a9b75..0000000 --- "a/build/oldSols/level-0/\354\265\234\353\214\223\352\260\222-\353\247\214\353\223\244\352\270\260-(2)&120862&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - const sorted = numbers.sort((a, b) => a - b); - return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]); -} diff --git "a/build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" "b/build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" deleted file mode 100644 index 5682839..0000000 --- "a/build/oldSols/level-0/\354\265\234\353\271\210\352\260\222-\352\265\254\355\225\230\352\270\260&120812&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(array) { - const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); - const max = Math.max(...Object.values(counts)); - const modes = Object.keys(counts).filter(key => counts[key] === max); - return modes.length === 1 ? +modes[0] : -1; -} diff --git "a/build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" "b/build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" deleted file mode 100644 index 52ed4f4..0000000 --- "a/build/oldSols/level-0/\354\271\230\355\202\250-\354\277\240\355\217\260&120884&.js" +++ /dev/null @@ -1,11 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(chicken) { - const order = coupons => { - if (coupons < 10) return 0; - const service = Math.floor(coupons / 10); - return service + order(service + (coupons % 10)); - }; - return order(chicken); -} diff --git "a/build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" "b/build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" deleted file mode 100644 index 32889ce..0000000 --- "a/build/oldSols/level-0/\354\272\220\353\246\255\355\204\260\354\235\230-\354\242\214\355\221\234&120861&.js" +++ /dev/null @@ -1,43 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(keyinput, board) { - const moves = { - up: [0, 1], - down: [0, -1], - left: [-1, 0], - right: [1, 0], - }; - const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; - - return keyinput - .map(key => moves[key]) - .reduce( - ([x, y], [mX, mY]) => (Math.abs(x + mX) > rangeX || Math.abs(y + mY) > rangeY ? [x, y] : [x + mX, y + mY]), - [0, 0] - ); -} - -//정답 2 - codeisneverodd -//명령형 -function solution(keyinput, board) { - const moves = { - up: [0, 1], - down: [0, -1], - left: [-1, 0], - right: [1, 0], - }; - const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; - - let pos = [0, 0]; - - keyinput - .map(key => moves[key]) - .forEach(move => { - if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return; - pos[0] += move[0]; - pos[1] += move[1]; - }); - - return pos; -} diff --git "a/build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" "b/build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" deleted file mode 100644 index eb35f6f..0000000 --- "a/build/oldSols/level-0/\354\273\250\355\212\270\353\241\244-\354\240\234\355\212\270&120853&.js" +++ /dev/null @@ -1,8 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - const arr = s.split(' '); - while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2); - return arr.map(n => +n).reduce((a, c) => a + c, 0); -} diff --git "a/build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" "b/build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" deleted file mode 100644 index 8422a58..0000000 --- "a/build/oldSols/level-0/\355\212\271\354\235\264\355\225\234-\354\240\225\353\240\254&120880&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numlist, n) { - return numlist.sort((a, b) => { - const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)]; - if (aDiff === bDiff) return b - a; - return aDiff - bDiff; - }); -} diff --git "a/build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" "b/build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" deleted file mode 100644 index bb9f820..0000000 --- "a/build/oldSols/level-0/\355\212\271\354\240\225-\353\254\270\354\236\220-\354\240\234\352\261\260\355\225\230\352\270\260&120826&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(my_string, letter) { - return my_string.replaceAll(letter, ''); -} diff --git "a/build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" "b/build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" deleted file mode 100644 index d888302..0000000 --- "a/build/oldSols/level-0/\355\214\251\355\206\240\353\246\254\354\226\274&120848&.js" +++ /dev/null @@ -1,9 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let factorial = [1, 1]; - for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i; - - return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2; -} diff --git "a/build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" "b/build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" deleted file mode 100644 index a146a61..0000000 --- "a/build/oldSols/level-0/\355\216\270\354\247\200&120898&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(message) { - return message.length * 2; -} diff --git "a/build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" "b/build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" deleted file mode 100644 index b8a3f33..0000000 --- "a/build/oldSols/level-0/\355\217\211\355\226\211&120875&.js" +++ /dev/null @@ -1,15 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(dots) { - const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity); - const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2); - - return dots.some(dot => { - const line1 = [dots[0], dot]; - const line2 = dots.filter(dot => !line1.includes(dot)); - return isParallel(line1, line2); - }) - ? 1 - : 0; -} diff --git "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" deleted file mode 100644 index 06cac15..0000000 --- "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(1)&120814&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - return Math.floor((n - 1) / 7) + 1; -} diff --git "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" deleted file mode 100644 index a0a72c7..0000000 --- "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(2)&120815&.js" +++ /dev/null @@ -1,12 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - const getLCM = (a, b) => { - let lcm = 1; - while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1; - return lcm; - }; - - return getLCM(n, 6) / 6; -} diff --git "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" "b/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" deleted file mode 100644 index f37f5b7..0000000 --- "a/build/oldSols/level-0/\355\224\274\354\236\220-\353\202\230\353\210\240-\353\250\271\352\270\260-(3)&120816&.js" +++ /dev/null @@ -1,6 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(slice, n) { - return Math.floor((n - 1) / slice) + 1; -} diff --git "a/build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" "b/build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" deleted file mode 100644 index c22230e..0000000 --- "a/build/oldSols/level-0/\355\225\234-\353\262\210\353\247\214-\353\223\261\354\236\245\355\225\234-\353\254\270\354\236\220&120896&.js" +++ /dev/null @@ -1,10 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); - return Object.keys(count) - .filter(key => count[key] === 1) - .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) - .join(''); -} diff --git "a/build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" "b/build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" deleted file mode 100644 index 7a9cf4f..0000000 --- "a/build/oldSols/level-0/\355\225\251\354\204\261\354\210\230-\354\260\276\352\270\260&120846&.js" +++ /dev/null @@ -1,19 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - const isPrime = num => { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return true; - } - return false; - }; - - let count = 0; - - for (let i = 1; i <= n; i++) { - if (isPrime(i)) count += 1; - } - - return count; -} diff --git "a/build/oldSols/level-1/2016\353\205\204&12901&.js" "b/build/oldSols/level-1/2016\353\205\204&12901&.js" deleted file mode 100644 index 64caabd..0000000 --- "a/build/oldSols/level-1/2016\353\205\204&12901&.js" +++ /dev/null @@ -1,65 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(a, b) { - let count = 0; - const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - for (let i = 1; i < a; i++) count += month[i]; - count += b; - return day[(count + 4) % 7]; // 금요일 부터 1일 이므로 -} - -//정답 2 - yongchanson -function solution(a, b) { - const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - const week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]; - - let sum = b; - for ( - let i = 0; - i < a - 1; - i++ //ex)5월인 경우 1~4월까지 더해준다. - ) - sum += month[i]; - - return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다. -} - -//정답 3 - chaerin-dev -function solution(a, b) { - let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - let dateStr = "2016-" + a + "- " + b; - let date = new Date(dateStr); - return week[date.getDay()]; -} - -//정답 4 - chaerin-dev -function solution(a, b) { - let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수 - let passedDays = 0; - // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌 - for (let i = 1; i < a; i++) passedDays += arr[i]; - // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌 - passedDays += b - 1; - return week[(5 + passedDays) % 7]; -} - -//정답 5 - prove-ability -function solution(a, b) { - var answer = ""; - // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? - const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - // 2016년 1월 1일은 금요일로 4를 더해준다 - let totalDays = 4; - // a 이전 모든 달의 일 수를 더한다 - for (let i = 0, len = a - 1; i < len; i++) { - totalDays += daysOfMonth[i]; - } - // totalDays 와 해당 일을 더해주고 7로 나눈 나머지 - const dayIndex = (totalDays + b) % 7; - return days[dayIndex]; -} diff --git "a/build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" "b/build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" deleted file mode 100644 index cd1e85a..0000000 --- "a/build/oldSols/level-1/3\354\247\204\353\262\225-\353\222\244\354\247\221\352\270\260&68935&.js" +++ /dev/null @@ -1,37 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return parseInt(n.toString(3).split("").reverse().join(""), 3); -} - -//정답 2 - codeisneverodd -function solution(n) { - var answer = 0; - const ternaryReversed = decimalToTernaryReversed(n); - answer = parseInt(ternaryReversed, 3); - return answer; -} - -const decimalToTernaryReversed = (num) => { - let ternary = ""; - while (num >= 3) { - ternary += (num % 3).toString(); - num = Math.floor(num / 3); - } - ternary += num.toString(); - return ternary; -}; - -//정답 3 - jaewon1676 -function solution(n) { - var answer = n.toString(3).split("").reverse().join(""); - - return parseInt(answer, 3); -} - - -//정답 4 - prove-ability -function solution(n) { - return parseInt(n.toString(3).split("").reverse().join(""), 3) -} diff --git "a/build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" "b/build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" deleted file mode 100644 index b843b25..0000000 --- "a/build/oldSols/level-1/K\353\262\210\354\247\270\354\210\230&42748&.js" +++ /dev/null @@ -1,60 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(array, commands) { - return commands.map((cmd) => { - const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b); - return arrCmd[cmd[2] - 1]; - }); -} - -//정답 2 - jaewon1676 -function solution(array, commands) { - var result = []; - var temp = []; - for (var i = 0; i < commands.length; i++) { - temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => { - return a - b; - }); - console.log(temp); - result.push(temp[commands[i][2] - 1]); - } - return result; -} - -// 정답 3 - prove-ability -function solution(array, commands) { - var answer = []; - commands.forEach(([i, j, k]) => { - const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1]; - answer.push(su); - }); - return answer; -} - -//정답 4 - createhb21 - -function solution(array, commands) { - let answer = []; - for (let i = 0; i < commands.length; i++) { - let eachCommand = commands[i]; - let slice = array.slice(eachCommand[0] - 1, eachCommand[1]); - answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]); - } - return answer; -} - -// 정답 5 - chaerin-dev -function solution(array, commands) { - let t = commands.length; - let answer = []; - while (t--) { - let command = commands.shift(); - answer.push( - array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[ - command[2] - 1 - ] - ); - } - return answer; -} diff --git "a/build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" "b/build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" deleted file mode 100644 index 92a9564..0000000 --- "a/build/oldSols/level-1/[1\354\260\250]-\353\213\244\355\212\270-\352\262\214\354\236\204&17682&.js" +++ /dev/null @@ -1,60 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(dartResult) { - const regex = /\d{1,2}[SDT]{1}[*|#]?/g; - let result = []; - for (const dart of dartResult.match(regex)) { - const game = [...dart.split(/([SDT]{1})/)]; - const score = game[0]; - let bonus = 1; - let option = 1; - if (game[1] === "S") bonus = 1; - if (game[1] === "D") bonus = 2; - if (game[1] === "T") bonus = 3; - - if (game[2] === "*") { - if (result.length !== 0) result[result.length - 1] *= 2; - option = 2; - } - if (game[2] === "#") option = -1; - - result.push(score ** bonus * option); - } - - return result.reduce((a, b) => a + b); -} - -//정답 2 - jaewon1676 -function solution(dartResult) { - var answer = 0; - let score = 0; - let cnt = []; - - for (let i = 0; i < dartResult.length; i++) { - //점수가 주어질때 - if (!isNaN(dartResult[i])) { - // i가 1인 경우는 10점, 그외에는 점수 - score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]); - //보너스 S일때 - } else if (dartResult[i] === "S") { - cnt.push(score); - //보너스 D일때 - } else if (dartResult[i] === "D") { - cnt.push(Math.pow(score, 2)); - //보너스 T일때 - } else if (dartResult[i] === "T") { - cnt.push(Math.pow(score, 3)); - //옵션 *일떄 - } else if (dartResult[i] === "*") { - cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2; - cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2; - //옵션 #일때 - } else if (dartResult[i] === "#") { - cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1]; - } - } - //3개의 점수 합산 - answer = cnt.reduce((acc, cur) => acc + cur, 0); - return answer; -} diff --git "a/build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" "b/build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" deleted file mode 100644 index 572270d..0000000 --- "a/build/oldSols/level-1/[1\354\260\250]-\353\271\204\353\260\200\354\247\200\353\217\204&17681&.js" +++ /dev/null @@ -1,62 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n, arr1, arr2) { - const answer = []; - for (let i = 0; i < n; i++) { - let row = (arr1[i] | arr2[i]).toString(2); //Bitwise - row = "0".repeat(n - row.length) + row; - row = row.replace(/[10]/g, (a) => (+a ? "#" : " ")); - answer.push(row); - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(n, arr1, arr2) { - var answer = []; - let mapA = []; - let mapB = []; - for (let i = 0; i < n; i++) { - let rowArrA = arr1[i].toString(2).split(""); - let rowArrB = arr2[i].toString(2).split(""); - for (let j = 0, len = rowArrA.length; j < n - len; j++) - rowArrA.unshift("0"); - for (let j = 0, len = rowArrB.length; j < n - len; j++) - rowArrB.unshift("0"); - mapA.push(rowArrA); - mapB.push(rowArrB); - } - let answer2D = mapA.slice(); - for (let i = 0; i < n; i++) { - for (let j = 0; j < n; j++) { - answer2D[i][j] = mapA[i][j] === "0" && mapB[i][j] === "0" ? " " : "#"; - } - } - answer = answer2D.map((row) => row.join("")); - return answer; -} - -//정답 3 - jaewon1676 -function solution(n, arr1, arr2) { - let answer = []; - for (let i = 0; i < n; i++) { - let temp = (arr1[i] | arr2[i]).toString(2); - let line = []; // 한 행의 모든 2진수 보관 - - for (let j = temp.length - n; j < temp.length; j++) { - if (temp[j] == 1) { - line.push("#"); - } else { - line.push(" "); - } - } - answer.push(line.join("")); - } - return answer; -} - -/* 풀이 과정 -1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다. -2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다. -3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/ diff --git "a/build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" "b/build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" deleted file mode 100644 index 6cd7f95..0000000 --- "a/build/oldSols/level-1/x\353\247\214\355\201\274-\352\260\204\352\262\251\354\235\264-\354\236\210\353\212\224-n\352\260\234\354\235\230-\354\210\253\354\236\220&12954&.js" +++ /dev/null @@ -1,41 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(x, n) { - return Array.from(Array(n), (_, index) => x * (index + 1)); -} - -//정답 2 - chaerin-dev -function solution(x, n) { - var answer = []; - let add_gap = x; - // n번 반복 - for (let i = 0; i < n; i++) { - answer.push(x); // 처음 배열에 넣을 x - x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가 - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(n) { - let str = ""; - for (let i = 0; i < n; i++) { - // 삼항 연산자와 +로 문자열을 붙여주어 추가. - i % 2 == 0 ? (str = str + "수") : (str = str + "박"); - } - return str; -} - -// 정답 4 - prove-ability -function solution(x, n) { - var answer = []; - let i = 1; - // n개 지니는 리스트를 리턴해야 합니다 - while (answer.length !== n) { - // x부터 시작해 x씩 증가하는 숫자 - answer.push(x * i); - i++; - } - return answer; -} diff --git "a/build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" "b/build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" deleted file mode 100644 index 9422925..0000000 --- "a/build/oldSols/level-1/\352\260\200\354\232\264\353\215\260-\352\270\200\354\236\220-\352\260\200\354\240\270\354\230\244\352\270\260&12903&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s.length % 2 !== 0 - ? s[Math.floor(s.length / 2)] - : s.slice(s.length / 2 - 1, s.length / 2 + 1); -} - -//정답 2 - yongchanson -function solution(s) { - var answer = ""; - let L2 = s.length / 2; - - answer = - s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]); - - return answer; -} - -//정답 3 - prove-ability -function solution(s) { - var answer = ''; - // 중간 지점 찾기 - const point = Math.floor(s.length / 2); - // 짝수인 경우 - (중간지점 - 1) + 중간지점 - if(s.length % 2 ===0) answer = s[point - 1] + s[point]; - // 홀수인 경우 - 중간지점 - else answer = s[point]; - return answer; -} - -// 정답 4 - chaerin-dev -function solution(s) { - return s.length % 2 - ? s[parseInt(s.length / 2)] - : s[s.length / 2 - 1] + s[s.length / 2]; -} - -// 정답 5 - jaewon1676 -function solution(s) { - var answer = ''; - - if (s.length % 2 == 0 ) { // 짝수일 경우, - answer = s[s.length / 2 - 1] + s[s.length / 2]; - } else { - answer = s[parseInt(s.length / 2)]; // 홀수일 경우 - } - return answer; -} diff --git "a/build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" "b/build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" deleted file mode 100644 index bdf875e..0000000 --- "a/build/oldSols/level-1/\352\260\231\354\235\200-\354\210\253\354\236\220\353\212\224-\354\213\253\354\226\264&12906&.js" +++ /dev/null @@ -1,43 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr) { - return arr.filter((element, index) => element !== arr[index + 1]); -} - -//정답 2 - codeisneverodd -function solution(arr) { - var answer = [arr[0]]; - for (let i = 1; i < arr.length; i++) { - //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다. - answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null; - } - return answer; -} - -//정답 3 - chaerin-dev -function solution(arr) { - // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고, - // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용 - // 첫 번째 요소의 경우 undefined와 비교 - return arr.filter((item, index) => item !== arr[index - 1]); -} - -// 정답 4 - prove-ability -function solution(arr) { - let answer = []; - // 이중 배열을 사용해서 포인터?를 두 개를 사용한다 - for (let i = 0, len = arr.length - 1; i < len; i++) { - // i 의 다음수를 비교하기 위해 j = (i + 1) - for (let j = i + 1, len = arr.length; j < len; j++) { - // i 와 j 번째 값이 같이 않다면 - if (arr[i] !== arr[j]) { - answer.push(arr[i]); - i = j - 1; - break; - } - } - } - answer.push(arr[arr.length - 1]); - return answer; -} diff --git "a/build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" "b/build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" deleted file mode 100644 index f79492e..0000000 --- "a/build/oldSols/level-1/\353\202\230\353\210\204\354\226\264-\353\226\250\354\226\264\354\247\200\353\212\224-\354\210\253\354\236\220-\353\260\260\354\227\264&12910&.js" +++ /dev/null @@ -1,35 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr, divisor) { - const answer = arr.filter((element) => element % divisor === 0); - answer.length === 0 ? answer.push(-1) : answer.sort((a, b) => a - b); - return answer; -} - -//정답 2 - codeisneverodd -function solution(arr, divisor) { - var answer = []; - arr.forEach((element) => { - element % divisor === 0 ? answer.push(element) : null; - }); - answer.length === 0 ? answer.push(-1) : null; - answer.sort((a, b) => a - b); - return answer; -} - -//정답 3. chaerin-dev -function solution(arr, divisor) { - let answer = []; - arr.forEach((e) => { - if (e % divisor === 0) answer.push(e); - }); - return answer.length ? answer.sort((a, b) => a - b) : [-1]; -} - -//정답 4 - prove-ailbity -function solution(arr, divisor) { - var answer = []; - arr.forEach((v) => v % divisor === 0 && answer.push(v)) - return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b); -} diff --git "a/build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" "b/build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" deleted file mode 100644 index 56d4913..0000000 --- "a/build/oldSols/level-1/\353\202\230\353\250\270\354\247\200\352\260\200-1\354\235\264-\353\220\230\353\212\224-\354\210\230-\354\260\276\352\270\260&87389&.js" +++ /dev/null @@ -1,36 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - - let answer = 0; - for (let divisor = n - 1; divisor >= 2; divisor--) { - if (n % divisor === 1) answer = divisor; - } - return answer; -} - -//정답 2 - prove-ability -function solution(n) { - var answer = 0; - let i = 0; - while(true) { - if(n % i === 1) { - answer = i; - break; - } - i++; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(n) { - var answer = 0; - for (let i=1; i x + y * b[i], 0); -} - -//정답 2 - yongchanson -function solution(a, b) { - var answer = 0; - - for (i = 0; i < a.length; i++) { - answer += a[i] * b[i]; - } - return answer; -} - -//정답 3 - prove-ability -function solution(a, b) { - var answer = 0; - - for (let i = 0, len = a.length; i < len; i++) { - answer += a[i] * b[i]; - } - - return answer; -} - -//정답 4 - jaewon1676 -function solution(a, b) { - let answer = 0; - for (let i=0; i acc + e * b[i], 0); -} diff --git "a/build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" "b/build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" deleted file mode 100644 index 2c079cd..0000000 --- "a/build/oldSols/level-1/\353\221\220-\352\260\234-\353\275\221\354\225\204\354\204\234-\353\215\224\355\225\230\352\270\260&68644&.js" +++ /dev/null @@ -1,26 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(numbers) { - const answer = []; - for (let i = 0; i < numbers.length; i++) { - for (let j = i + 1; j < numbers.length; j++) { - answer.push(numbers[i] + numbers[j]); - } - } - return [...new Set(answer)].sort((a, b) => a - b); -} - -//정답 2 - prove-ability -function solution(numbers) { - const answer = []; - - for(let i = 0, len = numbers.length; i < len; i++) { - for(let j = i + 1, len = numbers.length; j < len; j++) { - if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j]) - } - } - - return answer.sort((a, b) => a - b); -} - diff --git "a/build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" "b/build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" deleted file mode 100644 index 618db2f..0000000 --- "a/build/oldSols/level-1/\353\221\220-\354\240\225\354\210\230-\354\202\254\354\235\264\354\235\230-\355\225\251&12912&.js" +++ /dev/null @@ -1,47 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(a, b) { - let answer = 0; - for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { - answer += i; - } - return answer; -} - -//정답 2 - chaerin-dev -function solution(a, b) { - let answer = 0; - for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { - answer += i; - } - return answer; -} - -//정답 3 - prove-ability -function solution(a, b) { - let answer = 0; - for(let i = Math.min(a, b), len = Math.max(a, b); i <= len; i++) { - answer += i; - } - return answer; -} - -//정답 4 - prove-ability -function solution(a, b) { - return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0); -} - -//정답 5 - jaewon1676 -function solution(a, b) { - if (b < a){ // b가 a보다 큰 수가 되도록 해준다. - let c = b - b = a - a = c - } - let sum = 0; // 합을 구할 변수 - for (let i=a; i<=b; i++){ - sum += i - } - return sum; -} diff --git "a/build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" "b/build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" deleted file mode 100644 index c4166f3..0000000 --- "a/build/oldSols/level-1/\353\241\234\353\230\220\354\235\230-\354\265\234\352\263\240-\354\210\234\354\234\204\354\231\200-\354\265\234\354\240\200-\354\210\234\354\234\204&77484&.js" +++ /dev/null @@ -1,151 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(lottos, win_nums) { - const zeroCount = lottos.filter((e) => e === 0).length; - const matchCount = win_nums.filter((e) => lottos.includes(e)).length; - const matchToRank = [6, 6, 5, 4, 3, 2, 1]; - const lowRank = matchToRank[matchCount]; - const highRank = zeroCount === 6 ? 1 : matchToRank[matchCount + zeroCount]; - - return [highRank, lowRank]; -} - -//정답 2 - codeisneverodd -function solution(lottos, win_nums) { - // 0이 없는 경우 > 최저 순위 == 최고 순위 - // 0이 있는 경우 > 모두 0인경우 > 1위 - // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위 - // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함. - // 순위는 7 - hit - // 최종적으로 7위인 경우 6위로 변경 - var answer = []; - if (lottos.indexOf(0) === -1) { - answer[0] = answer[1] = 7 - hit(lottos, win_nums); - } else { - const zeroCount = lottos.length - [...new Set(lottos)].length + 1; - answer[1] = 7 - hit(lottos, win_nums); - zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount); - } - for (let i = 0; i < 2; i++) { - answer[i] >= 7 ? (answer[i] = 6) : null; - } - return answer; -} - -function hit(lottos, win_nums) { - let result = 0; - lottos.forEach((element) => { - win_nums.indexOf(element) === -1 ? null : (result += 1); - }); - return result; -} - -// 정답 3 - jaewon1676 -function solution(lottos, win_nums) { - var answer = []; - const correct = lottos.filter((lotto) => win_nums.includes(lotto)).length; - // lottos배열을 순회하며 당첨배열에 있는 수를 return 하고 총 개수를 correct에 저장 - - const zeros = lottos.filter((lotto) => lotto === 0).length; - // lottos배열을 순회하며 0인 총 개수를 zeros에 저장 - - let min = 7 - correct >= 6 ? 6 : 7 - correct; - - let max = min - zeros < 1 ? 1 : min - zeros; - - answer = [max, min]; - - return answer; -} - -// 정답 4 - jaewon1676 -function solution(lottos, win_nums) { - var answer = []; - let max = 7; - let min = 7; - console.log(lottos); - console.log(win_nums); - for (let i = 0; i < 6; i++) { - if (lottos.includes(win_nums[i])) { - max--; - } - } - min = max; - for (let i = 0; i < 6; i++) { - if (lottos[i] == 0) min--; - } - if (max == 7) max = 6; - if (min == 7) min = 6; - answer = [min, max]; - return answer; -} - -//정답 5 - yongchanson -function solution(lottos, win_nums) { - //최고당첨개수 : maxPoint + basicPoint - //최저당첨개수 : basicPoint - - let basicPoint = 0; - let maxPoint = 0; - let answer = []; - - lottos.forEach(function (lottos_item) { - win_nums.forEach(function (win_nums_item) { - if (lottos_item == win_nums_item) { - basicPoint++; - } - }); - }); - - lottos.forEach(function (item) { - if (item == 0) { - maxPoint++; - } - }); - - maxPoint + basicPoint >= 2 - ? answer.push(7 - maxPoint - basicPoint) - : answer.push(6); - basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6); - - return answer; -} - -//정답 6 - prove-ability -function solution(lottos, win_nums) { - // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화 - let winCount = 0; - let zeroCount = 0; - // 내 로또 번호 하니씩 접근 - lottos.forEach((num) => { - // 번호가 0이 아니고 당첨 번호라면 - if (num !== 0 && win_nums.includes(num)) { - winCount++; - // 번호가 0이라면 - } else if (num === 0) { - zeroCount++; - } - }); - // 일치한 수와 등수는 반비례하기 때문에 빼기 7 - // 이때 등수를 벗어나면 낙첨(6) 으로 고정 - let max = 7 - (winCount + zeroCount); - if (max > 5) max = 6; - let min = 7 - winCount; - if (min > 5) min = 6; - - return [max, min]; -} - -//정답 7 - chaerin-dev -function solution(lottos, win_nums) { - let zeroCount = 0; - let winCount = 0; - lottos.forEach((item) => { - if (item === 0) zeroCount++; - else if (win_nums.includes(item)) winCount++; - }); - let maxRank = Math.min(7 - (winCount + zeroCount), 6); - let minRank = Math.min(7 - winCount, 6); - return [maxRank, minRank]; -} diff --git "a/build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" "b/build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" deleted file mode 100644 index c91c3b1..0000000 --- "a/build/oldSols/level-1/\353\252\250\354\235\230\352\263\240\354\202\254&42840&.js" +++ /dev/null @@ -1,135 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(answers) { - const answer = []; - const firstPattern = [1, 2, 3, 4, 5]; - const firstPLength = firstPattern.length; - const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5]; - const secondPLength = secondPattern.length; - const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; - const thirdLength = thirdPattern.length; - let correctCount = [0, 0, 0]; - - for (let i = 0, len = answers.length; i < len; i++) { - if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1; - if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1; - if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1; - } - - const maxScore = Math.max(...correctCount); - for (let i = 0; i < 3; i++) { - if (correctCount[i] === maxScore) answer.push(i + 1); - } - - return answer; -} - -// 완벽한 정답이 아닙니다. -// 정답 2 - prove-ability -function solution(answers) { - let result = []; - - let players = { - 1: { - pattern: [1, 2, 3, 4, 5], - count: 0, - }, - 2: { - pattern: [2, 1, 2, 3, 2, 4, 2, 5], - count: 0, - }, - 3: { - pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5], - count: 0, - }, - }; - let max = 0; - answers.forEach((answer, index) => { - for (let [key, { pattern }] of Object.entries(players)) { - // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가 - if (pattern[index % pattern.length] === answer) { - players[key].count++; - // 제일 높은 count 구하기 - if (max < players[key].count) max = players[key].count; - } - } - }); - // players 중에 count 가 max 와 값이 같다면 result 추가 - for (let [key, { count }] of Object.entries(players)) { - if (count === max) result.push(parseInt(key, 10)); - } - - return result; -} - -//정답 3 - yongchanson -function solution(answers) { - let score = []; - let answer = []; - let a1 = [1, 2, 3, 4, 5]; - let a2 = [2, 1, 2, 3, 2, 4, 2, 5]; - let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; - - score.push(answers.filter((a, i) => a === a1[i % a1.length]).length); - score.push(answers.filter((a, i) => a === a2[i % a2.length]).length); - score.push(answers.filter((a, i) => a === a3[i % a3.length]).length); - - for (let i = 0; i < score.length; i++) { - const max = Math.max(...score); - if (score[i] === max) { - answer.push(i + 1); - } - } - - return answer; -} - -//정답 4 - jaewon1676 -function solution(answers) { - let arr1 = [1,2,3,4,5] - let arr2 = [2,1,2,3,2,4,2,5] - let arr3 = [3,3,1,1,2,2,4,4,5,5] - - let score = [0, 0, 0] - for (let i=0; i { - for (let j = 0; j < pattern.length; j++) { - const patternLength = pattern[j].length; - if (answer === pattern[j][i % patternLength]) scores[j]++; - } - }); - - const answer = []; - const maxScore = Math.max(...scores); - scores.forEach((score, i) => { - if (score === maxScore) answer.push(i + 1); - }); - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" deleted file mode 100644 index 098a7aa..0000000 --- "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-p\354\231\200-y\354\235\230-\352\260\234\354\210\230&12916&.js" +++ /dev/null @@ -1,36 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - const countP = [...s.matchAll(/p/gi)].length; - const countY = [...s.matchAll(/y/gi)].length; - return countP === countY; -} - -//정답 2 - yongchanson -function solution(s) { - p = s.toLowerCase().split("p").length; - y = s.toLowerCase().split("y").length; - - return p == y ? true : false; -} - -//정답 3 - chaerin-dev -function solution(s) { - let pCount = s.split(/p/i).length - 1; - let yCount = s.split(/y/i).length - 1; - return pCount === yCount; -} -// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다. -// Ex. "ababb".split("a") 의 결과는 ["", "b", "bb"] -// => 즉, "a"의 갯수는 3에서 1을 뺀 2 - -// 정답 4 - prove-ability -function solution(s){ - // 배열로 변환 - s = s.split(""); - // filter 를 사용해 갯수 추출 - const pCount = s.filter((v) => v === "p" || v === "P").length; - const yCount = s.filter((v) => v === "y" || v === "Y").length; - return pCount === yCount; -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" deleted file mode 100644 index 0353a7c..0000000 --- "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264-\353\247\210\354\235\214\353\214\200\353\241\234-\354\240\225\353\240\254\355\225\230\352\270\260&12915&.js" +++ /dev/null @@ -1,35 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(strings, n) { - return strings.sort((a, b) => { - if (a[n] < b[n]) return -1; - if (a[n] > b[n]) return 1; - if (a[n] === b[n]) return a < b ? -1 : 1; - return 0; - }); -} - -//정답 2 - chaerin-dev -function solution(strings, n) { - return strings.sort((a, b) => { - // 인덱스 n번째 글자를 기준으로 오름차순 정렬 - if (a[n] > b[n]) return 1; - else if (a[n] < b[n]) return -1; - // 인덱스 n번째 글자가 같으면 사전순 정렬 - else return a > b ? 1 : -1; - }); -} - -// 정답 3 - prove-ability -function solution(strings, n) { - // 정렬 - strings.sort((a, b) => { - // n번째 클자가 같다면 사전순 - if(a[n].charCodeAt() === b[n].charCodeAt()) { - return a > b ? 1 : -1; - } else return a[n].charCodeAt() - b[n].charCodeAt(); - }); - - return strings; -} diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" deleted file mode 100644 index 3d0a5fa..0000000 --- "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12917&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s - .split("") - .sort((a, b) => { - if (a < b) return 1; - if (a > b) return -1; - return 0; - }) - .join(""); -} - -//정답 2 - chaerin-dev -function solution(s) { - // 문자열 -> 배열 -> 정렬 -> 순서뒤집기 -> 문자열 - return s.split("").sort().reverse().join(""); -} - -//정답 3 - chaerin-dev -function solution(s) { - return s.split("").sort((a, b) => (a < b ? 1 : -1)).join(""); -} - - -//정답 4 - prove-ability -function solution(s) { - return s.split("").sort().reverse().join("") -} - -//정답 5 - jaewon1676 -function solution(s) { - return s.split('').sort().reverse().join('') -} -// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다. -// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다. -// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다. - diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" deleted file mode 100644 index 0849d59..0000000 --- "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264-\353\213\244\353\243\250\352\270\260-\352\270\260\353\263\270&12918&.js" +++ /dev/null @@ -1,54 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s.search(/\D/g) < 0 && (s.length === 4 || s.length === 6); -} - -//정답 2 - yongchanson -function solution(s) { - let parseInts = parseInt(s); - if (s.length == 6 || s.length == 4) { - if (s == parseInts) { - return true; - } - } - - return false; -} - -//정답 3 - prove-ability -function solution(s) { - var answer = true; - // 문자열 s의 길이가 4 혹은 6이고 - if (s.length === 4 || s.length === 6) { - for (let i = 0, len = s.length; i < len; i++) { - // 숫자로만 구성돼있는지 확인 - if (!Number.isInteger(parseInt(s[i], 10))) return false; - } - // 문자열 s의 길이가 4 혹은 6 가 아니라면 false - } else return false; - - return answer; -} - -//정답 4 - chaerin-dev -function solution(s) { - // 길이가 4 혹은 6이 아니면 false 반환 - if (s.length !== 4 && s.length !== 6) return false; - // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환 - for (let i = 0; i < s.length; i++) { - if (isNaN(Number(s[i]))) return false; - } - // 위의 모든 조건에 포함되지 않으면 - // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환 - return true; -} - -//정답 5 - soulhn -function solution(s) { - if (s.length !== 4 && s.length !== 6) return false; - return !s.split("").some((i) => isNaN(parseInt(i, 10))); - //early return 제외사항 먼저 처리 - //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환 -} diff --git "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" "b/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" deleted file mode 100644 index f21b1f4..0000000 --- "a/build/oldSols/level-1/\353\254\270\354\236\220\354\227\264\354\235\204-\354\240\225\354\210\230\353\241\234-\353\260\224\352\276\270\352\270\260&12925&.js" +++ /dev/null @@ -1,22 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return parseInt(s); -} - -//정답 2 - chaerin-dev -function solution(s) { - return Number(s); -} - -//정답 3 - prove-ability -function solution(s) { - return parseInt(s, 10); -} - - -//정답 4 - jaewon1676 -function solution(s) { - return parseInt(s); -} diff --git "a/build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" "b/build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" deleted file mode 100644 index 04bfabb..0000000 --- "a/build/oldSols/level-1/\353\266\200\354\241\261\355\225\234-\352\270\210\354\225\241-\352\263\204\354\202\260\355\225\230\352\270\260&82612&.js" +++ /dev/null @@ -1,57 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(price, money, count) { - let totalCost = 0; - for (let i = 1; i <= count; i++) totalCost += price * i; - return totalCost <= money ? 0 : totalCost - money; -} - -//정답 2 - yongchanson -function solution(price, money, count) { - var answer = 0; - let sum = price; - - for (i = 2; i <= count; i++) { - sum += price * i; - } - - if (sum <= money) { - answer = 0; - } else { - answer = sum - money; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(price, money, count) { - let sum_price = 0; // 놀이기구의 이용료의 합 - for (let i = 1; i <= count; i++) { - sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다. - } - if (sum_price <= money) { - return 0; - } - return sum_price - money; -} - -//정답 4 - prove-ability -function solution(price, money, count) { - let sum = 0; - for(let i = 1; i <= count; i++) { - sum += (i * price) - } - - return sum < money ? 0 : sum - money; -} - -//정답 5 - chaerin-dev -function solution(price, money, count) { - let totalPrice = 0; - for(let i=1; i<=count; i++){ - totalPrice += i * price; - } - return money > totalPrice ? 0 : totalPrice-money; -} - diff --git "a/build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" "b/build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" deleted file mode 100644 index 945278e..0000000 --- "a/build/oldSols/level-1/\354\204\234\354\232\270\354\227\220\354\204\234-\352\271\200\354\204\234\353\260\251-\354\260\276\352\270\260&12919&.js" +++ /dev/null @@ -1,25 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(seoul) { - return `김서방은 ${seoul.indexOf("Kim")}에 있다`; -} - -//정답 2 - chaerin-dev -function solution(seoul) { - return `김서방은 ${seoul.indexOf("Kim")}에 있다`; -} - -//정답 3 - prove-ability -function solution(seoul) { - return `김서방은 ${seoul.findIndex(v => v === "Kim")}에 있다`; -} - -//정답 4 - jaewon1676 -function solution(seoul) { - var answer = ''; - for (let i=0; i<1000; i++){ - if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다'; - } - return 1; -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" "b/build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" deleted file mode 100644 index a5787d6..0000000 --- "a/build/oldSols/level-1/\354\204\261\352\262\251-\354\234\240\355\230\225-\352\262\200\354\202\254\355\225\230\352\270\260&118666&.js" +++ /dev/null @@ -1,72 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ssi02014 -function solution(survey, choices) { - const points = [3, 2, 1, 0, 1, 2, 3]; - const pointBoard = { - R: 0, - T: 0, - C: 0, - F: 0, - J: 0, - M: 0, - A: 0, - N: 0, - }; - let result = ""; - - // 카테고리 별 점수 추가 - for (let i = 0; i < survey.length; i++) { - const categories = survey[i]; - - if (choices[i] < 4) { - pointBoard[categories[0]] += points[choices[i] - 1]; - } else if (choices[i] > 4) { - pointBoard[categories[1]] += points[choices[i] - 1]; - } - } - - const pointBoardEntries = Object.entries(pointBoard); - - // 지표에 맞게 결과 값 도출 - for (let i = 0; i < pointBoardEntries.length; i += 2) { - const [curCategory, curValue] = pointBoardEntries[i]; - const [nextCategory, nextValue] = pointBoardEntries[i + 1]; - - if (curValue < nextValue) { - result += nextCategory; - } else { - result += curCategory; - } - } - - return result; -} - -//정답 2 - codeisneverodd -function solution(survey, choices) { - const points = [-3, -2, -1, 0, 1, 2, 3]; - const types = ['RT', 'CF', 'JM', 'AN']; - const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {}); - survey.forEach((key, i) => { - const point = points[choices[i] - 1]; - Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point); - }); - return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join(''); -} - -//정답 3 - codisneverodd -function solution(survey, choices) { - const points = [-3, -2, -1, 0, 1, 2, 3]; - const types = ['RT', 'CF', 'JM', 'AN']; - const pointBoard = survey.reduce((a, key, i) => { - if (types.includes(key)) { - a[key] = (a[key] || 0) + points[choices[i] - 1]; - return a; - } - const rKey = key[1] + key[0]; - a[rKey] = (a[rKey] || 0) - points[choices[i] - 1]; - return a; - }, {}); - return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join(''); -} diff --git "a/build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" "b/build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" deleted file mode 100644 index 15a504d..0000000 --- "a/build/oldSols/level-1/\354\206\214\354\210\230-\353\247\214\353\223\244\352\270\260&12977&.js" +++ /dev/null @@ -1,85 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(nums) { - let answer = 0; - const length = nums.length; - for (let i = 0; i < length; i++) { - for (let j = i + 1; j < length; j++) { - for (let k = j + 1; k < length; k++) { - const sum = nums[i] + nums[j] + nums[k]; - if (isPrime(sum)) answer += 1; - } - } - } - - return answer; -} - -function isPrime(num) { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return num >= 2; -} - -//정답 2 - jaewon1676 -// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript - -function solution(nums) { - let len = nums.length, answer = 0; - - for (let i = 0; i < len - 2; i++) { - for (let j = i + 1; j < len - 1; j++) { - for (let k = j + 1; k < len; k++) { - if (isPrime(nums[i] + nums[j] + nums[k])) { - answer++; - } - } - } - } - return answer; -} - -const isPrime = (n) => { - for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회 - if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다. - return false; - } - } - return true; -} -// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다. - -//정답 3 - chaerin-dev -// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수 -const getCombinations = function (arr, selectNumber) { - const results = []; - if (selectNumber === 1) return arr.map((el) => [el]); - arr.forEach((fixed, index, origin) => { - const rest = origin.slice(index + 1); - const combinations = getCombinations(rest, selectNumber - 1); - const attached = combinations.map((el) => [fixed, ...el]); - results.push(...attached); - }); - return results; -}; - -// num이 소수인지 여부를 반환하는 함수 -function isPrime(num) { - if (num === 1) return false; - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return true; -} - -function solution(nums) { - const combinationResult = getCombinations(nums, 3); - let answer = 0; - combinationResult.forEach((e) => { - const sum = e[0] + e[1] + e[2]; - if (isPrime(sum)) answer++; - }); - return answer; -} diff --git "a/build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" "b/build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" deleted file mode 100644 index 1774ae6..0000000 --- "a/build/oldSols/level-1/\354\206\214\354\210\230-\354\260\276\352\270\260&42839&.js" +++ /dev/null @@ -1,100 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(numbers) { - let answer = 0; - const numArr = numbers.split(""); - const permutationAll = []; - for (let r = 1; r <= numbers.length; r++) { - const permutationR = Permutation(numArr, r).map((arr) => - parseInt(arr.join("")) - ); - for (let i = 0; i < permutationR.length; i++) - permutationAll.push(permutationR[i]); - } - const permutationSet = [...new Set(permutationAll)]; - for (const number of permutationSet) { - if (isPrime(number)) answer += 1; - } - return answer; -} - -function Permutation(arr, r) { - const result = []; - if (r === 1) return arr.map((num) => [num]); - arr.forEach((fixed, index, org) => { - const rest = [...org.slice(0, index), ...org.slice(index + 1)]; - const permutation = Permutation(rest, r - 1); - const attached = permutation.map((numbers) => [fixed, ...numbers]); - result.push(...attached); - }); - return result; -} - -function isPrime(num) { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return num >= 2; -} - - -//정답 2 - chaerin-dev -// 소수인지 판별하는 함수 -function isPrime(x) { - for (let i = 2; i <= Math.sqrt(x); i++) { - if (x % i === 0) return false; - } - return true; -} -function solution(n) { - // 소수의 개수를 저장할 변수 - let answer = 0; - // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해 - for (let i = 2; i <= n; i++) { - // 소수이면 소수의 개수에 1 추가 - if (isPrime(i)) answer++; - } - return answer; -} - -//정답 3 - prove-ability -// 소수 판별 로직 -function isPrime(n) { - // n 제곱근 후 올림 - for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) { - if (n % i === 0) return false; - } - return true; -} - -function solution(n) { - let count = 0; - // 1부터 n까지 반복적으로 접근 - i - for(let i = 1; i <= n; i++) { - // i 가 소수인지 확인 후 count++ - if(isPrime(i)) count++; - } - - return count; -} - -//정답 4 - jaewon1676 -function solution(n) { - let arr = []; - - // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다. - for(let i=2; i<=n; i++) { - arr[i] = i; - } - for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다. - if (arr[i] === 0) continue; - - for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다. - arr[j] = 0; - } - } - - // filter를 이용해 0이아닌 수들의 개수를 return합니다. - return arr.filter(v => v!==0).length; -} diff --git "a/build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" "b/build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" deleted file mode 100644 index aa3682c..0000000 --- "a/build/oldSols/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?&12922&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - let answer = ''; - for (let i = 0; i < n; i++) { - answer += i % 2 === 0 ? '수' : '박'; - } - return answer; -} - -//정답 2 - chaerin-dev -function solution(n) { - // "수박"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환 - return '수박'.repeat(n).substr(0, n); -} - -//정답 3 - jaewon1676 -function solution(n) { - let str = ''; - for (let i = 0; i < n; i++) { - // 삼항 연산자와 +로 문자열을 붙여주어 추가. - i % 2 == 0 ? (str = str + '수') : (str = str + '박'); - } - return str; -} - -//정답 4 - prove-ability -function solution(n) { - let answer = ''; - answer = '수박'.repeat(n / 2); - if (n % 2 !== 0) answer += '수'; - return answer; -} - -//정답 5 - yongchanson -function solution(n) { - return '수박'.repeat(n / 2) + '수'.repeat(n % 2); -} diff --git "a/build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" "b/build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" deleted file mode 100644 index f78f6bf..0000000 --- "a/build/oldSols/level-1/\354\210\253\354\236\220-\353\254\270\354\236\220\354\227\264\352\263\274-\354\230\201\353\213\250\354\226\264&81301&.js" +++ /dev/null @@ -1,102 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - const stringToNum = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - for (let i = 0; i < 10; i++) { - s = s.split(stringToNum[i]).join(i); - } - return parseInt(s); -} - -//정답 2 - codeisneverodd -function solution(s) { - var answer = 0; - let answerString = s; - const stringToNum = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - for (let i = 0; i < 10; i++) { - const regex = new RegExp(stringToNum[i], "g"); - answerString = answerString.replace(regex, i); - } - answer = Number(answerString); - return answer; -} - -//정답 3 - jaewon1676 -function solution(s) { - let answer = 0; - - s = s.replace(/zero/g, 0); - s = s.replace(/one/g, 1); - s = s.replace(/two/g, 2); - s = s.replace(/three/g, 3); - s = s.replace(/four/g, 4); - s = s.replace(/five/g, 5); - s = s.replace(/six/g, 6); - s = s.replace(/seven/g, 7); - s = s.replace(/eight/g, 8); - s = s.replace(/nine/g, 9); - - answer = Number(s); - return answer; -} - -//정답 4 - chaerin-dev -function solution(s) { - s = s - .replace(/zero/g, 0) - .replace(/one/g, 1) - .replace(/two/g, 2) - .replace(/three/g, 3) - .replace(/four/g, 4) - .replace(/five/g, 5) - .replace(/six/g, 6) - .replace(/seven/g, 7) - .replace(/eight/g, 8) - .replace(/nine/g, 9); - return parseInt(s); -} - -//정답 5 - yongchanson -function solution(s) { - let en = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - - for (let i = 0; i < s.length * 2; i++) { - let p = i % en.length; - s = s.replace(en[p], p); - } - return Number(s); -} diff --git "a/build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" "b/build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" deleted file mode 100644 index 4c6e7a3..0000000 --- "a/build/oldSols/level-1/\354\210\253\354\236\220-\354\247\235\352\277\215&131128&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ssi02014 - -/** - * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화 - * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 - * (테스트 케이스 11 ~ 15 100ms~200ms 차이) - */ -function solution(X, Y) { - const commons = []; - const obj = {}; - - for (const el of X) { - obj[el] = (obj[el] || 0) + 1; - } - - for (const el of Y) { - if (obj[el]) { - commons.push(el); - obj[el]--; - } - } - - commons.sort((a, b) => b - a); - - if (!commons.length) return "-1"; - else if (commons[0] === "0") return "0"; - return commons.join(""); -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" "b/build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" deleted file mode 100644 index 8667845..0000000 --- "a/build/oldSols/level-1/\354\213\234\354\240\200-\354\225\224\355\230\270&12926&.js" +++ /dev/null @@ -1,88 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s, n) { - return s - .split("") - .map((element) => { - if (element === " ") return " "; - const code = element.charCodeAt(0); - if ((code + n > 90 && code <= 90) || code + n > 122) { - return String.fromCharCode(code + n - 26); - } else { - return String.fromCharCode(code + n); - } - }) - .join(""); -} - -//정답 2 - jaewon1676 -function solution(s, n) { - return s - .split("") - .map((el) => { - if (el == " ") return el; - let tmp = el.charCodeAt(); - return el.toLowerCase().charCodeAt() + n > 122 - ? String.fromCharCode(tmp + n - 26) - : String.fromCharCode(tmp + n); - }) - .join(""); -} - -/* 문자열 -> 아스키코드 : s.charCodeAt() -아스키코드 -> 문자열 : String.fromCharCode() -풀이과정 -1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다. -2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. - 대문자 아스키코드는 65가 A, 90이 Z이다. - 소문자 아스키코드는 97이 a, 122가 z이다. -3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고 - 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다. -*/ - -//정답 3 - chaerin-dev -function solution(s, n) { - let result = ""; - for (let i = 0; i < s.length; i++) { - if (s[i] === " ") result += " "; - else { - let charCode = s.charCodeAt(i); - // 원래 대문자였는데 - if (charCode <= 90) { - charCode += n; - // 변경 후 아스키코드값이 90보다 크다면 - if (charCode > 90) charCode -= 26; - } - // 원래 소문자였는데 - else { - charCode += n; - // 변경 후 아스키코드값이 122보다 크다면 - if (charCode > 122) charCode -= 26; - } - result += String.fromCharCode(charCode); - } - } - return result; -} - - -//정답 4 - prove-ability -function solution(s, n) { - var answer = ''; - for(let i = 0, len = s.length; i < len; i++) { - if(s[i] === " ") { - answer += " "; - continue; - } - let index = s[i].charCodeAt(); - // 65 - 90 - // 97 - 122 - if(index <= 90 && index + n > 90) index -= 26; - else if (index + n > 122) index -= 26; - - answer += String.fromCharCode(index + n) - } - return answer; -} - diff --git "a/build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" "b/build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" deleted file mode 100644 index 466f362..0000000 --- "a/build/oldSols/level-1/\354\213\240\352\263\240-\352\262\260\352\263\274-\353\260\233\352\270\260&92334&.js" +++ /dev/null @@ -1,167 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(id_list, report, k) { - const reportResult = report.reduce((a, c) => { - const [user, reported] = c.split(' '); - a[reported] = a[reported] ? a[reported].add(user) : new Set().add(user); - return a; - }, {}); - - const mailed = Object.values(reportResult) - .filter(set => set.size >= k) - .flatMap(set => [...set]); - return id_list.map(id => mailed.filter(user => user === id).length); -} - -//정답 2 - jaewon1676 -function solution(id_list, report, k) { - let answer = new Array(id_list.length).fill(0); - let report_list = {}; // 신고당한 ID - - // key, value 형식의 report_list 객체를 만든다. - id_list.map(user => { - report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체 - }); - // report_list { muzi: [], frodo: [], apeach: [], neo: [] } - - // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다. - report.map(user => { - const [user_id, report_id] = user.split(' '); - // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다. - if (!report_list[report_id].includes(user_id)) { - report_list[report_id].push(user_id); - // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다. - } - }); - for (const key in report_list) { - // report_list의 index 순회 - if (report_list[key].length >= k) { - report_list[key].map(user => { - answer[id_list.indexOf(user)] += 1; - }); - } - } - return answer; -} - -//정답 3 - prove-ability -function solution(id_list, report, k) { - // 사용자 길이의 빈 배열을 만든다 0 - var answer = new Array(id_list.length).fill(0); - // 신고된 내용 정리할 객체 선언 - const obj = {}; - // 신고된 내용 정리할 객체 사용자 아이디로 초기화 - id_list.forEach(id => { - obj[id] = new Set(); - }); - // 신고 리스트를 조회하며 신고 내용 객체에 정리 - // set.add 를 활용해 같은 사용자의 중복 신고 제거 - report.forEach(str => { - const [reporter, target] = str.split(' '); - obj[target].add(reporter); - }); - // obj value 하나씩 접근 - for (const value of Object.values(obj)) { - // 신고당한 횟수가 정지 기준에 적합하다면 - if (value.size >= k) { - // 해당 유저를 신고한 사람들 - for (let item of value) { - // 인덱스 구해서 증가 - let index = id_list.indexOf(item); - answer[index]++; - } - } - } - - return answer; -} - -//정답 4 - prove-ability -function solution(id_list, report, k) { - // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기 - var answer = Array.from({ length: id_list.length }).fill(0); - // 신고 내용 객체 초기화 - 신고된 내용 정리 - const reportObj = {}; - // 신고건 반복문으로 하나씩 접근 - for (let i = 0, len = report.length; i < len; i++) { - const [userId, reportUserId] = report[i].split(' '); - // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가 - if (reportObj[reportUserId]) { - if (!reportObj[reportUserId].includes(userId)) { - reportObj[reportUserId] = [...reportObj[reportUserId], userId]; - } - // 신고 내용 객체에 신고당한 사람이 없다면 추가 - } else reportObj[reportUserId] = [userId]; - } - // 만들어진 신고 내용 객체로 반복적으로 접근 - for (const item of Object.values(reportObj) - .filter(v => v.length >= k) - .flatMap(v => v)) { - // 인덱스로 접근해 메일 카운트 증가 - const index = id_list.findIndex(v => v === item); - answer[index]++; - } - - return answer; -} - -//정답 5 - chaerin-dev -function solution(id_list, report, k) { - // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리 - let set = new Set(report); - report = Array.from(set); - - // 1. report를 2차원배열로 변형 - // 2. 각 유저가 신고당한 횟수 cnt에 저장 - // 3. 각 유저를 신고한 유저 who에 저장 - let cnt = Array.from({ length: id_list.length }, i => 0); - let who = Array.from({ length: id_list.length }, i => []); - for (let i = 0; i < report.length; i++) { - report[i] = report[i].split(' '); - cnt[id_list.indexOf(report[i][1])]++; - who[id_list.indexOf(report[i][1])].push(report[i][0]); - } - - // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장 - let mail = Array.from({ length: id_list.length }, i => 0); - for (let i = 0; i < cnt.length; i++) { - if (cnt[i] < k) continue; - for (let j = 0; j < who[i].length; j++) { - mail[id_list.indexOf(who[i][j])]++; - } - } - return mail; -} -//정답 6(🎩 refactor 220425) - codeisneverodd -function solution(id_list, report, k) { - //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장, - //각 id를 신고한 사람 array를 reportedBy에 저장, - //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장 - //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장. - const reportSet = new Set(report); - const reportedCount = {}; //{"id": Number(count)} - const reportedBy = {}; //{"id":[]} - const mailCount = {}; //{"id":Number(count)} - - id_list.forEach(element => { - reportedCount[element] = 0; - mailCount[element] = 0; - reportedBy[element] = []; - }); - - reportSet.forEach(element => { - const [id, reported] = element.split(' '); - reportedCount[reported] += 1; - reportedBy[reported].push(id); - }); - - for (const reportedId in reportedCount) { - if (reportedCount[reportedId] >= k) { - reportedBy[reportedId].forEach(reporter => { - mailCount[reporter] += 1; - }); - } - } - return id_list.map(id => mailCount[id]); -} diff --git "a/build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" "b/build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" deleted file mode 100644 index 4c4e506..0000000 --- "a/build/oldSols/level-1/\354\213\240\352\267\234-\354\225\204\354\235\264\353\224\224-\354\266\224\354\262\234&72410&.js" +++ /dev/null @@ -1,123 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(new_id) { - const newId = new_id - .toLowerCase() - .replace(/[^\w_.-]/g, '') - .replace(/[.]{2,}/g, '.') - .replace(/^[.]+/, '') - .replace(/[.]+$/, '') - .replace(/^$/, 'a') - .substring(0, 15) - .replace(/[.]+$/, ''); - - return newId.padEnd(3, newId[newId.length - 1]); -} - -//정답 2 - codeisneverodd -function solution(new_id) { - let answer = ''; - answer = new_id.toLowerCase(); // step1 - const step2 = /[^0-9a-z._-]/g; - const step3 = /[.]+/g; - const step4_1 = /^\./; - const step4_2 = /\.$/; - answer = answer.replace(step2, ''); - answer = answer.replace(step3, '.'); - answer = answer.replace(step4_1, ''); - answer = answer.replace(step4_2, ''); - answer = answer === '' ? 'a' : answer; // step5 - answer = answer.length >= 16 ? answer.slice(0, 15) : answer; //step6 - answer = answer.replace(step4_2, ''); - switch ( - answer.length // step7 - ) { - case 1: - answer = answer + answer[0] + answer[0]; - break; - case 2: - answer = answer + answer[1]; - break; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(new_id) { - // 1 소문자로 치환 - let answer = new_id - .toLowerCase() - - // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거. - .replace(/[^a-z0-9-_.]/gi, '') - - // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환 - .replace(/[.]{2,}/gi, '.') - - // 4 마침표(.)가 처음이나 끝에 위치하면 제거 - .replace(/^[.]|[.]$/gi, ''); - - // 5 빈 문자열이면 a 대입 - if (answer === '') answer = 'a'; - - // 6 length > 15이면 그 뒤의 문자들은 제거 - if (answer.length > 15) { - answer = answer.substring(0, 15); - // 마침표(.)가 끝에 위치하면 마침표(.)제거 - answer = answer.replace(/[.]$/gi, ''); - } - - // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임 - while (answer.length < 3) { - answer += answer[answer.length - 1]; - } - return answer; -} - -//정답 4 - chaerin-dev -function solution(new_id) { - // 1단계: 모든 대문자를 소문자로 - new_id = new_id.toLowerCase(); - - // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거 - new_id = new_id.replace(/[^\w\-\.]/g, ''); - - // 3단계: 연속되는 마침표는 마침표 하나로 - new_id = new_id.replace(/\.{2,}/g, '.'); - - // 4단계: 처음이나 끝에 마침표가 있으면 제거 - new_id = new_id.replace(/^\.|\.$/, ''); - - // 5단계: new_id가 빈 문자열이면 "a" 대입 - if (new_id.length === 0) new_id = 'a'; - - // 6단계: new_id의 길이가 16자 이상이면, - // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 - // 제거 후 끝에 마침표가 있으면 제거 - if (new_id.length >= 16) new_id = new_id.slice(0, 15); - new_id = new_id.replace(/\.$/, ''); - - // 7단계: new_id의 길이가 2자 이하이면, - // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임 - let len = new_id.length; - if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len); - - return new_id; -} -//정답 5(🎩 refactor 220425) - codeisneverodd -function solution(new_id) { - let answer = new_id - .toLowerCase() //step 1 - .replace(/[^0-9a-z._-]/g, '') // step 2 - .replace(/\.+/g, '.') //step 3 - .replace(/^\.|\.$/g, '') //step 4 - .replace(/^$/, 'a') //step 5 - .slice(0, 15) - .replace(/\.$/, ''); //step 6 - // step7 - if (answer.length === 1) answer = answer[0].repeat(3); - if (answer.length === 2) answer = answer + answer[1]; - - return answer; -} diff --git "a/build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" "b/build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" deleted file mode 100644 index dbf3b99..0000000 --- "a/build/oldSols/level-1/\354\213\244\355\214\250\354\234\250&42889&.js" +++ /dev/null @@ -1,79 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(N, stages) { - let stageNFailRate = []; - for (let stage = 1; stage <= N; stage++) { - const playerReached = stages.filter((player) => player >= stage).length; - const playerChallenging = stages.filter( - (player) => player === stage - ).length; - stageNFailRate.push([stage, playerChallenging / playerReached]); - } - stageNFailRate.sort((a, b) => b[1] - a[1]); - return stageNFailRate.map((stage) => stage[0]); -} - -//정답 2 - codeisneverodd -function solution(N, stages) { - var answer = []; - let failRate = new Array(N + 2).fill(0); - let playerChallenging = new Array(N + 2).fill(0); - let playerReached = new Array(N + 2).fill(0); - - for (const stage of stages) { - for (let i = 1; i <= stage; i++) playerReached[i] += 1; - playerChallenging[stage] += 1; - } - for (let i = 1; i <= N + 1; i++) - failRate[i] = - playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i]; - const rateNIndex = failRate - .slice(1, N + 1) - .map((rate, stage) => [rate, stage + 1]); - const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]); - answer = sortedRate.map((stage) => stage[1]); - return answer; -} - -//정답 3 - jaewon1676 -function solution(N, stages) { - let map = Array.from(Array(N), () => Array(2).fill(0)); - let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수 - let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율 - let count = 0; - - stages.sort(function (a, b) { - return a - b; - }); // 난이도 오름차순 정렬 - for (let i = 1; i <= N; i++) { - while (1) { - // i 스테이지의 실패율 계산 - if (stages[0] == i) { - answer[i - 1] += 1; - count += 1; - stages.shift(); - } else break; - } - rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산 - - count = 0; - - map[i - 1][0] = i; - map[i - 1][1] = rate[i - 1]; - } - map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬 - let stack = []; // 답 - for (let i = 0; i < map.length; i++) { - stack.push(map[i][0]); - } - - return stack; -} - -/* 풀이 과정 -1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다. -2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다. -3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서. -4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다. -*/ diff --git "a/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" "b/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" deleted file mode 100644 index 097e9e9..0000000 --- "a/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\352\260\234\354\210\230\354\231\200-\353\215\247\354\205\210&77884&.js" +++ /dev/null @@ -1,60 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(left, right) { - let answer = 0; - for (let num = left; num <= right; num++) { - answer = Number.isInteger(Math.sqrt(num)) ? answer - num : answer + num; - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(left, right) { - var answer = 0; - for (let num = left; num <= right; num++) { - divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num); - } - return answer; -} - -const divisorCounter = (num) => { - let count = 0; - const sqrt = Math.sqrt(num); - for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1; - return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2; -}; - -//정답 3 - jaewon1676 -function solution(left, right) { - var answer = 0; - - for (left; left <= right; left++) { - // left의 제곱근이 정수면 약수의 개수는 홀수 - if (Number.isInteger(Math.sqrt(left))) { - answer -= left; - } else { - answer += left; - } - } - return answer; -} - -// 정답 4 - prove-bility -function getDivisorCount(i) { - let count = 0; - for(let j = 1; j <= i; j++) { - if(i % j === 0) count++; - } - return count; -} - -function solution(left, right) { - let answer = 0; - for(let i = left; i <= right; i++) { - let count = getDivisorCount(i); - if(count % 2 === 0) answer += i; - else answer -= i; - } - return answer; -} diff --git "a/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" "b/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" deleted file mode 100644 index db732a8..0000000 --- "a/build/oldSols/level-1/\354\225\275\354\210\230\354\235\230-\355\225\251&12928&.js" +++ /dev/null @@ -1,69 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - let answer = 0; - for (let divisor = 1; divisor <= n; divisor++) { - if (n % divisor === 0) answer += divisor; - } - return answer; -} - -//정답 2 - yongchanson -function solution(n) { - var answer = 0; - let i; - for (i = 1; i <= Math.sqrt(n); i++) { - if (n % i == 0) { - if (i * i == n) { - //i의 제곱이 n인경우 처리 - answer += i; - } else { - answer += i; - answer += n / i; - } - } - } - - return answer; -} - -//정답 3 - chaerin-dev -function solution(n) { - let result = 0; - let sqrtN = Math.sqrt(n); - // 효율성을 위해 1부터 n의 제곱근-1까지만 순회 - for (let i = 1; i < sqrtN; i++) { - if (n % i === 0) result += i + n / i; - } - // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌 - if (Number.isInteger(sqrtN)) result += sqrtN; - return result; -} - -//정답 4 - jaewon1676 -function solution(n) { - var answer = 0; - for (let i = 1; i <= n; i++) { - if (n % i == 0) { - // n으로 i를 나눴을 때, 나머지가 0이면 약수이다. - answer += i; - } - } - return answer; -} - -// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다. -// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다. -// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다. - - -//정답 4 - prove-ability -function solution(n) { - let answer = 0; - for(let i = 1; i <= n; i++) { - if(n % i === 0) answer += i; - } - return answer; -} - diff --git "a/build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" "b/build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" deleted file mode 100644 index 0e5fcff..0000000 --- "a/build/oldSols/level-1/\354\227\206\353\212\224-\354\210\253\354\236\220-\353\215\224\355\225\230\352\270\260&86051&.js" +++ /dev/null @@ -1,59 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(numbers) { - return 45 - numbers.reduce((a, b) => a + b); -} - -//정답 2 - codeisneverodd -function solution(numbers) { - var answer = 0; - for (let i = 0; i < 10; i++) { - answer += numbers.includes(i) ? 0 : i; - } - return answer; -} - -//정답 3 - yongchanson -function solution(numbers) { - var answer = -1; - - let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; - let arr_sum = 0; - let numbers_sum = 0; - - for (i = 0; i < arr.length / 2; i++) { - if (arr[i] == arr[arr.length - 1 - i]) { - arr_sum += arr[i]; - } else { - arr_sum += arr[i] + arr[arr.length - 1 - i]; - } - } - - for (i = 0; i < numbers.length; i++) { - numbers_sum += numbers[i]; - } - - answer = arr_sum - numbers_sum; - return answer; -} - -//정답 4 - prove-ability -function solution(numbers) { - var answer = 0; - - for (let i = 0; i < 10; i++) { - if (!numbers.includes(i)) answer += i; - } - - return answer; -} - -//정답 5 - chaerin-dev -function solution(numbers) { - let answer = 0; - for (let i = 0; i <= 9; i++) { - if (!numbers.includes(i)) answer += i; - } - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" "b/build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" deleted file mode 100644 index c774802..0000000 --- "a/build/oldSols/level-1/\354\230\210\354\202\260&12982&.js" +++ /dev/null @@ -1,48 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(d, budget) { - let answer = 0; - d.sort((a, b) => a - b); - for (const department of d) { - if (budget < department) break; - answer += 1; - budget -= department; - } - return answer; -} - - -//정답 2 - prove-ability -function solution(d, budget) { - let sum = 0; - let count = 0; - // 오름차순 정렬 - d.sort((a, b) => a - b); - for(let i = 0, len = d.length; i < len; i++) { - // 작은 수 부터 하나씩 더해준다 - sum += d[i]; - // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환 - if(sum > budget) return count; - count++; - } - - return count; -} - -//정답 3 - jaewon1676 -function solution(d, budget) { - let count = 0; // 최대 물품 지원 할 수 있는 부서 수 - d.sort((a, b) => a - b) // 오름차순 정렬 - for (let i=0; i (v === participant[i] ? a + 1 : a), - 0 - ); - // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면 - // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다 - if (count > 1 && max < count) { - answer = participant[i]; - // 조건에 맞는 동명이인 수 저장 - max = count; - } - } - return answer; -} - -//완벽한 정답이 아닙니다. -//정답 4 - chaerin-dev -function solution(participant, completion) { - var answer = ""; - // 두 배열을 정렬한다! - participant.sort(); - completion.sort(); - // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!! - // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로 - // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만 - // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음! - for (let i = 0; i < participant.length; i++) { - if (participant[i] != completion[i]) { - answer = participant[i]; - break; - } - } - return answer; -} diff --git "a/build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" "b/build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" deleted file mode 100644 index 59dc770..0000000 --- "a/build/oldSols/level-1/\354\235\214\354\226\221-\353\215\224\355\225\230\352\270\260&76501&.js" +++ /dev/null @@ -1,69 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(absolutes, signs) { - return absolutes.reduce( - (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1), - 0 - ); -} - -//정답 2 - codeisneverod -function solution(absolutes, signs) { - var answer = 0; - for (let i = 0; i < absolutes.length; i++) { - answer += signs[i] ? absolutes[i] : -1 * absolutes[i]; - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(absolutes, signs) { - var answer = 0; - for (var i = 0; i < absolutes.length; i++) { - if (signs[i] === false) { - answer = answer - absolutes[i]; - } else { - answer = answer + absolutes[i]; - } - } - - return answer; -} - -// 정답 4 - prove-ability -function solution(absolutes, signs) { - var answer = 0; - - for (let i = 0, len = absolutes.length; i < len; i++) { - if (!signs[i]) answer += absolutes[i] * -1; - else answer += absolutes[i]; - } - - return answer; -} - -// 정답 5 - prove-ability -function solution(absolutes, signs) { - let answer = 0; - absolutes.forEach((absolute, i) => { - if(!signs[i]) absolute *= -1; - answer += absolute; - }) - return answer; -} - -// 정답 6 - chaerin-dev -function solution(absolutes, signs) { - // 연산 결과를 저장할 변수 - let result = 0; - // signs의 각 요소에 대해 - signs.forEach((e, i) => { - // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌 - if (e) result += absolutes[i]; - // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌 - else result -= absolutes[i]; - }); - // result 반환 - return result; -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" "b/build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" deleted file mode 100644 index 565d4f4..0000000 --- "a/build/oldSols/level-1/\354\235\264\354\203\201\355\225\234-\353\254\270\354\236\220-\353\247\214\353\223\244\352\270\260&12930&.js" +++ /dev/null @@ -1,87 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - return s - .split(" ") - .map((word) => - word - .split("") - .map((char, index) => - index % 2 === 0 - ? word[index].toUpperCase() - : word[index].toLowerCase() - ) - .join("") - ) - .join(" "); -} - -//정답 2 - chaerin-dev -// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..! -function solution(s) { - let result = ""; - let flag = true; - for (let i = 0; i < s.length; i++) { - if (s[i] === " ") { - flag = false; - result += s[i]; - } else if (flag) { - result += s[i].toUpperCase(); - } else { - result += s[i].toLowerCase(); - } - flag = !flag; - } - return result; -} - -//정답 3 - jaewon1676 -function solution(s) { - return s - .split(" ") - .map((el) => - el - .split("") - .map((el, index) => - index % 2 == 0 ? el.toUpperCase() : el.toLowerCase() - ) - .join("") - ) - .join(" "); -} - -/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ] - -.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 -[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]] - -.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()) -//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다! -//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다. -[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]] - -.join('') 작은 배열들을 합쳐줍니다. -['TrY', 'HeLlO', 'WoRlD'] - -.join(' ') 큰 배열들을 합쳐줍니다. -"TrY HeLlO WoRlD" - -대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 -문자열을 연습하는데 좋은 문제입니다. -*/ - - -//정답 4 - prove-ability -function solution(s) { - let answer = ''; - s.split(" ").forEach((word) => { - for(let i = 0, len = word.length; i < len; i++) { - if(i % 2 === 0) answer+=word[i].toUpperCase(); - else answer+=word[i].toLowerCase(); - } - answer += " "; - }) - answer = answer.slice(0, answer.length - 1) - return answer; -} diff --git "a/build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" "b/build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" deleted file mode 100644 index 920c207..0000000 --- "a/build/oldSols/level-1/\354\236\220\353\246\277\354\210\230-\353\215\224\355\225\230\352\270\260&12931&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return n - .toString() - .split("") - .map((x) => parseInt(x)) - .reduce((acc, curr) => acc + curr, 0); -} - -//정답 2 - chaerin-dev -function solution(n) { - // 숫자 -> 문자열 -> 배열 -> 각 요소를 정수로 변환한 후 더한 누적 결과값 반환 - return String(n) - .split("") - .reduce((acc, item) => (acc += parseInt(item)), 0); -} - -//정답 3 - chaerin-dev -function solution(n) { - let result = 0; - while (n > 0) { - result += n % 10; - n = Math.floor(n / 10); - } - return result; -} - -// 정답 4 - prove-ability -function solution(n) { - var answer = 0; - n.toString() - .split("") - .forEach((v) => { - answer += parseInt(v); - }); - return answer; -} diff --git "a/build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" "b/build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" deleted file mode 100644 index a6eb8bb..0000000 --- "a/build/oldSols/level-1/\354\236\220\354\227\260\354\210\230-\353\222\244\354\247\221\354\226\264-\353\260\260\354\227\264\353\241\234-\353\247\214\353\223\244\352\270\260&12932&.js" +++ /dev/null @@ -1,66 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return n - .toString() - .split("") - .reverse() - .map((x) => parseInt(x)); -} - -//정답 2 - chaerin-dev -function solution(n) { - // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환 - return String(n) - .split("") - .reverse() - .map((item) => parseInt(item)); -} - -//정답 3 - jaewon1676 -function solution(n) { - var answer = []; - // 정수형 => 문자형 => 하나씩 잘라서 뒤집어서 모아준다. - n = n.toString().split("").reverse().join(""); - for (let i = 0; i < n.length; i++) { - answer.push(parseInt(n[i])); // n은 지금 문자형이기때문에 Push 하기전에 정수형으로 바꿔줌 - // answer.push(n[i]) 로 해주면 현재 n[i]는 문자형이기때문에 결과는 ["5","4","3","2","1"] 가 됩니다. - // answer(parseInt(n[i])) 로 해준다면 n[i]는 문자형 => 정수형으로 변하기 때문에 결과는 [5, 4, 3, 2, 1] 가 됩니다. - // 문자형과 정수형의 차이는 숫자에 큰 따옴표가 있느냐 없느냐의 차이입니다. - } - return answer; -} - -//정답 4 - jaewon1676 -function solution(n) { - return (n = n - .toString() - .split("") - .reverse() - .map((o) => (o = parseInt(o)))); -} - -// 정답 5 - prove-ability -function solution(n) { - // 1. 문자열 변환 - // 2. 배열로 변환 - // 3. 배열 반전 - // 4. 정수로 변환 - return n - .toString() - .split("") - .reverse() - .map((v) => parseInt(v)); -} - -//정답 6 - yongchanson -function solution(n) { - let answer = []; - let string = n.toString(); - for (let i = string.length - 1; i >= 0; i--) { - let slice = string.substr(i, 1) * 1; - answer.push(slice); - } - return answer; -} diff --git "a/build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" "b/build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" deleted file mode 100644 index 4b8b08d..0000000 --- "a/build/oldSols/level-1/\354\240\225\354\210\230-\353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234-\353\260\260\354\271\230\355\225\230\352\270\260&12933&.js" +++ /dev/null @@ -1,28 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return parseInt( - n - .toString() - .split("") - .sort((a, b) => b - a) - .join("") - ); -} - -//정답 2 - chaerin-dev -function solution(n) { - // 정수 -> 문자열 -> 배열 - let arrN = String(n).split(""); - // 배열 내림차순 정렬 - arrN.sort((a, b) => b - a); - // 배열 -> 문자열 -> 정수 - return parseInt(arrN.join("")); -} - -//정답 3 - prove-ability -function solution(n) { - return parseInt(n.toString().split("").sort((a, b) => b - a).join(""), 10); -} - diff --git "a/build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" "b/build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" deleted file mode 100644 index 95c9d82..0000000 --- "a/build/oldSols/level-1/\354\240\225\354\210\230-\354\240\234\352\263\261\352\267\274-\355\214\220\353\263\204&12934&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n) { - return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1; -} - -//정답 2 - chaerin-dev -function solution(n) { - // n의 제곱근값을 x에 저장 - let x = Math.sqrt(n); - // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환 - return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1; -} - -//정답 3 - prove-ability -function solution(n) { - // n의 제곱근을 x 초기화 - const x = Math.sqrt(n); - // 양의 정수라면 x + 1 제곱 반환 - if(Number.isInteger(x)) return Math.pow(x + 1, 2) - // 아니라면 -1 반환 - return -1; -} - -//정답 4 - jaewon1676 -function solution(n) { - let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인 - if (s ** 2 === n) return ((s+1) ** 2) - - return -1; -} - -//정답 5 - yongchanson -function solution(n) { - const sqrt = Math.sqrt(n); - //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수 - return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1; -} diff --git "a/build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" "b/build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" deleted file mode 100644 index b979bc2..0000000 --- "a/build/oldSols/level-1/\354\240\234\354\235\274-\354\236\221\354\235\200-\354\210\230-\354\240\234\352\261\260\355\225\230\352\270\260&12935&.js" +++ /dev/null @@ -1,68 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr) { - const index = arr.indexOf(Math.min(...arr)); - arr.splice(index, 1); - return arr.length === 0 ? [-1] : arr; -} - -//정답 2 - jaewon1676 -function solution(arr) { - var answer = []; - - let min = Math.min(...arr); - while (1) { - for (let i = 0; i < arr.length; i++) { - if (min == arr[i]) { - arr.splice(i, 1); - if (arr.length == 0) { - return [-1]; - } else { - return arr; - } - } - } - } - return -1; -} - -/* 풀이과정 -1. 배열의 최솟값을 min 변수에 담아줍니다. -2. 배열을 순회하며 최솟값을 찾아 splice 메서드를 사용해 최솟값의 자리만 제거해줍니다. -3. 최솟값 제거 후 배열 크기가 0이면 -1, 그렇지 않으면 배열 그대로 반환합니다. */ - -//정답 3 - jaewon1676 -function solution(arr) { - arr.splice(arr.indexOf(Math.min(...arr)), 1); - if (arr.length < 1) return [-1]; - return arr; -} - -/* 풀이과정 arr [4,3,2,1] 일경우 -Math.min(...arr)은 1 -arr.indexOf(1), 1이 있는 index가 3이므로 3 반환. -arr.splice(3, 1) arr의 3번째 index만 제거 해준다. -arr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */ - -//정답 4 - chaerin-dev -function solution(arr) { - // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제 - arr.splice(arr.indexOf(Math.min(...arr)), 1); - // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환 - return arr.length ? arr : [-1]; -} - -//정답 3 - prove-ability -function solution(arr) { - // 최솟값 찾기 - const min = Math.min(...arr); - // arr 중 min 과 같은 요소의 인덱스 제거 - arr.splice( - arr.findIndex((num) => num === min), - 1 - ); - // 만약 arr 가 비어있다면 [-1] 반환 - if (arr.length === 0) return [-1]; - return arr; -} diff --git "a/build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" "b/build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" deleted file mode 100644 index 4562ac1..0000000 --- "a/build/oldSols/level-1/\354\247\201\354\202\254\352\260\201\355\230\225-\353\263\204\354\260\215\352\270\260&12969&.js" +++ /dev/null @@ -1,54 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - chaerin-dev -process.stdin.setEncoding("utf8"); -process.stdin.on("data", (data) => { - const n = data.split(" "); - const a = Number(n[0]), - b = Number(n[1]); - // 정답을 저장할 문자열 answer - answer = ""; - // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복 - for (let i = 0; i < b; i++) { - // 가로 길이만큼 문자열에 별 더해주기 - for (let j = 0; j < a; j++) answer += "*"; - // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기 - answer += "\n"; - } - // 정답 출력 - console.log(answer); -}); - -//정답 2 - prove-ability -process.stdin.setEncoding('utf8'); -process.stdin.on('data', data => { - const nums = data.split(" "); - const n = Number(nums[0]), m = Number(nums[1]); - - let result = ""; - // 2차원으로 접근 - // 세로 길이만큼 반복 - for(let i = 0; i < m; i++) { - // 가로 길이만큼 별 더하기 - for(let j = 0; j < n; j++) { - result += "*"; - } - // 가로가 끝나면 줄내림 - result += "\n"; - } - console.log(result) -}); - -//정답 3 - yongchanson -process.stdin.setEncoding("utf8"); -process.stdin.on("data", (data) => { - const n = data.split(" "); - const a = Number(n[0]), - b = Number(n[1]); - console.log(("*".repeat(a) + `\n`).repeat(b)); -}); -/* -<풀이과정> -repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count); -'*'.repeat(a) : *를 a만큼 반복한다. -*/ diff --git "a/build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" "b/build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" deleted file mode 100644 index 377141c..0000000 --- "a/build/oldSols/level-1/\354\247\235\354\210\230\354\231\200-\355\231\200\354\210\230&12937&.js" +++ /dev/null @@ -1,29 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(num) { - return num % 2 === 0 ? "Even" : "Odd"; -} - -//정답 2 - chaerin-dev -function solution(num) { - return num % 2 == 0 ? "Even" : "Odd"; -} - -//정답 3 - jaewon1676 -function solution(num) { - let answer; - num % 2 == 0 ? (answer = "Even") : (answer = "Odd"); - // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환. - return answer; -} - -//정답 4 - prove-ability -function solution(num) { - return num % 2 === 0 ? "Even" : "Odd"; -} - -//정답 5 - yongchanson -function solution(num) { - return num % 2 ? "Odd" : "Even"; -} diff --git "a/build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" "b/build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" deleted file mode 100644 index 5baa4f6..0000000 --- "a/build/oldSols/level-1/\354\262\264\354\234\241\353\263\265&42862&.js" +++ /dev/null @@ -1,127 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n, lost, reserve) { - let answer = 0; - let studentClothes = new Array(n + 2).fill(1); - for (const student of reserve) studentClothes[student] += 1; - for (const student of lost) studentClothes[student] -= 1; - for (let i = 1; i < n + 1; i++) { - if (studentClothes[i] === 0) { - if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) { - if (studentClothes[i - 1] === 2) { - studentClothes[i - 1] -= 1; - studentClothes[i] += 1; - } else { - studentClothes[i + 1] -= 1; - studentClothes[i] += 1; - } - } - } - } - for (const student of studentClothes) { - answer += student > 0 ? 1 : 0; - } - answer -= 2; - return answer; -} - -//정답 2 - prove-ability -function solution(n, lost, reserve) { - // students 초기화 - 학생들은 체육복 개수 1로 초기화 - let students = Array.from({ length: n }).fill(1); - - // 읽어버린 학생 개수 반영 - lost.forEach((target) => { - students[target - 1]--; - }); - - // 여별 체육복 개수 반영 - reserve.forEach((target) => { - students[target - 1]++; - }); - - // 학생들 순차적으로 접근 - for (let i = 0, len = students.length; i < len; i++) { - // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue - if (students[i] === 0 || students[i] === 1) continue; - // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 - if (i !== 0 && students[i - 1] === 0) { - // 이전 학생 증가 - students[i - 1]++; - // 자신은 대여해줬으니 감소 - students[i]--; - } - // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 - if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) { - // 다음 학생 증가 - students[i + 1]++; - // 자신은 대여해줬으니 감소 - students[i]--; - } - } - // 체육복 1개 이상을 가진 학생들의 수 반환 - return students.filter((v) => v >= 1).length; -} - -//정답 3 - jaewon1676 -function solution(n, lost, reserve) { - let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다 - let cnt = 0; - for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복 - answer[reserve[i]-1] += 1 - } - for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1 - answer[lost[i]-1] -= 1 - } - for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다. - if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){ - answer[i] = 1 - answer[i+1] = 1 - } - } - for(let i = 0; i < answer.length; i++){ - (answer[i] >= 1 ? cnt += 1 : null) - } - return cnt - } - //그리디 - // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다. - // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. - -//정답 4 - chaerin-dev -function solution(n, lost, reserve) { - // 학생들의 체육복 개수를 저장할 배열 students - // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정 - // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음 - const students = Array.from({ length: n + 1 }, () => 1); - - // 체육복 분실/여분 정보 students 배열에 반영 - lost.forEach((lostStudent) => students[lostStudent]--); - reserve.forEach((reserveStudent) => students[reserveStudent]++); - - // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt - let cnt = 0; - students.forEach((student, i) => { - // 현재 인덱스의 학생이 체육복이 없다면 - if (student === 0) { - // 바로 앞 학생이 체육복 여분이 있다면 - if (students[i - 1] === 2) { - // 바로 앞 학생에게 체육복 빌리기 - students[i - 1]--; - student++; - } - // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면 - else if (students[i + 1] === 2) { - // 바로 뒤 학생에게 체육복 빌리기 - students[i + 1]--; - student++; - } - // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음 - else cnt++; - } - }); - - // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수 - return n - cnt; -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" "b/build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" deleted file mode 100644 index 2a1955e..0000000 --- "a/build/oldSols/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12940&.js" +++ /dev/null @@ -1,33 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(n, m) { - const gcd = greatestCommonDivisor(n, m); - return [gcd, (n * m) / gcd]; -} - -const greatestCommonDivisor = (a, b) => { - if (b === 0) return a; - else return greatestCommonDivisor(b, a % b); -}; - -//정답 2 - chaerin-dev -function solution(n, m) { - // 최대공약수 구하기 - let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m)); - // 최소공배수 구하기 - let lcm = (n, m) => (n * m) / gcd(n, m); - // 결과 출력 - return [gcd(n, m), lcm(n, m)]; -} - -//정답 3 - yongchanson -function solution(a, b) { - let gcd = 0; - for (let i = 1; i <= Math.min(a, b); i++) { - if ((a % i) + (b % i) === 0) { - gcd = i; - } - } - return [gcd, (a / gcd) * b]; -} diff --git "a/build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" "b/build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" deleted file mode 100644 index 6f0a7d4..0000000 --- "a/build/oldSols/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225&86491&.js" +++ /dev/null @@ -1,32 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(sizes) { - const maxWidth = Math.max(...sizes.map(card => Math.min(...card))); - const maxHeight = Math.max(...sizes.map(card => Math.max(...card))); - return maxWidth * maxHeight; -} - -// 정답 2 - prove-ability -function solution(sizes) { - // 가로, 세로 중 큰 값을 가로 길이로 변경(스압) - sizes.forEach(([width, height], index) => { - if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]]; - }); - - // 가로, 세로 각각 큰 값 추출 - const widthMax = Math.max(...sizes.map(v => v[0])); - const widthHeight = Math.max(...sizes.map(v => v[1])); - - return widthMax * widthHeight; -} -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(sizes) { - for (let card of sizes) { - if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]]; - } - - const maxWidth = Math.max(...sizes.map(card => card[0])); - const maxHeight = Math.max(...sizes.map(card => card[1])); - return maxWidth * maxHeight; -} diff --git "a/build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" "b/build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" deleted file mode 100644 index 27f96d5..0000000 --- "a/build/oldSols/level-1/\354\275\234\353\235\274\354\270\240-\354\266\224\354\270\241&12943&.js" +++ /dev/null @@ -1,75 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(num) { - let answer = 0; - while (answer <= 500) { - if (num === 1) return answer; - num = num % 2 === 0 ? num / 2 : num * 3 + 1; - answer += 1; - } - return -1; -} - -//정답 2 - chaerin-dev -function solution(num) { - // 작업을 반복한 횟수를 저장할 변수 - let cnt = 0; - // num이 1이 되면 반복 종료 - while (num > 1) { - // 작업을 500번 반복해도 1이 되지 않으면 -1 반환 - if (cnt == 500) return -1; - // 작업 반복 횟수 증가 - cnt++; - // 입력된 수가 짝수이면 2로 나누기 - if (num % 2 == 0) num /= 2; - // 입력된 수가 홀수이면 3을 곱하고 1을 더하기 - else { - num *= 3; - num++; - } - } - // 작업을 반복한 횟수 반환 - return cnt; -} - -//정답 3 - jaewon1676 -function solution(num) { - var answer = 0; - // num이 1이 아니고, answer이 500이 아니면 진행. - // 두 가지 조건중 하나라도 맞지 않으면 while문 종료. - while (num != 1 && answer != 500) { - //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다. - num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1); - answer++; - } - return num == 1 ? answer : -1; -} - -//정답 4 - prove-ability -function solution(num) { - let count = 0; - - // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. - while (num !== 1) { - // 입력된 수가 짝수라면 2로 나눕니다. - if (num % 2 === 0) num /= 2; - // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. - else num = num * 3 + 1; - count++; - // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요 - if (count > 500) return -1; - } - - return count; -} - -//정답 5 - yongchanson -function solution(num) { - let count = 0; - while (num !== 1) { - if (count++ === 500) return -1; - num = num % 2 ? num * 3 + 1 : num / 2; - } - return count; -} diff --git "a/build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" "b/build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" deleted file mode 100644 index efdcfcc..0000000 --- "a/build/oldSols/level-1/\355\201\254\353\240\210\354\235\270-\354\235\270\355\230\225\353\275\221\352\270\260-\352\262\214\354\236\204&64061&.js" +++ /dev/null @@ -1,84 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(board, moves) { - let answer = 0; - const length = board.length - let basket = [] - moves.forEach(move => { - for (let i = 0; i < length; i++) { - const item = board[i][move - 1] - if (item !== 0) { - if (basket[basket.length - 1] !== item) { - basket.push(item) - } else { - basket.pop() - answer += 2 - } - board[i][move - 1] = 0 - break - } - } - }) - - return answer; -} - -//정답 2 - jaewon1676 -function solution(board, moves) { - var answer = 0; // 인형을 터뜨린 횟수 - let basket = []; // 바구니 - let crane = 0; // 크레인의 행의 위치 - for (let i = 0; i < moves.length; i++) { - crane = moves[i] - 1; // crane = 0 - for (let j = 0; j < board.length; j++) { - if (board[j][crane] == 0) - else if (board[j][crane] != 0) { - basket.push(board[j][crane]) - board[j][crane] = 0 - if (basket[basket.length - 1] == basket[basket.length - 2]) { - basket.pop(); - basket.pop(); - answer += 2; - } - break; - } - } - } - - return answer; -} - -/* 풀이 과정 -1. 입력받은 moves의 length만큼 for문을 돌린다. -2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다. -3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다. -4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */ - -//정답 3 - chaerin-dev -function solution(board, moves) { - let n = board.length; - - // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경 - board = board.flat(); - let rotatedBoard = Array.from({ length: n }, (i) => []); - for (let i = 0; i < board.length; i++) { - if (board[i]) rotatedBoard[i % n].push(board[i]); - } - - // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기 - let stack = []; - let cnt = 0; - for (let move of moves) { - let doll = rotatedBoard[move - 1].shift(); - if (doll === undefined) continue; - if (stack[stack.length - 1] === doll) { - stack.pop(); - cnt += 2; - } else { - stack.push(doll); - } - } - - return cnt; -} \ No newline at end of file diff --git "a/build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" "b/build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" deleted file mode 100644 index 00dc63c..0000000 --- "a/build/oldSols/level-1/\355\202\244\355\214\250\353\223\234-\353\210\204\353\245\264\352\270\260&67256&.js" +++ /dev/null @@ -1,139 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(numbers, hand) { - let [l, r] = [10, 12]; - const moveL = n => { - l = n; - return 'L'; - }; - - const moveR = n => { - r = n; - return 'R'; - }; - return numbers - .map(n => { - if (n === 0) n = 11; - const to = n => { - const numLocation = numToLocation(n); - const lDistance = distanceBtwLocation(numToLocation(l), numLocation); - const rDistance = distanceBtwLocation(numToLocation(r), numLocation); - if (lDistance < rDistance) return moveL(n); - if (rDistance > lDistance) return moveR(n); - return hand === 'left' ? moveL(n) : moveR(n); - }; - return num % 3 === 1 ? leftTo(num) : num % 3 === 0 ? rightTo(num) : to(num); - }) - .join(''); -} - -function numToLocation(num) { - return [Math.floor((num - 1) / 3), (num - 1) % 3]; -} - -function distanceBtwLocation(a, b) { - return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]); -} - -//정답 2 - chaerin-dev -function solution(numbers, hand) { - // 키패드를 4행 3열의 이차원 배열이라고 생각 - - // leftRow, leftCol: 왼손의 현재 위치 - let [leftRow, leftCol] = [3, 0]; - // rightRow, rightCol: 오른손의 현재 위치 - let [rightRow, rightCol] = [3, 2]; - // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열 - let result = ''; - - // 눌러야할 각 번호가 - numbers.forEach(e => { - // 1/4/7이면 왼손으로 눌러야하므로 - if (e === 1 || e === 4 || e === 7) { - // 왼손의 위치 업데이트 - [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0]; - // result 문자열에 "L" 이어붙여줌 - result += 'L'; - } - - // 3/6/9이면 오른손으로 눌러야하므로 - else if (e === 3 || e === 6 || e === 9) { - // 오른손의 위치 업데이트 - [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2]; - // result 문자열에 "R" 이어붙여줌 - result += 'R'; - } - - // 2/5/8/0이면 - else { - // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌 - if (e === 0) e = 11; - - // leftRow, leftCol: 다음에 눌러야 할 번호의 위치 - let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1]; - // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리 - let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol); - // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리 - let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol); - - // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로 - if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) { - // 왼손의 위치 업데이트 - [leftRow, leftCol] = [nextRow, nextCol]; - // result 문자열에 "L" 이어붙여줌 - result += 'L'; - } - - // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로 - else { - // 오른손의 위치 업데이트 - [rightRow, rightCol] = [nextRow, nextCol]; - // reuslt 문자열에 "R" 이어붙여줌 - result += 'R'; - } - } - }); - - // result 문자열 반환 - return result; -} - -//정답 3(🎩 refactor 220425) - codeisneverodd -function solution(numbers, hand) { - let leftNum = 10; - let rightNum = 12; - return numbers - .map(num => { - if (num === 0) { - num = 11; - } - if (num % 3 === 1) { - return leftTo(num); - } else if (num % 3 === 0) { - return rightTo(num); - } else { - const numLocation = numToLocation(num); - const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation); - const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation); - if (leftDistance === rightDistance) { - return hand === 'left' ? leftTo(num) : rightTo(num); - } else if (leftDistance < rightDistance) { - return leftTo(num); - } else { - return rightTo(num); - } - } - }) - .join(''); - - function leftTo(num) { - leftNum = num; - return 'L'; - } - - function rightTo(num) { - rightNum = num; - return 'R'; - } -} diff --git "a/build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" "b/build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" deleted file mode 100644 index e613264..0000000 --- "a/build/oldSols/level-1/\355\217\211\352\267\240-\352\265\254\355\225\230\352\270\260&12944&.js" +++ /dev/null @@ -1,32 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr) { - return arr.reduce((acc, curr) => acc + curr) / arr.length; -} - -//정답 2 - jaewon1676 -function solution(arr) { - var answer = 0; - for (var i = 0; i < arr.length; i++) { - answer += arr[i]; - } - return answer / arr.length; -} - -//정답 3 - chaerin-dev -function solution(arr) { - // arr의 모든 요소를 sum에 더힘 - let sum = arr.reduce((sum, e) => sum + e); - // sum을 arr의 요소의 갯수로 나눈 후 반환 - return sum / arr.length; -} - -// 정답 4 - prove-ability -function solution(arr) { - var answer = 0; - arr.forEach((num) => { - answer += num; - }); - return answer / arr.length; -} diff --git "a/build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" "b/build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" deleted file mode 100644 index c99d311..0000000 --- "a/build/oldSols/level-1/\355\217\260\354\274\223\353\252\254&1845&.js" +++ /dev/null @@ -1,59 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(nums) { - const numLen = nums.length; - const setLen = [...new Set(nums)].length; - return numLen / 2 >= setLen ? setLen : numLen / 2; -} - -//정답 2 - jaewon1676 -function solution(nums) { - let max = nums.length / 2; // N / 2 - let set = [...new Set(nums)]; // 중복을 없앤다. - return set.length > max ? max : set.length; -} - -/* 풀이 과정 -1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다. -2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다. -3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 - 두가지 경우의 수로 좁혀진다. */ - -// 정답 3 - prove-ability -function solution(nums) { - var answer = 0; - // set 을 사용해 중복 제거 - const set = new Set(); - nums.forEach((num) => { - set.add(num); - }); - // set 의 사이즈가 N/2 보다 크다면 N/2 반환 - // 그렇지 않다면 set size 반환 - if (set.size > nums.length / 2) answer = nums.length / 2; - else answer = set.size; - - return answer; -} - -// 정답 4 - yongchanson -function solution(nums) { - const unique = nums.filter((element, index) => { - return nums.indexOf(element) === index; - }); - - return unique.length > nums.length / 2 ? nums.length / 2 : unique.length; -} - -//정답 5 - chaerin-dev -function solution(nums) { - // 가질 수 있는 폰켓몬의 수 - const getCnt = nums.length / 2; - // 폰켓몬 종류의 수 - const setSize = new Set(nums).size; - // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면 - // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음 - // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면 - // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수 - return setSize > getCnt ? getCnt : setSize; -} diff --git "a/build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" "b/build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" deleted file mode 100644 index d1b0ad8..0000000 --- "a/build/oldSols/level-1/\355\225\230\354\203\244\353\223\234-\354\210\230&12947&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(x) { - const sum = x - .toString() - .split("") - .map((x) => parseInt(x)) - .reduce((acc, curr) => acc + curr); - return x % sum === 0; -} - -//정답 2 - chaerin-dev -function solution(x) { - // x의 각 자리에 접근하기 위해 x를 문자열로 변환 - let x_str = x.toString(); - // 각 자릿수의 합을 저장할 변수 - let sum_of_digits = 0; - // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌 - for (let i = 0; i < x_str.length; i++) { - sum_of_digits += Number(x_str[i]); - } - // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환 - return x % sum_of_digits == 0; -} - -//정답 3 - jaewon1676 -function solution(x) { - let sum = 0; - let arr = String(x).split(""); // 숫자를 하나씩 분리한다. - - for (var i = 0; i < arr.length; i++) { - sum += Number(arr[i]); // 각 숫자를 더해준다. - } - - return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수 -} - -//정답 4 - prove-ability -function solution(x) { - var answer = true; - // 모든 자릿수의 합을 구한다 - const sum = x - .toString() - .split("") - .reduce((acc, cur) => acc + parseInt(cur, 10), 0); - // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환 - if (x % sum !== 0) return false; - return answer; -} diff --git "a/build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" "b/build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" deleted file mode 100644 index 0d5e21a..0000000 --- "a/build/oldSols/level-1/\355\225\270\353\223\234\355\217\260-\353\262\210\355\230\270-\352\260\200\353\246\254\352\270\260&12948&.js" +++ /dev/null @@ -1,22 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(phone_number) { - return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); -} - -//정답 2 - chaerin-dev -function solution(phone_number) { - // "*"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과 - // phone_number의 -4인덱스부터 끝까지 추출한 문자열을 - // 이어붙인 후 반환 - return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); -} - -// 정답 3 - prove-ability -function solution(phone_number) { - var answer = ""; - answer += "*".repeat(phone_number.length - 4); - answer += phone_number.slice(phone_number.length - 4, phone_number.length); - return answer; -} diff --git "a/build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" "b/build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" deleted file mode 100644 index 92ce3ff..0000000 --- "a/build/oldSols/level-1/\355\226\211\353\240\254\354\235\230-\353\215\247\354\205\210&12950&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(arr1, arr2) { - const answer = []; - arr1.forEach((row, rowIndex) => { - answer.push(row.map((col, colIndex) => col + arr2[rowIndex][colIndex])); - }); - return answer; -} - -//정답 2 - codeisneverodd -function solution(arr1, arr2) { - var answer = new Array(arr1.length); - for (let i = 0; i < arr1.length; i++) { - answer[i] = new Array(arr1[0].length); - } - for (let row = 0; row < answer.length; row++) { - for (let col = 0; col < answer[0].length; col++) { - answer[row][col] = arr1[row][col] + arr2[row][col]; - } - } - return answer; -} - -//정답 3 - chaerin-dev -function solution(arr1, arr2) { - var answer = []; - for (let i = 0; i < arr1.length; i++) { - let ans_row = []; - for (let j = 0; j < arr1[0].length; j++) { - ans_row.push(arr1[i][j] + arr2[i][j]); - } - answer.push(ans_row); - } - return answer; -} - -//정답 4 - yongchanson -function solution(A, B) { - let answer = []; - - for (let i = 0; i < A.length; i++) { - answer[i] = []; - for (let j = 0; j < A[0].length; j++) { - answer[i][j] = A[i][j] + B[i][j]; - } - } - return answer; -} diff --git "a/build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" "b/build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" deleted file mode 100644 index 5bf2450..0000000 --- "a/build/oldSols/level-2/124-\353\202\230\353\235\274\354\235\230-\354\210\253\354\236\220&12899&.js" +++ /dev/null @@ -1,62 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - var answer = ''; - const oneTwoFour = ['4', '1', '2'] - while (n > 0) { - const remainder = n % 3 - answer = oneTwoFour[remainder] + answer; - n = Math.floor((n - 1) / 3) //나누어떨어지지 않을 때에도 -1해도 상관없음 - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(n) { - var answer = ''; - const oneTwoFour = ['4', '1', '2'] - while (n > 0) { - const remainder = n % 3 - answer = oneTwoFour[remainder] + answer; - if (remainder === 0) { - n = Math.floor((n - 1) / 3) - } else { - n = Math.floor(n / 3) - } - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(n) { - const number = [ 4, 1, 2]; - let answer = ""; - - while(n){ // - answer = number[n%3] + answer; - n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3); - } - - return answer -} - -//정답 4- RyanDeclan -// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용 -// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드 -let result = ""; -function solution(n) { - let remainder = n % 3; - let quotient = Math.floor(n / 3) - if(!remainder){ - quotient = Math.floor(n / 3) - 1; - remainder = 3 - } - result += remainder; - if( quotient <= 3){ - if(quotient)result += quotient - result = result.replace(/["3"]/g,"4") - return result.split("").reverse().join("") - } - return solution(quotient); -} diff --git "a/build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" "b/build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" deleted file mode 100644 index aeacf60..0000000 --- "a/build/oldSols/level-2/2-x-n-\355\203\200\354\235\274\353\247\201&12900&.js" +++ /dev/null @@ -1,16 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 -function solution(n) { - let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력, - if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다. - for (let i=3; i<=n; i++){ - dp.push((dp[i-1] + dp[i-2]) % 1000000007); - } - } - return dp[n] -} -/* -n이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다. -n = (n - 1) + (n - 2)의 식으로 구할 수 있고, -제한 사항을 주의해서 풀어보자. */ \ No newline at end of file diff --git "a/build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" "b/build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" deleted file mode 100644 index 425f875..0000000 --- "a/build/oldSols/level-2/2\352\260\234-\354\235\264\355\225\230\353\241\234-\353\213\244\353\245\270-\353\271\204\355\212\270&77885&.js" +++ /dev/null @@ -1,17 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - le2sky -function solution(numbers) { - const answer = []; - numbers.forEach((num) => { - if (num % 2 == 0) answer.push(num + 1); - else { - let binary = ["0", ...num.toString(2)]; - let last = binary.lastIndexOf("0"); - binary[last] = "1"; - binary[last + 1] = "0"; - answer.push(parseInt(binary.join(""), 2)); - } - }); - return answer; -} diff --git "a/build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" "b/build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" deleted file mode 100644 index 9d2fe52..0000000 --- "a/build/oldSols/level-2/3-x-n-\355\203\200\354\235\274\353\247\201&12902&.js" +++ /dev/null @@ -1,18 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(n) { - if (n % 2 !== 0) return 0; - - const getCount = n => { - const k = n / 2; - const count = [3, 11, ...Array(k - 2)]; - const divider = 1000000007; - for (let i = 2; i < k; i++) { - count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider; - } - return count[count.length - 1]; - }; - - return getCount(n); -} diff --git a/build/oldSols/level-2/H-Index&42747&.js b/build/oldSols/level-2/H-Index&42747&.js deleted file mode 100644 index 1af72bc..0000000 --- a/build/oldSols/level-2/H-Index&42747&.js +++ /dev/null @@ -1,37 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(citations) { - var answer = 0; - citations.sort((a, b) => b - a) - let h = 0 - while (h + 1 <= citations[h]) h++ - answer = h - return answer; -} - -//정답 2 - codeisneverodd -function solution(citations) { - var answer = 0; - let h = 0 - let length = 0 - while (length >= h) { - h++ - length = citations.filter(citation => citation >= h).length - } - answer = h - 1 - return answer; -} - -//정답 3 - jaewon1676 -function solution(citations) { - var answer = 0; - citations.sort((a,b)=>(b-a)) - - for(var i=0; i word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ') - //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다. - return answer; -} - -//정답 2 - jaewon1676 -function solution(s) { - s = s.split(' ').map(el => el.split('').map((el, index) => - index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ') - return s; -} -// 문자열을 연습하기에 좋은 문제입니다. - -// s.split(' ') // 띄어쓰기를 기준으로 나눕니다. -// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 -// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase()) -// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. -// .join('') 작은 배열들을 합쳐줍니다. -// .join(' ') 큰 배열들을 합쳐줍니다. - -//정답 3 - yongchanson -function solution(s) { - let answer = []; - s = s.split(" "); - - for (let i = 0; i < s.length; i++) { - answer.push( - s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase() - ); - } - return answer.join(" "); -} - -//정답 4 - RyanDeclan - -function solution(s) { - return s.toLowerCase().split(" ").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : "").join(" "); -} - -// 이 문제에서 제일 핵심은 "공백문자가 연속해서 나올 수 있습니다." 입니다. 이 부분을 꼭 고려하셔야합니다. -// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다. -// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. -//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다. diff --git a/build/oldSols/level-2/N-Queen&12952&.js b/build/oldSols/level-2/N-Queen&12952&.js deleted file mode 100644 index 8d36ad5..0000000 --- a/build/oldSols/level-2/N-Queen&12952&.js +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - /* - 1. 0번째 행에 0번째 queen을 놓는다. - 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다. - 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다. - 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다. - 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다. - */ - let answer = 0; - const canBePlacedOn = (chess, currentRow) => { - //해당 행에 둔 queen이 유효한지 - for (let prevRow = 0; prevRow < currentRow; prevRow++) { - const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow]) - const onStraight = chess[prevRow] === chess[currentRow] - if (onDiagonal || onStraight) return false - } - return true - } - const placeQueen = (chess, currentRow) => { - //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴 - let count = 0 - if (currentRow === chess.length) return 1 - for (let currentQueen = 0; currentQueen < n; currentQueen++) { - //queen을 우선 배치한 후 가능한지 살펴본다. - chess[currentRow] = currentQueen - if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1) - } - return count - } - for (let firstQueen = 0; firstQueen < n; firstQueen++) { - const chess = new Array(n).fill(-1) - chess[0] = firstQueen - answer += placeQueen(chess, 1) - } - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" "b/build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" deleted file mode 100644 index 239fc80..0000000 --- "a/build/oldSols/level-2/N\352\260\234\354\235\230-\354\265\234\354\206\214\352\263\265\353\260\260\354\210\230&12953&.js" +++ /dev/null @@ -1,21 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(arr) { - var answer = 0; - answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1) - return answer; -} - -function leastCommonMultiple(a, b) { - return a * b / greatestCommonDivisor(a, b) -} - -function greatestCommonDivisor(a, b) { - while (b > 0) { - let r = a % b; - a = b; - b = r; - } - return a; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" "b/build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" deleted file mode 100644 index 3636716..0000000 --- "a/build/oldSols/level-2/[1\354\260\250]-\353\211\264\354\212\244-\355\201\264\353\237\254\354\212\244\355\204\260\353\247\201&17677&.js" +++ /dev/null @@ -1,78 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(str1, str2) { - var answer = 0; - let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2) - const union = new Set([...compare1, ...compare2]) - let multiIntersectionLen = 0, multiUnionLen = 0 - for (const slice of union) { - const compare1Count = compare1.filter(x => x === slice).length, - compare2Count = compare2.filter(x => x === slice).length - multiIntersectionLen += Math.min(compare1Count, compare2Count) - multiUnionLen += Math.max(compare1Count, compare2Count) - } - answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536) - return answer; -} - -function verifiedSlices(str) { - const onlyAlphabet = /[a-zA-Z]{2}/ - let result = [] - for (let i = 0; i < str.length - 1; i++) { - const slice = str.slice(i, i + 2) - if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase()) - } - return result -} - -//정답 2 - jaewon1676 -function solution(str1, str2) { - - str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌. - str2 = str2.toUpperCase(); - let arr1 = new Array() // 빈 객체를 만들어줌. - let arr2 = new Array() - - for (var i = 0; i < str1.length - 1; i++) { - let tmp = str1.substr(i, 2) // i부터 2개 ( i, i+1 ) - if (tmp.search(/[^A-Z]/g) >= 0) { - // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) - // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환. - continue - } - arr1.push(tmp) - } - - for (var i = 0; i < str2.length - 1; i++) { - let tmp = str2.substr(i, 2) - if (tmp.search(/[^A-Z]/g) >= 0) { - continue - } - arr2.push(tmp) - } - arr1.sort() - arr2.sort() - var a = [] // 중복포함, 교집합 배열 - var b = [] // 중복포함, 합집합 배열 - - for (var i = 0; i < arr2.length; i++) { - if (arr1.indexOf(arr2[i]) >= 0) { - // arr1 객체에 arr2[i]과 같은 값이 있는지 확인. - // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. - a.push(arr1.splice(arr1.indexOf(arr2[i]), 1)) - } - // 교집합이 성립되지 않으면 실행. - b.push(arr2[i]) - } - - for (var i = 0; i < arr1.length; i++) { - b.push(arr1[i]) - } - - // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함 - if (b.length === 0) return 65536 - if (a.length === 0) return 0 - - return Math.floor((a.length / b.length) * 65536) -} diff --git "a/build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" "b/build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" deleted file mode 100644 index ece168f..0000000 --- "a/build/oldSols/level-2/[1\354\260\250]-\354\272\220\354\213\234&17680&.js" +++ /dev/null @@ -1,58 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(cacheSize, cities) { - var answer = 0; - let cache = [] - if (cacheSize === 0) return 5 * cities.length - for (const city of cities) { - const cityLC = city.toLowerCase() - if (cache.includes(cityLC)) { - cache.splice(cache.indexOf(cityLC), 1) - cache.unshift(cityLC) - answer += 1 - } else { - if (cache.length >= cacheSize) cache.pop() - cache.unshift(cityLC) - answer += 5 - } - } - return answer; -} - -//정답 2 - jaewon1676 -function solution(cacheSize, cities) { - var answer = 0; - let cache = []; - - //캐시 크기가 0인 경우는 따로 처리 - if (cacheSize === 0) return cities.length * 5; - - while (cities.length != 0) { - // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다. - const city = cities.shift().toLowerCase(); - // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss) - if (cache.includes(city)) { - // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고, - cache.splice(cache.indexOf(city), 1); - // 맨 뒤로 push 해준다. - cache.push(city); - // cache hit - answer += 1; - } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다. - if (cache.length === cacheSize) { - cache.shift(); - } - // 새로운 캐시 맨 뒤로 push - cache.push(city); - // cache miss - answer += 5; - } - } - return answer; - } - /* LRU 알고리즘 - n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다. - n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면 - 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */ - \ No newline at end of file diff --git "a/build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" "b/build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" deleted file mode 100644 index 41b4753..0000000 --- "a/build/oldSols/level-2/[1\354\260\250]-\355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235&17679&.js" +++ /dev/null @@ -1,47 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(m, n, board) { - board = board.map(r => r.split('')); - const getSquare = ([r, c]) => [ - [r, c], - [r, c + 1], - [r + 1, c], - [r + 1, c + 1], - ]; - - const isSquare = ([r, c]) => { - if (board[r][c] === '@') return false; - return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1; - }; - - const remove = () => { - const removeArr = []; - for (let r = 0; r < m - 1; r++) { - for (let c = 0; c < n - 1; c++) { - if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v)); - } - } - removeArr.forEach(([r, c]) => { - board[r][c] = '@'; - }); - return removeArr.length !== 0; - }; - - const pull = () => { - for (let c = 0; c < n; c++) { - const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@'); - const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn]; - resultColumn.forEach((v, r) => { - board[r][c] = v; - }); - } - return board; - }; - - while (remove()) { - pull(); - } - - return board.flat().filter(v => v === '@').length; -} diff --git "a/build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" "b/build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" deleted file mode 100644 index 9bea2b8..0000000 --- "a/build/oldSols/level-2/[3\354\260\250]-n\354\247\204\354\210\230-\352\262\214\354\236\204&17687&.js" +++ /dev/null @@ -1,16 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, t, m, p) { - let queue = [], result = [], currentNumDecimal = -1, turn = 0 - while (result.length < t) { - if (queue.length === 0) { - currentNumDecimal++ - currentNumDecimal.toString(n).split('').forEach(x => queue.push(x)) - } - const currentChar = queue.shift() - if (turn % m === p - 1) result.push(currentChar) - turn++ - } - return result.join('').toUpperCase() -} \ No newline at end of file diff --git "a/build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" "b/build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" deleted file mode 100644 index 20404da..0000000 --- "a/build/oldSols/level-2/[3\354\260\250]-\353\260\251\352\270\210\352\267\270\352\263\241&17683&.js" +++ /dev/null @@ -1,42 +0,0 @@ -// https://github.com/codeisneverodd/programmers-coding-test -// 완벽한 정답이 아닙니다. -// 정답 1 - minjongbaek -function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수 - return m - .replace(/C#/g, 'c') - .replace(/D#/g, 'd') - .replace(/F#/g, 'f') - .replace(/G#/g, 'g') - .replace(/A#/g, 'a'); -} - -function solution(m, musicinfos) { - - // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다. - // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다. - // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다. - - const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다. - - const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다. - for (const info of musicinfos) { - const [start, finish, title, _score] = info.split(','); - // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다. - const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5)))); - - const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다. - - // 재생된 멜로디를 구합니다. - // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다. - // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다. - const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration); - if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다. - map.set(title, {score, playScore}); - } - } - - // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다. - // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다. - const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length); - return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다. -} \ No newline at end of file diff --git "a/build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" "b/build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" deleted file mode 100644 index 75ad8eb..0000000 --- "a/build/oldSols/level-2/[3\354\260\250]-\354\225\225\354\266\225&17684&.js" +++ /dev/null @@ -1,55 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(msg) { - const outputs = []; - const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))]; - let [start, end] = [0, 1]; - - const doesDictHave = (start, end) => dict.includes(msg.substring(start, end)); - - const getInput = (start, end) => { - if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end]; - return getInput(start, end + 1); - }; - - const addToDict = (start, end) => { - if (doesDictHave(start, end)) return; - dict.push(msg.substring(start, end)); - }; - - const addToOutputs = (start, end) => { - if (!doesDictHave(start, end)) return; - outputs.push(dict.indexOf(msg.substring(start, end))); - }; - - while (start < msg.length) { - [start, end] = getInput(start, end); - addToDict(start, end + 1); - addToOutputs(start, end); - start = end; - } - return outputs; -} - -// 정답 2 - ssi02014 -function solution(msg) { - const result = []; - const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i)) - - // 시간 복잡도 O(N^2) - const lastWordAndCompression = msg.split("").reduce((acc, cur) => { - const nextWord = acc + cur; - const nextWordIdx = dict.indexOf(nextWord); - const prevWordIdx = dict.indexOf(acc); - - if (nextWordIdx !== -1) return acc + cur; - dict.push(nextWord); - - if (prevWordIdx !== -1) result.push(prevWordIdx + 1); - return cur; - }, ""); - - result.push(dict.indexOf(lastWordAndCompression) + 1); - return result; -} diff --git "a/build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" "b/build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" deleted file mode 100644 index a645429..0000000 --- "a/build/oldSols/level-2/[3\354\260\250]-\355\214\214\354\235\274\353\252\205-\354\240\225\353\240\254&17686&.js" +++ /dev/null @@ -1,14 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(files) { - var answer = []; - const numberRegex = /[0-9]+/ - answer = files.sort((a, b) => { - const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)] - const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()] - const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])] - return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0 - }) - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" "b/build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" deleted file mode 100644 index 5425443..0000000 --- "a/build/oldSols/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234-\354\206\214\354\210\230-\352\260\234\354\210\230-\352\265\254\355\225\230\352\270\260&92335&.js" +++ /dev/null @@ -1,23 +0,0 @@ -// https://github.com/codeisneverodd/programmers-coding-test -// 완벽한 정답이 아닙니다. -// 정답 1 - minjongbaek -function isPrime(number) { // 소수를 판별하는 함수 - if (number < 2) return false; - for (let i = 2; i * i <= number; i += 1) { - if (number % i === 0) { - return false; - } - } - return true; -} - -function solution(n, k) { - // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만, - // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다. - // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다. - - // (n).toString(k) // n을 k진수로 변환합니다. - // .split('0') // 0을 기준으로 나눕니다. - // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다. - return (n).toString(k).split('0').filter((number) => isPrime(+number)).length; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" "b/build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" deleted file mode 100644 index 1fff1ad..0000000 --- "a/build/oldSols/level-2/n^2-\353\260\260\354\227\264-\354\236\220\353\245\264\352\270\260&87390&.js" +++ /dev/null @@ -1,13 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 -function solution (n, left, right) { - const answer = []; - - for (let i=left; i <= right; i++) { // left부터 right까지를 구한다. - let row = parseInt(i/n); // 행(row)을 구한다. - let column = i%n; // 열(column)을 구한다. - answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다. - } - return answer -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" "b/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" deleted file mode 100644 index d6b7ce3..0000000 --- "a/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\210\230&42746&.js" +++ /dev/null @@ -1,53 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(numbers) { - var answer = ''; - numbers.sort(sortFunc) - answer = numbers.join('') - if (answer[0] === '0') return '0' - return answer; -} - -const sortFunc = (a, b) => { - const compareA = parseInt(a.toString() + b.toString()) - const compareB = parseInt(b.toString() + a.toString()) - return compareB - compareA -} - - -// 정답 2 - createhb21 -function solution(numbers) { - let stringNum = - numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b)); - - return stringNum[0] === '0' ? '0' : stringNum.join(''); -} - -// 정답 3 - prove-ability -function solution(numbers) { - if(numbers.every(v => v === 0)) return "0"; - return numbers.sort((a, b) => { - if(a === b) return 0; - let stringA = a.toString(10), stringB = b.toString(10); - if(stringA[0] === stringB[0]) { - let aIndex = 1, bIndex = 1; - while(true) { - if(!stringA[aIndex]) --aIndex; - if(!stringB[bIndex]) --bIndex; - if(stringA[aIndex] === stringB[bIndex]) { - aIndex++, bIndex++; - continue; - } - if(stringA[aIndex] < stringB[bIndex]) return 1; - else return -1; - } - } - return stringB[0] - stringA[0] - }).join(""); -} - -// 정답 4 - prove-ability -function solution(numbers) { - return numbers.every(v => v === 0) ? "0" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(""); -} diff --git "a/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" "b/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" deleted file mode 100644 index e63b228..0000000 --- "a/build/oldSols/level-2/\352\260\200\354\236\245-\355\201\260-\354\240\225\354\202\254\352\260\201\355\230\225-\354\260\276\352\270\260&12905&.js" +++ /dev/null @@ -1,12 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(board) { - for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능 - for (let col = 0; col < board[0].length; col++) { - if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined))) - board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1; - } - } - return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대 -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" "b/build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" deleted file mode 100644 index 3569835..0000000 --- "a/build/oldSols/level-2/\352\261\260\353\246\254\353\221\220\352\270\260-\355\231\225\354\235\270\355\225\230\352\270\260&81302&.js" +++ /dev/null @@ -1,21 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(places) { - var answer = []; - answer = places.map(place => { - return place.some((row, rowIndex) => - row.split('').some((mark, colIndex, rowArr) => { - if (mark === 'X') return false - const countPeopleAround = [ - rowArr[colIndex - 1] || '', - rowArr[colIndex + 1] || '', - (place[rowIndex - 1] || '')[colIndex], - (place[rowIndex + 1] || '')[colIndex], - ].filter(mark => mark === 'P').length - return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1) - }) - ) ? 0 : 1 - }) - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" "b/build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" deleted file mode 100644 index 38689bc..0000000 --- "a/build/oldSols/level-2/\352\262\214\354\236\204-\353\247\265-\354\265\234\353\213\250\352\261\260\353\246\254&1844&.js" +++ /dev/null @@ -1,40 +0,0 @@ -// https://github.com/codeisneverodd/programmers-coding-test -//정답 1 - prove-ability -function solution(maps) { - // BFS 활용 - const row = maps.length - 1, col = maps[0].length - 1; - - // 큐 - 시작 위치 y, x, 이동 거리 - const queue = [[0, 0, 1]]; - - while(queue.length) { - // 큐 추출 - let [y, x, count] = queue.shift(); - // 상대 팀 진영이라면 - if(y === row && x === col) return count; - // 동서남북 확인 - for(let i = 0; i < 4; i++) { - const [dy, dx] = DIRECTION[i]; - // 다음 길 위치 - const nextY = dy + y, nextX = dx + x; - // 맵 밖으로 나간다면 - if(isOut(nextY, nextX, row, col)) continue; - // 도착한 곳이 벽이라면 - if(maps[nextY][nextX] === 0) continue; - // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지 - maps[nextY][nextX] = 0; - // 다음에 확인해야하는 곳 큐에 추가 - // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 - queue.push([nextY, nextX, count + 1]); - // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음.. - } - } - - return -1; -} - -// 상 우 하 좌 -const DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]]; - -// 사용이 가능한 길인지 확인하는 함수 -const isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col; \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" "b/build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" deleted file mode 100644 index 7d8de37..0000000 --- "a/build/oldSols/level-2/\352\264\204\355\230\270-\353\263\200\355\231\230&60058&.js" +++ /dev/null @@ -1,64 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(p) { - if (p.length === 0) return p - let bracketCount = 0 - let isURight = true - for (let i = 0; i < p.length; i++) { - bracketCount = p[i] === '(' ? bracketCount + 1 : bracketCount - 1 - if (bracketCount < 0) isURight = false - if (bracketCount === 0) { - const [u, v] = [p.slice(0, i + 1), p.slice(i + 1)] - if (isURight) { - return u + solution(v) - } else { - let emptyString = '(' + solution(v) + ')' - const slicedReversedString = u - .slice(1, u.length - 1) - .split('') - .map(bracket => bracket === '(' ? ')' : '(') - .join('') - return emptyString + slicedReversedString - } - } - } -} - -//정답 2 - codeisneverodd -function solution(p) { - if (p.length === 0) { - return p - } else { - const sliceIndex = balancedIndex(p) - const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)] - if (isRight(u)) { - return u + solution(v) - } else { - let emptyString = '(' + solution(v) + ')' - const slicedReversedString = u - .slice(1, u.length - 1) - .split('') - .map(bracket => bracket === '(' ? ')' : '(') - .join('') - return emptyString + slicedReversedString - } - } -} - -const isRight = (str) => { - if (str[0] === ')') return false - let stack = 0 - for (let i = 0; i < str.length; i++) { - stack = str[i] === '(' ? stack + 1 : stack - 1 - if (stack < 0) return false - } - return stack === 0 -} -const balancedIndex = (str) => { - let count = 0 - for (let i = 0; i < str.length; i++) { - count = str[i] === '(' ? count + 1 : count - 1 - if (count === 0) return i - } -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" "b/build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" deleted file mode 100644 index fc826c4..0000000 --- "a/build/oldSols/level-2/\352\264\204\355\230\270-\355\232\214\354\240\204\355\225\230\352\270\260&76502&.js" +++ /dev/null @@ -1,38 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - let answer = 0; - let sArr = s.split('') - if (isRight(sArr.join(''))) answer += 1 - for (let i = 0; i < sArr.length - 1; i++) { - sArr.push(sArr.shift()) - if (isRight(sArr.join(''))) answer += 1 - } - return answer; -} - -function isRight(str) { - const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')'] - let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}] - for (let sIndex = 0; sIndex < str.length; sIndex++) { - for (let bIndex = 0; bIndex < 3; bIndex++) { - if (str[sIndex] === bracketOpen[bIndex]) { - status[bIndex].open = true - status[bIndex].openOrder.push(sIndex) - } - if (str[sIndex] === bracketClose[bIndex]) { - if (status[bIndex].openOrder.length > 0) { - if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0) - return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘 - status[bIndex].openOrder.pop() - status[bIndex].open = false - } else { - return false //열리기 전에 닫힘 - } - } - } - } - for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음 - return true -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" "b/build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" deleted file mode 100644 index f01e731..0000000 --- "a/build/oldSols/level-2/\352\265\220\354\240\220\354\227\220-\353\263\204-\353\247\214\353\223\244\352\270\260&87377&.js" +++ /dev/null @@ -1,43 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(line) { - const getCrossPoint = ([A, B, E], [C, D, F]) => { - if (A * D - B * C === 0) return [Infinity, Infinity]; - return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)]; - }; //문제 설명 최하단 참조 - - const crossPoints = line.flatMap((lineA, i) => - line - .slice(i + 1) - .map(lineB => getCrossPoint(lineA, lineB)) - .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y)) - ); - - const generateCanvas = crossPoints => { - const xPoints = [...crossPoints.map(([x, y]) => x)]; - const yPoints = [...crossPoints.map(([x, y]) => y)]; - const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)]; - const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)]; - const xLength = Math.abs(maxX - minX) + 1; - const yLength = Math.abs(maxY - minY) + 1; - - return { - canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')), - draw([x, y], value) { - this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value; - }, - print() { - return this.canvas.map(row => row.join('')); - }, - }; - }; - - const canvas = generateCanvas(crossPoints); - - crossPoints.forEach(point => { - canvas.draw(point, '*'); - }); - - return canvas.print(); -} diff --git "a/build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" "b/build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" deleted file mode 100644 index 3bfd2a7..0000000 --- "a/build/oldSols/level-2/\352\265\254\353\252\205\353\263\264\355\212\270&42885&.js" +++ /dev/null @@ -1,66 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 -function solution(people, limit) { - let cnt = 0; - - people.sort((a, b) => {return a - b}) // 몸무게 오름차순 - - while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 - if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기 - people.pop() - people.shift() - } else { - people.pop() // 무거운사람을 뺴주자 - } - cnt++; - } - return cnt; -} // 4주차 2번 문제와 유사함 - -// 정답 2- prove-ability -function solution(people, limit) { - let count = 0; - // 오름차순 정렬 - people.sort((a, b) => a - b); - - // people 배열 요소가 있다면? - while(people.length) { - - // 요소 중 가장 큰 수인 마지막 요소를 가져온다 - let sum = people.pop(); - - // 요소 중 가장 작은 수를 더한다 - sum += people[0] - - // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거 - if(sum <= limit) people.shift(); - - count++; - } - - return count; -} - -// 정답 3 - iHoHyeon -function solution(people, limit) { - people.sort((a, b) => a - b); // 오름차순 정렬 - - let cnt = 0; // 구명보트 개수 - - let front = 0; // 가장 몸무게가 작은 사람의 index - let last = people.length; // 가장 몸무게가 큰 사람의 index - - while (last > front) { - cnt++; - - const now = people.pop(); - last--; - - if (now + people[front] <= limit) { - front++; // shift() 연산의 비효율로 인해 front 사용 - } - } - - return cnt; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" "b/build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" deleted file mode 100644 index 1cc3df1..0000000 --- "a/build/oldSols/level-2/\352\270\260\353\212\245\352\260\234\353\260\234&42586&.js" +++ /dev/null @@ -1,153 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd - 시간복잡도 감소 -function solution(progresses, speeds) { - var answer = []; - const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index])) - console.log(remainDays) - let maxDay = remainDays[0] - answer.push(0) - for (let i = 0; i < remainDays.length; i++) { - if (remainDays[i] <= maxDay) { - answer[answer.length - 1] += 1 - } else { - answer.push(1) - maxDay = remainDays[i] - } - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(progresses, speeds) { - var answer = []; - while (progresses.length > 0) { - let done = 0 - progresses = progresses.map((prog, index) => prog + speeds[index]) - const length = progresses.length - for (let i = 0; i < length; i++) { - if (progresses[0] >= 100) { - progresses.shift() - speeds.shift() - done += 1 - } else { - break - } - } - if (done > 0) answer.push(done) - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(progresses, speeds) { - let answer = []; - - while(speeds.length > 0) { - for(let i=0;i= 100) { - progresses.shift(); - speeds.shift(); - count++; - } - if(count > 0) { // 결과 배열에 넣어주기 - answer.push(count); - } - } - return answer; -} - -// 정답 4 - createhb21 -function solution(progresses, speeds) { - // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열 - var answer = []; - // 각각의 기능이 몇 일 소요되는지 담은 큐 - let queue = []; - - for (let i = 0; i < speeds.length; i++) { - // 각각의 기능이 몇 일 걸리는지 계산 - let task = Math.ceil((100 - progresses[i]) / speeds[i]); - // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다. - queue.push(task); - - // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push() - // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화 - if(task > queue[0]) { - answer.push(queue.length-1); - // 큐 초기화 - queue = [task]; - } - } - - answer.push(queue.length); - return answer; - } - -// 정답 5 - chaerin-dev -function solution(progresses, speeds) { - // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장 - const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i])); - - // 최초 배포날은 daysLeftArr의 첫 번째 요소 - let deployDay = daysLeftArr[0]; - // 각 배포에 몇 개의 기능이 배포될지 셀 변수 - let cnt = 0; - // 각 배포에 몇 개의 기능이 배포될지 저장할 배열 - const answer = []; - - // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포 - daysLeftArr.forEach((daysLeft) => { - if (deployDay < daysLeft) { - deployDay = daysLeft; - answer.push(cnt); - cnt = 0; - } - cnt++; - }); - answer.push(cnt); - - // 정답 반환 - return answer; -} - -// 정답 6 - RyanDeclan -// 예제1) 입력값 : [93, 30, 55], [1, 30, 5] -function solution(progresses, speeds) { - // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열 - let countBox = []; - let completeBox = []; - for(k=1; k<100; k++){ - let complete = [] - for(i=0; i= 100){ - complete.push([i,k]); - progresses.splice(i,1,"end") - } - } - if(complete[0] != null)completeBox.push(...complete) - } - completeBox.sort((a,b) => a[0] - b[0]) - - //여기까지 한다면 console.log(completeBox) [ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. - // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 - - // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 - let count = 0; - completeBox.reduce((acc, cur, i) => { - if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 - if(i) countBox.push(count) - acc[0] = cur[1]; - count = 0; - count++ - }else{count++} - if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. - return acc - } ,[0]) - return countBox; -} diff --git "a/build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" "b/build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" deleted file mode 100644 index e8b5cd6..0000000 --- "a/build/oldSols/level-2/\353\213\244\353\246\254\353\245\274-\354\247\200\353\202\230\353\212\224-\355\212\270\353\237\255&42583&.js" +++ /dev/null @@ -1,55 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(bridge_length, weight, truck_weights) { - let [tick, onBridge, weightOnBridge] = [0, [{weight: 0, timeToOut: 0}], 0] - while (onBridge.length > 0 || truck_weights.length > 0) { - if (onBridge[0].timeToOut === tick) weightOnBridge -= onBridge.shift().weight - if (weightOnBridge + truck_weights[0] <= weight) { - weightOnBridge += truck_weights[0] - onBridge.push({weight: truck_weights.shift(), timeToOut: tick + bridge_length}) - } else { - if (onBridge[0]) tick = onBridge[0].timeToOut - 1 // 시간을 줄이는 포인트 - } - tick++ - } - return tick -} - -//정답 2 - codeisneverodd -function solution(bridge_length, weight, truck_weights) { - const bridge = new Array(bridge_length).fill(0) - let tick = 0 - do { - tick++ - bridge.pop() - bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ? - bridge.unshift(truck_weights.shift()) : bridge.unshift(0) - } while (bridge.reduce((a, b) => a + b) !== 0) - return tick; -} - -//정답 3 - jaewon1676 -function solution(bridge_length, weight, truck_weights) { - var answer = 0; // 총 걸리는 시간 - let bridge = []; // 다리를 건너는 트럭 - let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게 - - while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다. - answer++; // 1초 추가 - if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다. - bridge_weight -= bridge.shift(); - } - if (bridge_weight + truck_weights[0] > weight) { - bridge.push(0); - continue; - } - let truck_weight = truck_weights.shift(); - bridge.push(truck_weight); - bridge_weight += truck_weight; - } - - answer += bridge_length; - - return answer; - } \ No newline at end of file diff --git "a/build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" "b/build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" deleted file mode 100644 index 860c9e4..0000000 --- "a/build/oldSols/level-2/\353\213\244\354\235\214-\355\201\260-\354\210\253\354\236\220&12911&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - let answer = n; - const nCountOne = n.toString(2).match(/1/g).length - while (true) { - answer++ - if (nCountOne === (answer).toString(2).match(/1/g).length) break - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(n) { - var answer = 0; - let find = false - const nCountOne = countOne(n.toString(2)) - let counter = 1 - while (!find) { - if (nCountOne === countOne((n + counter).toString(2))) { - answer = n + counter - find = true - } - counter++ - } - return answer; -} - -const countOne = (str) => { - return str.split('').reduce((sum, currentChar) => - currentChar === '1' ? sum += 1 : sum, 0) -} - -//정답 3 - prove-ability -function solution(n) { - let i = n; - n = n.toString(2).match(/1/g).length; - while(true) { - i++; - const value = i.toString(2).match(/1/g).length; - if(n === value) return i; - } -} - -//정답 4 = ryan-dia -function solution(n) { - const count = (num) => num.toString(2).match(/1/g).length; - for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i -} diff --git "a/build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" "b/build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" deleted file mode 100644 index 82a2ffe..0000000 --- "a/build/oldSols/level-2/\353\221\220-\355\201\220-\355\225\251-\352\260\231\352\262\214-\353\247\214\353\223\244\352\270\260&118667&.js" +++ /dev/null @@ -1,31 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(queue1, queue2) { - const getSum = arr => arr.reduce((a, c) => a + c, 0); - - if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1; - - const queue = [...queue1, ...queue2, ...queue1, ...queue2]; - const maxCount = queue.length; - const average = getSum(queue) / 4; - let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length]; - - const pop = () => { - currentSum -= queue[start]; - start += 1; - count += 1; - }; - const insert = () => { - currentSum += queue[end]; - end += 1; - count += 1; - }; - - while (count <= maxCount) { - if (currentSum < average) insert(); - if (currentSum > average) pop(); - if (currentSum === average) return count; - } - return -1; -} diff --git "a/build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" "b/build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" deleted file mode 100644 index 8bf1c07..0000000 --- "a/build/oldSols/level-2/\353\225\205\353\224\260\353\250\271\352\270\260&12913&.js" +++ /dev/null @@ -1,29 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 -function solution(land) { - var answer = 0; - - for (i = 1; i < land.length; i++){ - land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3])); - land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3])); - land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3])); - land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2])) - } - answer = land[land.length - 1] - return Math.max(...answer) -} -/* 풀이 과정 -1. land의 행만큼 반복문을 돌린다. -2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다. -3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/ - -//정답 2 - codeisneverodd -function solution(land) { - for (let rowIndex = 1; rowIndex < land.length; rowIndex++) { - for (let colIndex = 0; colIndex < land[0].length; colIndex++) { - land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1)) - } - } - return Math.max(...land[land.length - 1]) -} diff --git "a/build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" "b/build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" deleted file mode 100644 index c9ba82a..0000000 --- "a/build/oldSols/level-2/\353\251\200\353\246\254-\353\233\260\352\270\260&12914&.js" +++ /dev/null @@ -1,12 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(n) { - if (n < 2) return 1; - const count = [0, 1, 2, ...Array(n - 2).fill(0)]; - count.forEach((_, i) => { - if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567; - }); - return count[n]; -} -//재귀를 사용하면 콜스택 오버플로우가 발생합니다. diff --git "a/build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" "b/build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" deleted file mode 100644 index 539fb20..0000000 --- "a/build/oldSols/level-2/\353\251\200\354\251\241\355\225\234-\354\202\254\352\260\201\355\230\225&62048&.js" +++ /dev/null @@ -1,65 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(w, h) { - var answer = 1; - const gcd = greatestCommonDivisor(w, h) - answer = w * h - (h + w - gcd) - return answer; -} - -let greatestCommonDivisor = (a, b) => { - while (b > 0) { - let r = a % b; - a = b; - b = r; - } - return a; -} - -//정답 2 - codeisneverodd -function solution(w, h) { - var answer = 1; - const gcd = greatestCommonDivisor2(w, h) - const erasedBoxInUnit = h / gcd + w / gcd - 1 - answer = w * h - erasedBoxInUnit * gcd - return answer; -} - -let greatestCommonDivisor2 = (a, b) => { - while (b > 0) { - let r = a % b; - a = b; - b = r; - } - return a; -} - -//정답 3 - jaewon1676 -// 유클리드 호제법을 이용한 최대 공약수 구하기 -function gcd(w, h) { - let mod = w % h; // w와 h의 나머지를 구합니다. - - if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다. - return h; - } - // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다. - return gcd(h, mod); -} -function solution(w, h) { - const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다. - return w * h - (w + h - gcdVal); -} - -//정답 4 - yongchanson -function solution(w,h){ - const slope = h / w; - let cnt = 0; - //대각선 아래에 위치한 도형의 개수를 구합니다. - //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다. - for(let i = 1; i <= w; i++){ - cnt += Math.ceil(slope * i); - } - //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다. - return ((w*h - cnt) * 2); -} diff --git "a/build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" "b/build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" deleted file mode 100644 index 9c0aa7d..0000000 --- "a/build/oldSols/level-2/\353\251\224\353\211\264-\353\246\254\353\211\264\354\226\274&72411&.js" +++ /dev/null @@ -1,35 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(orders, course) { - var answer = []; - for (const selectNum of course) { - let combinations = [] - for (const order of orders) { - getCombinations(Array.from(order), selectNum) - .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다. - .forEach(combString => combinations.push(combString)) - } - const combCounts = combinations.reduce((counts, combination) => { - counts[combination] = (counts[combination] || 0) + 1; - return counts; - }, {}); - let maxCount = 0, maxComb = [] - for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb] - for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb) - answer.push(...maxComb) - } - answer = answer.sort() - return answer; -} - -const getCombinations = (array, selectNum) => { - const result = []; - if (selectNum === 1) return array.map((element) => [element]); - array.forEach((fixed, index, origin) => { - const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1); - const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]); - result.push(...attached); - }); - return result; -} diff --git "a/build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" "b/build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" deleted file mode 100644 index e1df7ce..0000000 --- "a/build/oldSols/level-2/\353\252\250\354\235\214\354\202\254\354\240\204&84512&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(word) { - const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 }; - const price = calculatePrice([1], 5); - return word - .split("") - .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet]) - .reduce((acc, curr) => acc + curr, 0); -} -const calculatePrice = (result = [1], targetLength) => { - if (result.length === targetLength) return result; - return calculatePrice([result[0] * 5 + 1, ...result], targetLength); -}; -/* -각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까? -4번째 자리 - 1 -3번째 자리 - 1*5 + 1 = 6 -2번째 자리 - 6*5 + 1 = 31 -1번째 자리 - 31*5 + 1 = 156 -0번째 자리 - 156*5 + 1 = 781 - -검증(1부터 시작하므로 1 + 비용) -I => (1 + 781 * 2) = 1563 -EIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189 -AAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10 -AAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6 -추천 레퍼런스: https://seongho96.tistory.com/50 -*/ diff --git "a/build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" "b/build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" deleted file mode 100644 index 05381fc..0000000 --- "a/build/oldSols/level-2/\353\254\270\354\236\220\354\227\264-\354\225\225\354\266\225&60057&.js" +++ /dev/null @@ -1,71 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = 0; - let lengthArr = [] - for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length) - answer = Math.min(...lengthArr) - return answer; -} - -function compressedString(str, unitNum) { - let count = 1 - let result = [''] - for (let repeat = 0; repeat <= str.length / unitNum; repeat++) { - const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum) - if (result[result.length - 1] === slicedGroup) { - count++ - } else { - if (count > 1) result[result.length - 1] = count + result[result.length - 1] - result.push(slicedGroup) - count = 1 - } - } - return result.join('') -} - -//정답 2 - chaerin-dev -function solution(s) { - // len: 압축 전 문자열 길이 - const len = s.length; - // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화) - let shortenLen = len; - - // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행 - for (let i = 1; i <= len / 2; i++) { - // cnt: 단위가 반복되는 횟수를 카운트할 변수 - let cnt = 1; - // temp: 현재 단위 문자열을 임시로 저장해둘 변수 - let temp = s.slice(0, i); - // shhortenS: 압축 후 문자열을 저장할 변수 - let shortenS = ""; - - // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단 - for (let j = i; j < len; j += i) { - // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가 - if (temp === s.slice(j, j + i)) cnt++; - // 현재 단위 문자열과 일치하지 않으면 - else { - // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고 - if (cnt === 1) shortenS += temp; - else shortenS += cnt + temp; - - // 단위가 반복되는 횟수는 다시 1로 초기화 - cnt = 1; - // 현재 단위 문자열 업데이트 - temp = s.slice(j, j + i); - } - } - - // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함 - if (cnt === 1) shortenS += temp; - else shortenS += cnt + temp; - - // 압축 후 문자열 길이의 최솟값 업데이트 - shortenLen = Math.min(shortenLen, shortenS.length); - } - - // 압축 후 문자열 길이의 최솟값 반환 - return shortenLen; -} diff --git "a/build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" "b/build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" deleted file mode 100644 index 116fd33..0000000 --- "a/build/oldSols/level-2/\353\260\251\353\254\270-\352\270\270\354\235\264&49994&.js" +++ /dev/null @@ -1,37 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(dirs) { - const move = ([x, y], dir) => { - let next = [x, y]; - if (dir === 'U') next = [x, y + 1]; - if (dir === 'D') next = [x, y - 1]; - if (dir === 'R') next = [x + 1, y]; - if (dir === 'L') next = [x - 1, y]; - if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y]; - return next; - }; - - const isSameRoute = ([s1, e1], [s2, e2]) => { - const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2; - return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1)); - }; - - const trace = { - visited: [], - visit(start, end) { - if (start[0] === end[0] && start[1] === end[1]) return; - if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]); - }, - }; - - let current = [0, 0]; - - dirs.split('').forEach(dir => { - const next = move(current, dir); - trace.visit(current, next); - current = next; - }); - - return trace.visited.length; -} diff --git "a/build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" "b/build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" deleted file mode 100644 index fb70325..0000000 --- "a/build/oldSols/level-2/\353\260\260\353\213\254&12978&.js" +++ /dev/null @@ -1,190 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. - -//정답 1 - pereng11 -// 다익스트라 + 최소힙 O( N * logN ) - // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 -class MinHeap{ - constructor () - { - this.heap = [ null ]; - } - // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬 - push ( val ) - { - this.heap.push(val); - let childIdx = this.heap.length-1; - let parentIdx = Math.floor(childIdx / 2); - while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){ - this.swap( childIdx, parentIdx ); - childIdx = parentIdx; - parentIdx = Math.floor(childIdx / 2); - } - } - pop () - { - if ( this.heap.length === 1 ) - { - return undefined; - } - // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬 - const minNode = this.heap[ 1 ]; - this.heap[ 1 ] = this.heap[ this.heap.length - 1 ]; - this.heap.pop(); - let parentIdx = 1; - let leftChildIdx = 2; - let rightChildIdx = 3; - while ( parentIdx < this.heap.length ) - { - // 자식이 없는 경우 - if ( !this.heap[ leftChildIdx ] ) - { - break; - } // 왼쪽 자식만 있는 경우 - else if ( !this.heap[ rightChildIdx ] ) - { - if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] ) - { - this.swap( parentIdx, leftChildIdx ); - } - break; - // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬 - } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] ) - { - const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx; - this.swap( parentIdx, minChildIdx ); - parentIdx = minChildIdx; - leftChildIdx = parentIdx * 2 - rightChildIdx = parentIdx * 2 + 1; - } else - { - // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지 - break; - } - } - return minNode; - } - swap ( idx1, idx2 ) - { - [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ]; - } - length () - { - return this.heap.length; - } -} - -function solution ( N, road, K ) -{ - const roadsTable = {}; //전체 도로 정보 - - // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 - for ( let i = 1; i <= N; i++ ) - { - roadsTable[ i ] = []; - } - road.forEach( road => - { - let [ sp, ep, dist ] = road; - roadsTable[ sp ].push( [ ep, dist ] ); - roadsTable[ ep ].push( [ sp, dist ] ); - } ); - - function djikstra ( sp ) - { - const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열 - const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 - const heap = new MinHeap(); - - //시작점 삽입 - heap.push( [sp, 0] ); - - // 가장 가까운 목적지부터 순서대로 방문 - while ( heap.length() > 1 ) - { - //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리] - const [ ep, val ] = heap.pop(); - //아직 방문하지 않은 곳만 처리 - if ( !visited[ ep ] ) - { - //방문처리, 거리 저장 - visited[ ep ] = true; - dist[ ep ] = val; - //방문 지점을 거쳐서 가는 다른 목적지 구하기 - const nexts = roadsTable[ ep ]; - if ( nexts ) - { - nexts.forEach( n => - { - let [ nextEp, nextVal ] = n; - if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 - { - heap.push( [ nextEp, val + nextVal ] ); - } - }) - } - } - } - // 거리가 K이하인 지점의 개수 반환 - const result = dist.filter( d => d <= K ).length; - return result; - } - - const answer = djikstra( 1 ); - return answer; -} - -//정답 2 - pereng11 O(N * N); -//다익스트라 + 선형탐색 -function solution ( N, road, K ) -{ - const roadsTable = {}; //전체 도로 정보 - - // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 - for ( let i = 1; i <= N; i++ ) - { - roadsTable[ i ] = []; - } - road.forEach( road => - { - let [ sp, ep, dist ] = road; - roadsTable[ sp ].push( [ ep, dist ] ); - roadsTable[ ep ].push( [ sp, dist ] ); - } ); - - function djikstra ( sp ) - { - const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 - const queue = []; - - queue.push( [sp, 0] ); - - while ( queue.length > 0 ) - { - const [ ep, val ] = queue.shift(); - if ( dist[ ep ] > val ) - { - dist[ ep ] = val; - const nexts = roadsTable[ ep ]; - if ( nexts ) - { - nexts.forEach( n => - { - let [ nextEp, nextVal ] = n; - //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 - if ( dist[ nextEp ] > val + nextVal ) - { - queue.push( [ nextEp, val + nextVal ] ); - } - } ); - } - } - } - // 거리가 K이하인 지점의 개수 반환 - const result = dist.filter( d => d <= K ).length; - return result; - } - - const answer = djikstra( 1 ); - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" "b/build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" deleted file mode 100644 index 8281b8c..0000000 --- "a/build/oldSols/level-2/\353\271\233\354\235\230-\352\262\275\353\241\234-\354\202\254\354\235\264\355\201\264&86052&.js" +++ /dev/null @@ -1,76 +0,0 @@ -// https://github.com/codeisneverodd/programmers-coding-test -// 완벽한 정답이 아닙니다. -// 정답 1 - minjongbaek - -// 빛의 이동을 위한 DX, DY 변수를 선언합니다. -const DX = [-1, 1, 0, 0]; -const DY = [0, 0, -1, 1]; - -function solution(grid) { - - // DFS에 4방향을 고려하여 문제를 풉니다. - // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다. - - const answer = []; - - // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]] - const visited = Array.from({ length: grid.length }, () => []).map((v) => { - for (let i = 0; i < grid[0].length; i += 1) { - v.push(new Array(4).fill(false)); - } - return v - }); - - for (let x = 0; x < grid.length; x += 1) { - for (let y = 0; y < grid[0].length; y += 1) { - for (let d = 0; d < 4; d += 1) { - // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다. - if (!visited[x][y][d]) { - const stack = []; - stack.push([x, y, d]); - - let cnt = 0; - while (stack.length !== 0) { - const [currentX, currentY, currentD] = stack.pop(); - if (!visited[currentX][currentY][currentD]) { - visited[currentX][currentY][currentD] = true; - cnt += 1; - - const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다. - const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다. - - stack.push([nextX, nextY, nextD]) - } - - } - answer.push(cnt); - } - } - } - } - return answer.sort((a, b) => a - b); -} - -// 다음 행선지를 구하는 함수 -function getNextXY(x, y, d, xLength, yLength) { - x += DX[d]; - y += DY[d]; - - // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다. - if (x < 0) x = xLength - 1; - if (x >= xLength) x = 0; - if (y < 0) y = yLength - 1; - if (y >= yLength) y = 0; - - return [x, y]; -} - -// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수 -function getNextD(command, d) { - if (command === 'L') { - d = [2, 3, 1, 0][d] - } else if (command === 'R') { - d = [3, 2, 0, 1][d] - } - return d -} diff --git "a/build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" "b/build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" deleted file mode 100644 index c381952..0000000 --- "a/build/oldSols/level-2/\354\202\274\352\260\201-\353\213\254\355\214\275\354\235\264&68645&.js" +++ /dev/null @@ -1,40 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - const snail = Array.from(Array(n), (_, index) => Array(index + 1)); - let currentNum = 0; - let [currentRow, currentCol] = [-1, 0]; - let shouldMove = n; - while (shouldMove > 0) { - for (let i = 0; i < shouldMove; i++) - snail[++currentRow][currentCol] = ++currentNum; - for (let i = 0; i < shouldMove - 1; i++) - snail[currentRow][++currentCol] = ++currentNum; - for (let i = 0; i < shouldMove - 2; i++) - snail[--currentRow][--currentCol] = ++currentNum; - shouldMove -= 3; - } - return snail.flatMap((num) => num); -} - -//정답 2 - jaewon1676 -function solution(n) { - const answer = new Array(n).fill().map((e, i) => new Array(i + 1)); - // 이차원배열을 만들어준다 - - let count = 0; - let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다. - let y = 0; // 열 - while (n > 0) { - for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다. - for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다. - for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다. - - n -= 3; - } - return answer.flatMap(e => e); - // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. - // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] - // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7] -} diff --git "a/build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" "b/build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" deleted file mode 100644 index 5849a47..0000000 --- "a/build/oldSols/level-2/\354\210\230\354\213\235-\354\265\234\353\214\200\355\231\224&67257&.js" +++ /dev/null @@ -1,33 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(expression) { - var answer = 0; - const mathExp = ['*', '+', '-'] - let priorityArr = Permutation(mathExp, 3) - const calculated = [] - for (const priority of priorityArr) { - const expressionArr = expression.split(/(\D)/) - for (const exp of priority) { - while (expressionArr.includes(exp)) { - const index = expressionArr.indexOf(exp) - expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join(''))) - } - } - calculated.push(Math.abs(expressionArr[0])) - } - answer = Math.max(...calculated) - return answer -} - -function Permutation(arr, r) { - const result = [] - if (r === 1) return arr.map((num) => [num]) - arr.forEach((fixed, index, org) => { - const rest = [...org.slice(0, index), ...org.slice(index + 1)] - const permutation = Permutation(rest, r - 1) - const attached = permutation.map((numbers) => [fixed, ...numbers]) - result.push(...attached) - }) - return result -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" "b/build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" deleted file mode 100644 index 97d5caa..0000000 --- "a/build/oldSols/level-2/\354\210\234\354\234\204-\352\262\200\354\203\211&72412&.js" +++ /dev/null @@ -1,51 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(infos, queries) { - const infoData = {}; - - const fetchInfoData = (keyArr, score, start) => { - const key = keyArr.join(''); - - infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]); - - for (let i = start; i < keyArr.length; i++) { - fetchInfoData( - keyArr.map((v, index) => (index === i ? '-' : v)), - score, - i + 1 - ); - } - }; - - const getPassCount = (key, passScore) => { - const scores = infoData[key]; - - if (!scores) return 0; - - let [left, right] = [0, scores.length]; - - while (left < right) { - const mid = Math.floor((left + right) / 2); - scores[mid] >= passScore ? (right = mid) : (left = mid + 1); - } - - return scores.length - left; - }; - - infos - .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]]) - .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0)); - - Object.keys(infoData).forEach(key => { - infoData[key].sort((a, b) => a - b); - }); - - return queries - .map(query => query.replace(/ and /g, '').split(' ')) - .map(([key, passScore]) => getPassCount(key, +passScore)); -} -// 주의 할 점 -// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림 -// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림. -// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음. diff --git "a/build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" "b/build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" deleted file mode 100644 index 7bb5d51..0000000 --- "a/build/oldSols/level-2/\354\210\253\354\236\220-\353\270\224\353\241\235&12923&.js" +++ /dev/null @@ -1,32 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - iHoHyeon -function solution(begin, end) { - return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx)); - // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다. -} - -const calc = (number) => { - if (number === 1) return 0; - // 1번째 위치는 무조건 0블록이 위치 - - for (let i = 2; i <= Math.sqrt(number); i++) { - if (number % i === 0 && number / i <= 10_000_000) return number / i; - // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외 - } - - return 1; -}; - -/* - 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는 - 시간 / 공간 복잡도가 급상승 - - -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자 - - -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다. - - -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다. - - + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다. -*/ diff --git "a/build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" "b/build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" deleted file mode 100644 index 93b5e62..0000000 --- "a/build/oldSols/level-2/\354\210\253\354\236\220\354\235\230-\355\221\234\355\230\204&12924&.js" +++ /dev/null @@ -1,52 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { //수학적 풀이는 별도로 하지 않았습니다. - var answer = 0; - for (let i = 1; i <= n; i++) { - let sum = 0 - for (let j = i; j <= n; j++) { - sum += j - if (sum >= n) { - if (sum === n) answer++ - break - } - } - } - return answer; -} - -//정답 2 - prove-ability -function solution(n) { - let answer = 0; - for(let i = 1; i <= n; i++) { - let sum = 0; - for(let j = i; j <= n; j++) { - sum += j; - if(sum > n) break; - if(n === sum) { - answer++; - break; - } - } - } - return answer; -} - -//정답 3 - yongchanson -function solution(n) { - /* - 정답 = n의 홀수 약수의 개수 - 15의 홀수 약수 : 1,3,5,15 - 1+2+3+4+5=15 (중간값 3) - 4+5+6=15 (중간값 5) - 7+8=15 (연속된 값) - 15=15 (15) - */ - let result = 0; - - for (let i = 1; i <= n; i++) { - if (n % i == 0 && i % 2 == 1) result++; - } - return result; -} diff --git "a/build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" "b/build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" deleted file mode 100644 index 7143bb8..0000000 --- "a/build/oldSols/level-2/\354\212\244\355\202\254\355\212\270\353\246\254&49993&.js" +++ /dev/null @@ -1,16 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(skill, skill_trees) { - var answer = 0; - for (const tree of skill_trees) { - let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x)) - if (checkOrder(check)) answer += 1 - } - return answer; -} - -function checkOrder(checkArr) { - for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false - return true -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" "b/build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" deleted file mode 100644 index 3ac8103..0000000 --- "a/build/oldSols/level-2/\354\226\221\352\266\201\353\214\200\355\232\214&92342&.js" +++ /dev/null @@ -1,72 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -// 문제 풀이 전략 -// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다. -// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다. -// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다. -// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다. -// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다. -// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다 -// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다. -// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다. -function solution(possibleArrows, apeachComb) { - const compareTable = apeachComb.map(apeachArrow => ({ - apeachArrow, - ryanArrow: 0, - })); - const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows); - const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff)); - const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff); - if (maxScoreDiff <= 0) return [-1]; - const getIndexOfLastArrow = arrowTable => - arrowTable.length - - arrowTable - .slice() - .reverse() - .findIndex(x => x !== 0); - return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable; -} -function getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) { - const { apeachArrow } = compareTable[currentIndex]; - const lastIndex = compareTable.length - 1; - const possibleRyanArrows = [ - 0, - numberOfArrowLeft > apeachArrow && apeachArrow + 1, - numberOfArrowLeft >= apeachArrow && apeachArrow, - ]; - - if (currentIndex === lastIndex || numberOfArrowLeft === 0) { - if (numberOfArrowLeft > 0) { - compareTable[compareTable.length - 1] = { - apeachArrow, - ryanArrow: numberOfArrowLeft, - }; - } - const appeachScore = compareTable.reduce( - (acc, { apeachArrow, ryanArrow }, index) => - apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc, - 0 - ); - const ryanScore = compareTable.reduce( - (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc), - 0 - ); - return [ - { - scoreDiff: ryanScore - appeachScore, - ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow), - }, - ]; - } - return [ - ...possibleRyanArrows.flatMap(ryanUsedArrow => { - const nextCompareTable = [...compareTable]; - nextCompareTable.splice(currentIndex, 1, { - apeachArrow, - ryanArrow: ryanUsedArrow, - }); - return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow); - }), - ]; -} diff --git "a/build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" "b/build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" deleted file mode 100644 index d3a5449..0000000 --- "a/build/oldSols/level-2/\354\230\201\354\226\264-\353\201\235\353\247\220\354\236\207\352\270\260&12981&.js" +++ /dev/null @@ -1,13 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, words) { - var answer = []; - let turn = 1 - for (let i = 1; i < words.length; i++) { - let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i])) - if (i % n === 0) turn++ - if (!pass) return [i % n + 1, turn] - } - return [0, 0]; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" "b/build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" deleted file mode 100644 index c2072b6..0000000 --- "a/build/oldSols/level-2/\354\230\210\354\203\201-\353\214\200\354\247\204\355\221\234&12985&.js" +++ /dev/null @@ -1,42 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd - -function solution(n, a, b) { - let currentRound = 1; - const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호 - while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다. - if (myNextNumber(a) === myNextNumber(b)) break - a = myNextNumber(a) - b = myNextNumber(b) - currentRound++ - } - return currentRound -} - -//정답 2 - le2sky -function solution(n, a, b) { - let arr = Array.from({ length: n }, () => 0) - arr[b - 1] = "B" - arr[a - 1] = "A" - - const isDiff = () => { - return ( - (arr.indexOf("A") + 1 > arr.length / 2 && arr.indexOf("B") + 1 <= arr.length / 2) || - (arr.indexOf("A") + 1 <= arr.length / 2 && arr.indexOf("B") + 1 > arr.length / 2)) ? true : false - }; - const isLeft = () => { - return (arr.indexOf("A") + 1 > arr.length / 2) ? false : true - }; - - //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴 - while (!isDiff()) { - if (isLeft()) { - arr.splice(arr.length / 2) - } else { - arr.splice(0, arr.length / 2) - } - } - return Math.log2(arr.length) -} - \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" "b/build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" deleted file mode 100644 index 259d864..0000000 --- "a/build/oldSols/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251&42888&.js" +++ /dev/null @@ -1,83 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(record) { - var answer = []; - const users = {} - record.map(history => { - const [action, id, name] = history.split(' ') - if (action !== 'Leave') users[id] = name - }) - record.map(history => { - const [action, id, name] = history.split(' ') - if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`) - if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`) - }) - return answer; -} - -//정답 2 - jaewon1676 -function solution(record) { - let answer = []; - const map = new Map(); - - for (let i = 0; i < record.length; ++i) { - const [state, uid, name] = record[i].split(' '); - - if (state == 'Leave') { - answer.push([uid, '님이 나갔습니다.']); - - continue; - } - - if (state == 'Enter') { - answer.push([uid, '님이 들어왔습니다.']); - } - map.set(uid, name); - } - return answer.map(ele => map.get(ele[0]) + ele[1]); -} - -//정답 3 - chaerin-dev -function solution(record) { - // 최종 메시지를 저장할 배열 - let result = []; - // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열 - let resultId = []; - // 유저의 아이디: 닉네임 쌍을 저장할 Map - let idNameMap = new Map(); - - // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환 - record = record.map((e) => e.split(" ")); - - // record의 각 요소에 대해 - record.forEach((e) => { - // 각 요소의 첫 번째 요소(Enter/Leave/Change)가 - switch (e[0]) { - // Enter이면 - case "Enter": - // resultID 배열에 들어온 유저의 아이디 저장 - resultId.push(e[1]); - // result 배열에 닉네임을 제외하고 표시될 메시지 저장 - result.push("님이 들어왔습니다."); - // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장 - idNameMap.set(e[1], e[2]); - break; - // Leave이면 - case "Leave": - // resultID 배열에 들어온 유저의 아이디 저장 - resultId.push(e[1]); - // result 배열에 닉네임을 제외하고 표시될 메시지 저장 - result.push("님이 나갔습니다."); - break; - // Change이면 - case "Change": - // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경 - idNameMap.set(e[1], e[2]); - break; - } - }); - - // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환 - return result.map((e, i) => idNameMap.get(resultId[i]) + e); -} diff --git "a/build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" "b/build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" deleted file mode 100644 index c982ca6..0000000 --- "a/build/oldSols/level-2/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270&12909&.js" +++ /dev/null @@ -1,12 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1(🎩 refactor 220425) - codeisneverodd -function solution(s) { - let opened = 0; - for (const bracket of s) { - if (bracket === "(") opened += 1; - if (bracket === ")") opened -= 1; - if (opened < 0) return false; - } - return opened === 0; -} diff --git "a/build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" "b/build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" deleted file mode 100644 index 1466598..0000000 --- "a/build/oldSols/level-2/\354\234\204\354\236\245&42578&.js" +++ /dev/null @@ -1,89 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(clothes) { - var answer = 1; - const spyWear = {}; - for (const clothNPart of clothes) - spyWear[clothNPart[1]] = (spyWear[clothNPart[1]] || 0) + 1; - for (const part in spyWear) answer *= spyWear[part] + 1; - return answer - 1; -} - -//정답 2 - codeisneverodd -function solution(clothes) { - var answer = 0; - const spyWear = {}; - for (const clothNPart of clothes) { - if (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = []; - spyWear[clothNPart[1]].push(clothNPart[0]); - } - const clothesCount = []; - for (const part in spyWear) clothesCount.push(spyWear[part].length + 1); - answer = - clothesCount.reduce((previous, current) => previous * current, 1) - 1; - return answer; -} -// 정답 3 - hyosung -function solution(clothes) { - let answer = 1; - // 옷 종류 - const types = {}; - // 반복문 최적화 - length, 비교연산 제거 - const length = clothes.length; - for (let i = length; i--; ) { - // 해당 옷의 종류가 없다면 종류 1 - if (!types[clothes[i][1]]) types[clothes[i][1]] = 1; - // 해당 옷의 종류가 있다면 종류 증가 - else types[clothes[i][1]] += 1; - } - // (종류 별 값 + 1 ) 을 다 곱셈 - Object.values(types).forEach((v) => { - answer *= v + 1; - }); - - return answer - 1; -} - -//정답 4 - jaewon1676 -function solution(clothes) { - var answer = 1; - var obj={}; - for(var i=0;i - clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1) - ); - - // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐 - // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나) - // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨 - let answer = 1; - for (let key of Object.keys(clothsObj)) { - answer *= clothsObj[key] + 1; - } - - // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기 - return answer - 1; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" "b/build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" deleted file mode 100644 index 1b98e04..0000000 --- "a/build/oldSols/level-2/\354\235\264\354\247\204-\353\263\200\355\231\230-\353\260\230\353\263\265\355\225\230\352\270\260&70129&.js" +++ /dev/null @@ -1,32 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(s) { - const removeZero = s => { - const removed = s - .split('') - .filter(n => n !== '0') - .join(''); - return { removed, count: s.length - removed.length }; - }; - - const convertToBinary = (s, turnCount, removedCount) => { - if (s === '1') return [turnCount, removedCount]; - const { removed, count } = removeZero(s); - return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count); - }; - - return convertToBinary(s, 0, 0); -} - -// 정답 2 - RyanDeclan -function solution(s) { - let box = [0,0] - while(s.length > 1){ - let reamain = s.replace(/0/g,"").length - box[0] += 1 - box[1] += (s.length - reamain) - s = reamain.toString(2) - } - return box; -} diff --git "a/build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" "b/build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" deleted file mode 100644 index f57dd57..0000000 --- "a/build/oldSols/level-2/\354\240\204\353\240\245\353\247\235\354\235\204-\353\221\230\353\241\234-\353\202\230\353\210\204\352\270\260&86971&.js" +++ /dev/null @@ -1,29 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(n, wires) { - const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b); - - const convertWiresToTree = wires => [...new Set(wires.flat())]; - - const generateTree = (wires, tree) => { - if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree; - - const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire)); - const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))]; - - return [...new Set(generateTree(nextWires, nextTree))]; - }; - - let minDiff = Infinity; - const length = convertWiresToTree(wires).length; - - wires.forEach((_, i) => { - const [initWire, ...remainWires] = wires.filter((_, j) => j !== i); - const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length; - const diff = Math.abs(lengthA - (length - lengthA)); - minDiff = Math.min(diff, minDiff); - }); - - return minDiff; -} diff --git "a/build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" "b/build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" deleted file mode 100644 index 9de65a0..0000000 --- "a/build/oldSols/level-2/\354\240\220\355\224\204\354\231\200-\354\210\234\352\260\204-\354\235\264\353\217\231&12980&.js" +++ /dev/null @@ -1,25 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - var ans = 0; - while (n > 0) { - if (n % 2 !== 0) { - n = (n - 1) / 2 - ans++ - } else { - n = n / 2 - } - } - return ans; -} - -//정답 2 - yongchanson -function solution(n) { - let result = 0; - while (n > 0) { - result += n % 2; - n = Math.floor(n / 2); - } - return result; -} diff --git "a/build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" "b/build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" deleted file mode 100644 index 334f36b..0000000 --- "a/build/oldSols/level-2/\354\241\260\354\235\264\354\212\244\355\213\261&42860&.js" +++ /dev/null @@ -1,25 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(name) { - var answer = 0; - const length = name.length; - let upDownCount = 0 - let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때 - for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i]) - for (let startOfA = 0; startOfA < name.length; startOfA++) { - let endOfA = startOfA + 1; - while (endOfA < length && name[endOfA] === 'A') endOfA++; - const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA] - leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1 - leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A.. - } - answer = upDownCount + Math.min(...leftRightCountList) - return answer; -} - -function minUpOrDownCount(destination) { - const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - const index = Alphabet.indexOf(destination) - return Math.min(index, Alphabet.length - index) -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" "b/build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" deleted file mode 100644 index d93a2cf..0000000 --- "a/build/oldSols/level-2/\354\243\274\354\260\250-\354\232\224\352\270\210-\352\263\204\354\202\260&92341&.js" +++ /dev/null @@ -1,65 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - ljw0096 - -function solution(fees, records) { - const answer = [] - - const parkingTable = getParkingTable(records) - const sortedKeys = Object.keys(parkingTable).sort() - - for (const targetCar of sortedKeys) { - if (parkingTable[targetCar].length % 2 === 1) { - parkingTable[targetCar].push(['23:59', 'OUT']) - } - const totalTime = getTotalTime(parkingTable, targetCar) - const fee = calculateFee(totalTime, fees) - answer.push(fee) - } - - return answer -} - -function getParkingTable(records) { - const parkingTable = {} - - records.forEach((val) => { - const info = val.split(' ') - if (Object.keys(parkingTable).includes(info[1])) { - parkingTable[info[1]].push([info[0], info[2]]) - } else { - parkingTable[info[1]] = [[info[0], info[2]]] - } - }) - - return parkingTable -} - -function getTotalTime(parkingTable, targetCar) { - let totalTime = 0 - for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) { - totalTime += calculateTotalTime( - parkingTable[targetCar][i][0], - parkingTable[targetCar][i + 1][0] - ) - } - return totalTime -} - -function calculateTotalTime(time1, time2) { - const [hour1, minute1] = time1.split(':').map((val) => parseInt(val)) - const [hour2, minute2] = time2.split(':').map((val) => parseInt(val)) - - return hour2 * 60 + minute2 - (hour1 * 60 + minute1) -} - -function calculateFee(totalTime, feeInfo) { - let fee = 0 - if (feeInfo[0] >= totalTime) { - fee = feeInfo[1] - } else { - fee = - feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3] - } - return fee -} diff --git "a/build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" "b/build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" deleted file mode 100644 index bc7b2e5..0000000 --- "a/build/oldSols/level-2/\354\244\204-\354\204\234\353\212\224-\353\260\251\353\262\225&12936&.js" +++ /dev/null @@ -1,39 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - codeisneverodd -function solution(n, k) { - const getFactorial = n => { - const result = [1, 1, 2, ...Array(n - 2)]; - result.forEach((_, i) => { - if (i > 2) result[i] = result[i - 1] * i; - }); - return result; - }; - - const getDivision = (dividend, divisor) => { - const quotient = Math.floor(dividend / divisor); - const remainder = dividend % divisor; - return [quotient, remainder]; - }; - - const stepCount = getFactorial(n).reverse(); - - const generateSteps = (k, step) => { - const [q, r] = getDivision(k, stepCount[step]); - if (r === 0) return [q]; - return [q, ...generateSteps(r, step + 1)]; - }; - - const answer = []; - - const steps = generateSteps(k - 1, 0); - - const notUsedNums = Array.from({ length: n }, (_, i) => i + 1); - - steps.slice(1).forEach(q => { - answer.push(notUsedNums[q]); - notUsedNums.splice(q, 1); - }); - - return [...answer, ...notUsedNums]; -} diff --git "a/build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" "b/build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" deleted file mode 100644 index 66569b8..0000000 --- "a/build/oldSols/level-2/\354\247\235\354\247\200\354\226\264-\354\240\234\352\261\260\355\225\230\352\270\260&12973&.js" +++ /dev/null @@ -1,47 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = -1; - let notPairStack = [] - for (let i = 0; i < s.length; i++) notPairStack[notPairStack.length - 1] === s[i] ? notPairStack.pop() : notPairStack.push(s[i]) - answer = notPairStack.length === 0 ? 1 : 0 - return answer; -} - -//정답 2 - codeisneverodd -function solution(s) { - var answer = -1; - let notPairStack = [] - notPairStack.push(s[0]) - for (let i = 1; i < s.length; i++) { - if (notPairStack[notPairStack.length - 1] === s[i]) { - notPairStack.pop() - } else { - notPairStack.push(s[i]) - } - } - answer = notPairStack.length === 0 ? 1 : 0 - return answer; -} - -//정답 3 - jaewon1676 - -function solution(s){ - let cnt = 0; // 빼준 부분을 카운트 해줍니다 - let answer; - let stack = [] - for (let i of s){ - if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다 - stack.pop(); - cnt++;; - } else { - stack.push(i) - } - } - - (s.length / 2 == cnt ? answer = 1 : answer = 0 ) - // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다 - return answer; - } - // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다 \ No newline at end of file diff --git "a/build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" "b/build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" deleted file mode 100644 index d2c0a52..0000000 --- "a/build/oldSols/level-2/\354\265\234\353\214\223\352\260\222\352\263\274-\354\265\234\354\206\237\352\260\222&12939&.js" +++ /dev/null @@ -1,40 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = ''; - const arr = s.split(' ') - answer = Math.min(...arr) + ' ' + Math.max(...arr) - return answer; -} - -//정답 2 - codeisneverodd -function solution(s) { - var answer = ''; - const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b) - answer = arr[0] + ' ' + arr[arr.length - 1] - return answer; -} - -//정답 3 - jaewon1676 -function solution(s) { - s = s.split(' ') - s.sort((a, b) => {return a - b}) // 오름차순 정렬 - let small = s[0] // s의 최솟값 - let large = s[s.length - 1] // s의 최댓값 - return (small + ' ' + large) -} - -//정답 4 - prove-ability -function solution(s) { - s = s.split(" ").map((v) => parseInt(v, 10)) - return `${Math.min(...s)} ${Math.max(...s)}`; -} - -//정답 5 - yongchanson -function solution(s) { - let arr = s.split(" ").sort((a, b) => a - b); - arr.splice(1, arr.length - 2, " "); - let result = arr.join(""); - return result; -} diff --git "a/build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" "b/build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" deleted file mode 100644 index c7bf910..0000000 --- "a/build/oldSols/level-2/\354\265\234\354\206\237\352\260\222-\353\247\214\353\223\244\352\270\260&12941&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(A, B) { - var answer = 0; - A = A.sort((a, b) => a - b) - B = B.sort((a, b) => b - a) - for (let i = 0; i < A.length; i++) answer += A[i] * B[i] - return answer; -} - -//정답 2 - prove-ability -function solution(A,B){ - let sum = 0; - A.sort((a, b) => a - b); - B.sort((a, b) => b - a); - - for(let i = 0, len = A.length; i < len; i++) { - sum += A[i] * B[i]; - } - - return sum; -} - -//정답 3 - yongchanson -function solution(A, B) { - A.sort((a, b) => a - b); - B.sort((a, b) => b - a); - return A.reduce((t, n, i) => t + n * B[i], 0); -} diff --git "a/build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" "b/build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" deleted file mode 100644 index 147962f..0000000 --- "a/build/oldSols/level-2/\354\271\264\355\216\253&42842&.js" +++ /dev/null @@ -1,41 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(brown, yellow) { - var answer = []; - const size = brown + yellow - answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0] - return answer; -} - -function widthHeightPair(size) { - let result = [] - for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i]) - return result -} - -//정답 2 - jaewon1676 -function solution(brown, yellow) { - var answer = []; - let sum = brown + yellow; - - //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색) - for(let height=3; height { - const length = matrix.length; - const half = length / 2; - const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0])); - - if (pass(matrix)) return [matrix[0][0]]; - if (length <= 2) return matrix; - - const startPoints = [ - [0, 0], - [0, half], - [half, 0], - [half, half], - ]; - - return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half)))); - }; - return quad(arr) - .flat(Infinity) - .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]); -} diff --git "a/build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" "b/build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" deleted file mode 100644 index 1bedf83..0000000 --- "a/build/oldSols/level-2/\355\201\260-\354\210\230-\353\247\214\353\223\244\352\270\260&42883&.js" +++ /dev/null @@ -1,36 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(number, k) { - var answer = ''; - let answerStack = [0] - let deleteCount = -1 - for (let i = 0; i < number.length; i++) { - while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) { - answerStack.pop() - deleteCount++ - } - if (answerStack.length < number.length - k) answerStack.push(number[i]) - } - answer = answerStack.join('') - return answer; -} - -//정답 4 - jaewon1676 -function solution(number, k) { - const stack = []; - let answer = ''; - - for(let i=0; i 0 && stack[stack.length-1] < el){ - stack.pop(); - k--; - } - stack.push(el); - } - stack.splice(stack.length-k, k); - answer = stack.join(""); - return answer; -} - \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" "b/build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" deleted file mode 100644 index 4120a91..0000000 --- "a/build/oldSols/level-2/\355\203\200\352\262\237-\353\204\230\353\262\204&43165&.js" +++ /dev/null @@ -1,46 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1(🎩 refactor 220830) - codeisneverodd -function solution(numbers, target) { - const dfs = (index, sum) => { - if (index === numbers.length) return sum === target ? 1 : 0; - return dfs(index + 1, sum + numbers[index]) + dfs(index + 1, sum - numbers[index]); - }; - return dfs(0, 0); -} - -//정답 2 - ssi02014 -function solution(numbers, target) { - let answer = 0; - - dfs(0, 0); - return answer; - - function dfs(index, sum) { - // 재귀 종료 - if (index === numbers.length) { - if (sum === target) { - answer++; - } - return; - } - - dfs(index + 1, sum + numbers[index]); - dfs(index + 1, sum - numbers[index]); - } -} - -//정답 3 - codeisneverodd -function solution(numbers, target) { - var answer = 0; - const binaryLength = numbers.length; - const binary = 2 ** binaryLength; - for (let i = 0; i < binary; i++) { - const numSlice = numbers.slice(); - const binaryString = i.toString(2).padStart(binaryLength, '0'); - for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null; - const calculated = numSlice.reduce((prev, current) => prev + current); - if (calculated === target) answer += 1; - } - return answer; -} diff --git "a/build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" "b/build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" deleted file mode 100644 index bcdce86..0000000 --- "a/build/oldSols/level-2/\355\212\234\355\224\214&64065&.js" +++ /dev/null @@ -1,33 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(s) { - var answer = []; - let sets = s - .slice(2, -2) - .split('},{') - .map(set => set.split(',').map(x => parseInt(x))) - .sort((a, b) => a.length - b.length) - for (const set of sets) answer.push(...set.filter(x => !answer.includes(x))) - return answer; -} - -//정답 2 - chaerin-dev -function solution(s) { - // 문자열 -> 정수 이차원 배열 - const sArr = s - .substring(2, s.length - 2) - .split("},{") - .map((e) => e.split(",").map((e) => parseInt(e))) - .sort((a, b) => a.length - b.length); - // 정답을 저장할 배열 - const answer = []; - // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가 - for (let i = 0; i < sArr.length; i++) { - for (let j = 0; j < sArr[i].length; j++) { - const temp = sArr[i][j]; - if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]); - } - } - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" "b/build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" deleted file mode 100644 index d29b243..0000000 --- "a/build/oldSols/level-2/\355\224\204\353\246\260\355\204\260&42587&.js" +++ /dev/null @@ -1,136 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(priorities, location) { - var answer = 0; - let documents = priorities.map((priority, index) => ({location: index, priority: priority})) - let locationPrinted = false - while (!locationPrinted) { - const shifted = documents.shift() - let printAvailable = true - if (documents.some((document) => shifted.priority < document.priority)) printAvailable = false - if (printAvailable) { - answer += 1 - if (shifted.location === location) locationPrinted = true - } else { - documents.push(shifted) - } - } - return answer; -} - -//정답 2 - codeisneverodd -function solution(priorities, location) { - var answer = 0; - let documents = priorities.map((priority, documentLocation) => [documentLocation, priority]) - let locationPrinted = false - while (!locationPrinted) { - const shifted = documents.shift() - let printAvailable = true - for (let i = 0; i < documents.length; i++) { - if (shifted[1] < documents[i][1]) { - printAvailable = false - break - } - } - if (printAvailable) { - answer += 1 - if (shifted[0] === location) locationPrinted = true - } else { - documents.push(shifted) - } - } - return answer; -} - -//정답 3 - jaewon1676 -function solution(priorities, location) { - var answer = 0; - while (true) { - - if (priorities[0] < Math.max(...priorities)) { - if (location - 1 < 0) location = priorities.length - priorities.push(priorities.shift()) - location--; - } else { - answer++; - if (location - 1 < 0) { - return answer; - } - priorities.shift() - location--; - } - console.log(priorities, location, answer) - - } - return answer -} - -// 정답 4 - createhb21 -function solution(priorities, location) { - var answer = priorities.map((priority, index) => { - return { - index, - priority - }; - }); - - let queue = []; - - while(answer.length > 0){ - const first = answer.shift(); - const isPriority = answer.some((p) => p.priority > first.priority); - isPriority ? answer.push(first) : queue.push(first); - } - const idx = queue.findIndex(p => p.index === location) + 1; - return idx; - } - -//정답 5 - codeisneverodd -//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다. -function solution(priorities, location) { - let answer = 0; - const printer = new Queue; - priorities.forEach((priority, index) => { - printer.enqueue([priority, index]) - }) - while (printer.size() > 0) { - const check = printer.dequeue() - const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length - if (countHigherPriority > 0) { - printer.enqueue(check) - } else { - answer += 1 - if (check[1] === location) break - } - - } - return answer; -} - -class Queue { - constructor() { - this.queue = [] - this.front = 0 - this.rear = 0 - } - - enqueue(value) { - this.queue[this.rear++] = value - } - - dequeue() { - const value = this.queue[this.front] - delete this.queue[this.front] - this.front += 1 - return value - } - - peek() { - return this.queue(this.front) - } - - size() { - return this.rear - this.front - } -} diff --git "a/build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" "b/build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" deleted file mode 100644 index 94a234d..0000000 --- "a/build/oldSols/level-2/\355\224\274\353\241\234\353\217\204&87946&.js" +++ /dev/null @@ -1,28 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - pereng11 -//완전 탐색, greedy O(N^2) -function solution(currentFatigue, dungeons) { - return getMaxCount(currentFatigue, 0, dungeons); -} - -function getMaxCount(currentFatigue, visitedCount, dungeons) { - const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue); - if (possibleDungeons.length === 0) return visitedCount; - - const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => { - const [_, usedFatigue] = curr; - const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex); - const currentCount = getMaxCount( - currentFatigue - usedFatigue, - visitedCount + 1, - nextDungeons - ); - return Math.max(currentCount, prevCount); - }, 0); - - return maxCount; -} - - - diff --git "a/build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" "b/build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" deleted file mode 100644 index ec16495..0000000 --- "a/build/oldSols/level-2/\355\224\274\353\263\264\353\202\230\354\271\230-\354\210\230&12945&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - var answer = 0; - answer = fibonacci1234567(n) - return answer; -} - -function fibonacci1234567(n) { //재귀적으로 하면 시간초과 - let fiboArr = new Array(n + 1).fill(0) - fiboArr[0] = 0 - fiboArr[1] = 1 - for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과 - return fiboArr[n] -} - -//정답 2 - jaewon1676 -function solution(n) { - let f_1 = 0; - let f_2 = 1; - - for (let i=2; i<=n; i++) { - let temp = (f_1 + f_2) % 1234567; - f_1 = f_2; - f_2 = temp; - } - - return f_2; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" "b/build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" deleted file mode 100644 index 5b57c2d..0000000 --- "a/build/oldSols/level-2/\355\225\230\353\205\270\354\235\264\354\235\230-\355\203\221&12946&.js" +++ /dev/null @@ -1,28 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n) { - return move(1, 3, 2, n); -} -const move = (departure, destination, waypoint, numberOfPlate) => { - if (numberOfPlate === 1) return [[departure, destination]]; - return [ - ...move(departure, waypoint, destination, numberOfPlate - 1), - ...move(departure, destination, waypoint, 1), - ...move(waypoint, destination, departure, numberOfPlate - 1), - ]; -}; -//재귀를 생각해보기에 좋은 문제입니다. -//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi -/* -n개가 있다면 -1. 1->2로 n-1개를 옮김 -2. 1->3으로 가장 큰 1개를 옮김 -3. 2->1로 n-2개를 옮김 -4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김 -의 반복 - -결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨. -a->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 -함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음. -*/ diff --git "a/build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" "b/build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" deleted file mode 100644 index 0a90412..0000000 --- "a/build/oldSols/level-2/\355\226\211\353\240\254-\355\205\214\353\221\220\353\246\254-\355\232\214\354\240\204\355\225\230\352\270\260&77485&.js" +++ /dev/null @@ -1,27 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(rows, columns, queries) { - var answer = []; - let matrix = new Array(rows) - for (let i = 0; i < rows; i++) matrix[i] = new Array(columns) - for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1 - for (const query of queries) { - let order = [] - const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1] - //fill order (row1->row2, col1->col2, row2->row2, col2->col1) - for (let i = row1; i <= row2; i++) order.push(matrix[i][col1]) - for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i]) - for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2]) - for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i]) - //rotate clockwise - order.push(order.shift()) - answer.push(Math.min(...order)) - //change value in matrix - for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift() - for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift() - for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift() - for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift() - } - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" "b/build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" deleted file mode 100644 index fb1e167..0000000 --- "a/build/oldSols/level-2/\355\226\211\353\240\254\354\235\230-\352\263\261\354\205\210&12949&.js" +++ /dev/null @@ -1,33 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(arr1, arr2) { - const [row, col] = [arr1.length, arr2[0].length] - let answer = new Array(row); - for (let i = 0; i < row; i++) answer[i] = new Array(col) - //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값 - for (let i = 0; i < row; i++) { - for (let j = 0; j < col; j++) { - answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0) - } - } - return answer; -} - -//정답 2 - prove-ability -function solution(arr1, arr2) { - var answer = []; - // 행만큼 반복 - for(let i = 0, len = arr1.length; i < len; i++) { - const arr = [] - // 열만큼 반복 - for(let j = 0, len = arr1[i].length; j < len; j++) { - // 각의 배열에서 행을 더해서 arr push - arr.push(arr1[i][j] + arr2[i][j]) - } - // 열 만큼 추가된 arr 를 answer 가 추가 - answer.push(arr) - } - - return answer; -} \ No newline at end of file diff --git "a/build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" "b/build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" deleted file mode 100644 index b0d86e8..0000000 --- "a/build/oldSols/level-2/\355\233\204\353\263\264\355\202\244&42890&.js" +++ /dev/null @@ -1,50 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(relation) { - //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다. - //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다. - //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다. - const keys = [] - const totalAttrCount = relation[0].length - const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1] - - //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수 - const isUnique = (relation, attrIndexComb) => { - let result = Array.from(Array(relation.length), x => '') - for (const attrIndex of attrIndexComb) { - relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음. - } - return result.length === [...new Set(result)].length - } - - //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다. - const isMinimal = (attrComb) => { - for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false - return true - } - - //가능한 모든 조합을 검사 - for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) { - const combinations = getCombinations(indexList, attrCount) - for (const attrComb of combinations) { - if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb) - } - } - - return keys.length -} - -//Fn for 1. 조합을 반환하는 함수 -const getCombinations = (array, selectNumber) => { - const result = []; - if (selectNumber === 1) { - return array.map((element) => [element]); - } - array.forEach((fixed, index, origin) => { - const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1); - const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]); - result.push(...attached); - }); - return result; -} diff --git "a/build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" "b/build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" deleted file mode 100644 index f454cf7..0000000 --- "a/build/oldSols/level-3/\352\260\200\354\236\245-\353\250\274-\353\205\270\353\223\234&49189&.js" +++ /dev/null @@ -1,23 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, edge) { - const graph = Array.from(Array(n + 1), () => []) - for (const [src, dest] of edge) { - graph[src].push(dest) - graph[dest].push(src) - } - const distance = Array(n + 1).fill(0) - distance[1] = 1 - const toBeSearched = [1] - while (toBeSearched.length > 0) { - const src = toBeSearched.shift() - for (const dest of graph[src]) { - if (distance[dest] === 0) { - distance[dest] = distance[src] + 1 - toBeSearched.push(dest) - } - } - } - return distance.filter(x => x === Math.max(...distance)).length -} \ No newline at end of file diff --git "a/build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" "b/build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" deleted file mode 100644 index a4fa59d..0000000 --- "a/build/oldSols/level-3/\353\204\244\355\212\270\354\233\214\355\201\254&43162&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, computers) { - let answer = 0 - const visited = new Array(n).fill(false) - const newNetwork = (startComputer) => { - //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다. - const toBeVisited = [startComputer] - while (toBeVisited.length > 0) { - //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다 - const currentComputer = toBeVisited.pop() - visited[currentComputer] = true - for (let nextComputer = 0; nextComputer < n; nextComputer++) { - if (!visited[nextComputer] && computers[currentComputer][nextComputer]) { - toBeVisited.push(nextComputer) - } - } - } - } - - for (let startComputer = 0; startComputer < n; startComputer++) { - if (!visited[startComputer]) { - newNetwork(startComputer) - //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다. - answer++ - } - } - return answer -} \ No newline at end of file diff --git "a/build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" "b/build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" deleted file mode 100644 index eb6f1b4..0000000 --- "a/build/oldSols/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274&42884&.js" +++ /dev/null @@ -1,34 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 -function solution(routes) { - let cctv = 1; // cctv의 개수는 최소 1개 - routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬 - // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ] - let out = routes[0][1]; // -15 - // 나간 시점(out)은 첫 차량의 나간시점으로 초기화 - - for(let i = 1; i < routes.length; i++) { - // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치 - if(out < routes[i][0]) { - cctv++; - out = routes[i][1]; // out 시점 업데이트 - } - - // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 - if(out > routes[i][1]) { - out = routes[i][1]; // out 시점 업데이트 - } - } - - return cctv; -} -// 그리디 - -// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다. -// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 -// 나간시점만 검사 해주면 됩니다. - -// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다. -// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면) -// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다. \ No newline at end of file diff --git "a/build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" "b/build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" deleted file mode 100644 index 5b45d5b..0000000 --- "a/build/oldSols/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224&42579&.js" +++ /dev/null @@ -1,48 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(genres, plays) { - var answer = []; - const songs = [] - const genreSumHash = {} - const genreSumArr = [] - - //고유번호, 장르, 플레이수를 담은 songs - genres.forEach((genre, id) => { - songs.push({id: id, genre: genre, play: plays[id]}) - genreSumHash[genre] = genreSumHash[genre] === undefined ? plays[id] : genreSumHash[genre] + plays[id] - }) - - //장르별 플레이수 합으로 정렬하기 위해 생성한 배열 genreSumArr - for (const genre in genreSumHash) genreSumArr.push([genre, genreSumHash[genre]]) - genreSumArr.sort((a, b) => b[1] - a[1]) - - //각 장르안에서 각 노래의 play수가 높은 순으로 정렬하고 앞에서부터 2개까지 정답에 고유번호를 push - for (const genre of genreSumArr) { - const sorted = songs.filter(song => song.genre === genre[0]).sort((a, b) => b.play - a.play) - for (let i = 0; i < 2 && i < sorted.length; i++) answer.push(sorted[i].id) - } - return answer; -} - -//정답 2 - codeisneverodd -//Map과 고차함수를 적극적으로 이용한 풀이 -function solution(genres, plays) { - const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]} - genres - .map((genre, id) => [genre, plays[id]]) - .forEach(([genre, play], id) => { - const data = genreMap.get(genre) || {totalPlay: 0, songs: []} - genreMap.set(genre, { - totalPlay: data.totalPlay + play, - songs: [...data.songs, {play: play, id: id}] - .sort((a, b) => b.play - a.play) - .slice(0, 2) - }) - }) - - return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...] - .sort((a, b) => b[1].totalPlay - a[1].totalPlay) - .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs] - .map(song => song.id) -} \ No newline at end of file diff --git "a/build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" "b/build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" deleted file mode 100644 index 2317d7b..0000000 --- "a/build/oldSols/level-3/\354\227\254\355\226\211\352\262\275\353\241\234&43164&.js" +++ /dev/null @@ -1,24 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(tickets) { - const routes = [] //최종 가능 루트들을 담을 배열 - const makeRoutes = (currentDepart, remainTickets, currentRoute) => { - //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수 - if (remainTickets.length > 0) { - remainTickets.forEach(([depart, nextDepart], index) => { - if (depart === currentDepart) - //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정 - makeRoutes( - nextDepart, - [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)], - [...currentRoute, currentDepart]) - }) - } else { - //티켓을 모두 사용하면 최종 가능 루트에 포함 - routes.push([...currentRoute, currentDepart]) - } - } - makeRoutes("ICN", tickets, []) - return routes.sort()[0] -} \ No newline at end of file diff --git "a/build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" "b/build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" deleted file mode 100644 index 560abe0..0000000 --- "a/build/oldSols/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220&42628&.js" +++ /dev/null @@ -1,34 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - jaewon1676 -function solution(operations) { - var answer = []; - for (let i = 0; i < operations.length; i++) { - // 숫자 삽입 - if (operations[i][0] == 'I') { - let m = operations[i].substring(2, operations[i].length); - answer.push(m); - } - // if 최댓값 삭제 - else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) { - answer.pop(); - } - // if 최솟값 삭제 - else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) { - answer.shift(); - } - - answer.sort((a, b) => { - return a - b; - }); - } - if (answer.length == 0) return [0, 0]; - else { - return [parseInt(answer.pop()), parseInt(answer.shift())]; - } -} -/* 풀이 과정 -1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다. -2. answer 배열을 정렬 해준다 -3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다. -*/ diff --git "a/build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" "b/build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" deleted file mode 100644 index 0a93d02..0000000 --- "a/build/oldSols/level-3/\354\236\205\352\265\255\354\213\254\354\202\254&43238&.js" +++ /dev/null @@ -1,19 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -function solution(n, times) { - //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right - let [left, right] = [1, Math.max(...times) * n]; - while (left <= right) { - const mid = Math.floor((left + right) / 2); - const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0); - //sum은 mid 시간 동안 처리 할 수 있는 사람의 수 - if (sum < n) { - left = mid + 1; - } else { - right = mid - 1; - } - } - // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다. - return left; -} diff --git "a/build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" "b/build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" deleted file mode 100644 index 77e4b6e..0000000 --- "a/build/oldSols/level-4/\352\260\200\354\202\254-\352\262\200\354\203\211&60060&.js" +++ /dev/null @@ -1,73 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ryong9rrr -class Node { - constructor(value = '') { - this.value = value - this.children = new Map() - this.count = 0 - } -} - -class Trie { - constructor() { - this.root = new Node() - } - - insert(string) { - let currentNode = this.root - for (const char of string) { - if (!currentNode.children.has(char)) { - currentNode.children.set(char, new Node(currentNode.value + char)) - } - currentNode = currentNode.children.get(char) - currentNode.count++ - } - } - - startsWithCount(prefix) { - let currentNode = this.root - for (const char of prefix) { - if (!currentNode.children.has(char)) { - return 0 - } - currentNode = currentNode.children.get(char) - } - return currentNode.count - } -} - -function reverseString(string) { - return [...string].reverse().join('') -} - -function solution(words, queries) { - const table = {} - const reverseTable = {} - const counter = {} - - words.forEach((word) => { - const key = word.length - if (!table[key]) table[key] = new Trie() - if (!reverseTable[key]) reverseTable[key] = new Trie() - table[key].insert(word) - reverseTable[key].insert(reverseString(word)) - if (counter[key] === undefined) counter[key] = 0 - counter[key]++ - }) - - return queries.map((query) => { - const key = query.length - if (!table[key]) { - return 0 - } - const tQuery = query.replace(/\?/g, '') - if (!tQuery) { - return counter[key] - } - if (query[query.length - 1] === '?') { - return table[key].startsWithCount(tQuery) - } - return reverseTable[key].startsWithCount(reverseString(tQuery)) - }) -} \ No newline at end of file diff --git "a/build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" "b/build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" deleted file mode 100644 index ce5fae8..0000000 --- "a/build/oldSols/level-4/\353\213\250\354\226\264-\355\215\274\354\246\220&12983&.js" +++ /dev/null @@ -1,31 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - codeisneverodd -//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90 -function solution(strs, t) { - const tLength = t.length; //자주 쓰는 값 미리 계산 - //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다. - const minCountToIndex = new Array(tLength).fill(Infinity); - for (let currentIndex = 0; currentIndex < tLength; currentIndex++) { - //내가 검사할 부분은 t의 0~currentIndex 영역 - const currentSlice = t.slice(0, currentIndex + 1); - for (const str of strs) { - //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면 - if (currentSlice.endsWith(str)) { - //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이 - const frontLength = currentIndex - str.length + 1; - if (frontLength === 0) { - //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각 - minCountToIndex[currentIndex] = 1; - } else { - //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값 - minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1); - } - } - } - } - //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴 - return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1]; -} - -//리드미 테스트용 코멘트 diff --git "a/build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" "b/build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" deleted file mode 100644 index 54b4060..0000000 --- "a/build/oldSols/level-4/\353\254\264\354\247\200\354\235\230-\353\250\271\353\260\251-\353\235\274\354\235\264\353\270\214&42891&.js" +++ /dev/null @@ -1,30 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//더 좋은 풀이가 존재할 수 있습니다. -//정답 1 - ryong9rrr -function solution(food_times, k) { - const total = food_times.reduce((a, b) => a + b) - if (total <= k) { - return -1 - } - - // stack으로 풀기 - const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA) - - let prev = 0 - while (stack.length > 0 && k >= 0) { - const [time] = stack[stack.length - 1] - const acc = (time - prev) * stack.length - if (k < acc) { - break - } - stack.pop() - k -= acc - prev = time - } - - const result = stack - .reverse() - .map(([_, order]) => order) - .sort((orderA, orderB) => orderA - orderB) - return result[k % result.length] -} \ No newline at end of file diff --git "a/build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" "b/build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" deleted file mode 100644 index 168bc5f..0000000 --- "a/build/oldSols/level-4/\354\230\254\353\260\224\353\245\270-\352\264\204\355\230\270\354\235\230-\352\260\257\354\210\230&12929&.js" +++ /dev/null @@ -1,7 +0,0 @@ -//https://github.com/codeisneverodd/programmers-coding-test -//완벽한 정답이 아닙니다. -//정답 1 - cg10036 -function solution(n) { - const fact = n => n ? BigInt(n) * fact(n - 1) : 1n; - return fact(n * 2) / (fact(n) * fact(n + 1)); -} diff --git a/build/run.js b/build/run.js deleted file mode 100644 index de7df1b..0000000 --- a/build/run.js +++ /dev/null @@ -1,10 +0,0 @@ -import { dbToFile, writeDB } from './utils/db.js'; -import { deleteDir } from './utils/file.js'; -import { oldSolsToDB } from './utils/oldSols.js'; -const run = () => { - const db = oldSolsToDB(); - deleteDir('solutions'); - writeDB(db); - dbToFile(db); -}; -run(); diff --git "a/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index f74287a..0000000 --- "a/build/solutions/level-0/2\354\260\250\354\233\220\354\234\274\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(num_list, n) { - let result = []; - for (let i = 0; i < num_list.length / n; i++) { - result = [...result, num_list.slice(i * n, i * n + n)]; - } - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" deleted file mode 100644 index f3d9db0..0000000 --- "a/build/solutions/level-0/369\352\262\214\354\236\204/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(order) { - return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" deleted file mode 100644 index 2d6afdb..0000000 --- "a/build/solutions/level-0/7\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(array) { - return [...array.join('')].filter(a => a === '7').length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index f0b8d07..0000000 --- "a/build/solutions/level-0/A\353\241\234 B \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(before, after) { - const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); - return sort(before) === sort(after) ? 1 : 0; -} \ No newline at end of file diff --git "a/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" "b/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" deleted file mode 100644 index c73df1b..0000000 --- "a/build/solutions/level-0/OX\355\200\264\354\246\210/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(quiz) { - return quiz.map(q => { - const [formula, answer] = q.split('='); - return eval(formula) === +answer ? 'O' : 'X'; - }); -} \ No newline at end of file diff --git "a/build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" deleted file mode 100644 index f0c914e..0000000 --- "a/build/solutions/level-0/k\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(i, j, k) { - let count = 0; - for (let num = i; num <= j; num++) { - count += [...('' + num)].filter(n => +n === k).length; - } - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" deleted file mode 100644 index 4c7c207..0000000 --- "a/build/solutions/level-0/n\354\235\230 \353\260\260\354\210\230 \352\263\240\353\245\264\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n, numlist) { - return numlist.filter(num => num % n === 0); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" deleted file mode 100644 index 872ec19..0000000 --- "a/build/solutions/level-0/\352\260\200\352\271\214\354\232\264 \354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(array, n) { - const minDiff = Math.min(...array.map(a => Math.abs(a - n))); - return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" deleted file mode 100644 index af79354..0000000 --- "a/build/solutions/level-0/\352\260\200\354\234\204 \353\260\224\354\234\204 \353\263\264/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(rsp) { - const win = { 0: 5, 2: 0, 5: 2 }; - return [...rsp].map(num => win[num]).join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index d18ad17..0000000 --- "a/build/solutions/level-0/\352\260\200\354\236\245 \355\201\260 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(array) { - const max = Math.max(...array); - return [max, array.indexOf(max)]; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" deleted file mode 100644 index 5e9eb2b..0000000 --- "a/build/solutions/level-0/\352\260\201\353\217\204\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(angle) { - if (angle === 180) return 4; - if (angle > 90) return 3; - if (angle === 90) return 2; - return 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" "b/build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" deleted file mode 100644 index c1baea7..0000000 --- "a/build/solutions/level-0/\352\260\234\353\257\270 \352\265\260\353\213\250/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(hp) { - const first = Math.floor(hp / 5); - const second = Math.floor((hp - first * 5) / 3); - const third = hp - first * 5 - second * 3; - return first + second + third; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" deleted file mode 100644 index a79838d..0000000 --- "a/build/solutions/level-0/\352\262\271\354\271\230\353\212\224 \354\204\240\353\266\204\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(lines) { - const visited = lines.reduce((a, [x, y]) => { - for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1; - return a; - }, {}); - - return Object.values(visited).filter(v => v > 1).length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" deleted file mode 100644 index 5a0ddb6..0000000 --- "a/build/solutions/level-0/\352\263\265 \353\215\230\354\247\200\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(numbers, k) { - const goNext = current => (current + 2) % numbers.length; - let current = 0; - for (let i = 0; i < k - 1; i++) current = goNext(current); - return numbers[current]; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" deleted file mode 100644 index 05ef94d..0000000 --- "a/build/solutions/level-0/\352\265\254\354\212\254\354\235\204 \353\202\230\353\210\204\353\212\224 \352\262\275\354\232\260\354\235\230 \354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(balls, share) { - const [n, m] = [balls, share]; - const fact = [BigInt(1), BigInt(1)]; - - for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i); - - return Number(fact[n] / (fact[n - m] * fact[m])); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index d8dd9ed..0000000 --- "a/build/solutions/level-0/\353\202\230\353\250\270\354\247\200 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num1, num2) { - return num1 % num2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" "b/build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" deleted file mode 100644 index bdc69b8..0000000 --- "a/build/solutions/level-0/\353\202\230\354\235\264 \354\266\234\353\240\245/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(age) { - return 2022 - age + 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" deleted file mode 100644 index 9b3eb8c..0000000 --- "a/build/solutions/level-0/\353\213\244\354\235\214\354\227\220 \354\230\254 \354\210\253\354\236\220/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(common) { - const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0]; - return isAP(common) - ? common[common.length - 1] + common[1] - common[0] - : common[common.length - 1] * (common[1] / common[0]); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index de2a5ee..0000000 --- "a/build/solutions/level-0/\353\213\244\355\225\255\354\213\235 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,19 +0,0 @@ -function solution(polynomial) { - const countX = x => { - const count = x.replaceAll('x', ''); - return count === '' ? 1 : +count; - }; - - const count = polynomial - .split(' + ') - .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), { - x: 0, - num: 0, - }); - - const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : ''; - const num = count.num > 0 ? '' + count.num : ''; - const plus = x !== '' && num !== '' ? ' + ' : ''; - - return x + plus + num; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200 \354\206\214\353\254\270\354\236\220/codeisneverodd.js" "b/build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200 \354\206\214\353\254\270\354\236\220/codeisneverodd.js" deleted file mode 100644 index cea4347..0000000 --- "a/build/solutions/level-0/\353\214\200\353\254\270\354\236\220\354\231\200 \354\206\214\353\254\270\354\236\220/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string) { - return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" deleted file mode 100644 index 2ed849b..0000000 --- "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \352\263\261/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num1, num2) { - return num1 * num2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" deleted file mode 100644 index 86ea34c..0000000 --- "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \353\202\230\353\210\227\354\205\210/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num1, num2) { - return Math.floor((num1 / num2) * 1000); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" deleted file mode 100644 index 3c3dd1e..0000000 --- "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \354\260\250/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num1, num2) { - return num1 - num2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" "b/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" deleted file mode 100644 index 8ab1a1f..0000000 --- "a/build/solutions/level-0/\353\221\220 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num1, num2) { - return num1 + num2 -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" deleted file mode 100644 index f23b44f..0000000 --- "a/build/solutions/level-0/\353\223\261\354\210\230 \353\247\244\352\270\260\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(score) { - const avgs = score.map(([a, b]) => (a + b) / 2); - const avgRank = [...avgs] - .sort((a, b) => b - a) - .map((avg, i) => ({ avg, rank: i + 1 })) - .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a)); - - return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" "b/build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" deleted file mode 100644 index 79764a4..0000000 --- "a/build/solutions/level-0/\353\241\234\352\267\270\354\235\270 \354\204\261\352\263\265?/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(id_pw, db) { - const [id, pw] = id_pw; - if (!db.find(([_id]) => _id === id)) return 'fail'; - return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw'; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" "b/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" deleted file mode 100644 index 3921adb..0000000 --- "a/build/solutions/level-0/\353\250\270\354\223\261\354\235\264\353\263\264\353\213\244 \355\202\244 \355\201\260 \354\202\254\353\236\214/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(array, height) { - return array.filter(a => a > height).length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" "b/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" deleted file mode 100644 index 6341132..0000000 --- "a/build/solutions/level-0/\353\252\250\354\212\244\353\266\200\355\230\270 (1)/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(letter) { - const morse = { - '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f', - '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l', - '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r', - '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x', - '-.--':'y','--..':'z' - } - return letter - .split(' ') - .map(l => morse[l]) - .join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" "b/build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" deleted file mode 100644 index af96994..0000000 --- "a/build/solutions/level-0/\353\252\250\354\235\214 \354\240\234\352\261\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string) { - return my_string.replace(/[aeiou]/g, ''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 102c9f9..0000000 --- "a/build/solutions/level-0/\353\252\253 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num1, num2) { - return Math.floor(num1 / num2); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index a2dc148..0000000 --- "a/build/solutions/level-0/\353\254\270\354\236\220 \353\260\230\353\263\265 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string, n) { - return [...my_string].map(char => char.repeat(n)).join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 72ffd26..0000000 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string) { - return eval(my_string); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" deleted file mode 100644 index 6881f84..0000000 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string) { - return [...my_string].reverse().join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" deleted file mode 100644 index a8b222e..0000000 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \353\260\200\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(A, B) { - const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join(''); - for (let i = 0; i <= A.length; i++) { - if (A === B) return i; - A = pushRight(A); - } - - return -1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" deleted file mode 100644 index b94a668..0000000 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (1)/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(my_string) { - return my_string - .match(/[0-9]/g) - .map(str => +str) - .sort((a, b) => a - b); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" deleted file mode 100644 index 77cca4e..0000000 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264 \354\240\225\353\240\254\355\225\230\352\270\260 (2)/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(my_string) { - return [...my_string] - .map(char => char.toLowerCase()) - .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) - .join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" "b/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" deleted file mode 100644 index aeb1248..0000000 --- "a/build/solutions/level-0/\353\254\270\354\236\220\354\227\264\354\225\210\354\227\220 \353\254\270\354\236\220\354\227\264/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(str1, str2) { - return str1.includes(str2) ? 1 : 2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index d553862..0000000 --- "a/build/solutions/level-0/\353\260\260\354\227\264 \353\221\220 \353\260\260 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(numbers) { - return numbers.map(n => n * 2); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" deleted file mode 100644 index 2d33ea8..0000000 --- "a/build/solutions/level-0/\353\260\260\354\227\264 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num_list) { - return num_list.reverse(); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" deleted file mode 100644 index 878b4d9..0000000 --- "a/build/solutions/level-0/\353\260\260\354\227\264 \354\233\220\354\206\214\354\235\230 \352\270\270\354\235\264/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(strlist) { - return strlist.map(s => s.length); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" deleted file mode 100644 index 464f79c..0000000 --- "a/build/solutions/level-0/\353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(numbers, num1, num2) { - return numbers.slice(num1, num2 + 1); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index a12e1b1..0000000 --- "a/build/solutions/level-0/\353\260\260\354\227\264 \355\232\214\354\240\204\354\213\234\355\202\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(numbers, direction) { - return direction === 'right' - ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)] - : [...numbers.slice(1), numbers[0]]; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" deleted file mode 100644 index 025ae42..0000000 --- "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \354\234\240\354\202\254\353\217\204/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s1, s2) { - return s1.filter(s => s2.includes(s)).length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" "b/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" deleted file mode 100644 index 572c1cc..0000000 --- "a/build/solutions/level-0/\353\260\260\354\227\264\354\235\230 \355\217\211\352\267\240\352\260\222/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(numbers) { - return numbers.reduce((a, c) => a + c, 0) / numbers.length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" deleted file mode 100644 index 00c1f4e..0000000 --- "a/build/solutions/level-0/\353\266\204\354\210\230\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(denum1, num1, denum2, num2) { - const denum = denum2 * num1 + denum1 * num2; - const num = num1 * num2; - const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b)); - const gcd = getGCD(denum, num); - return [denum / gcd, num / gcd]; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" deleted file mode 100644 index a3216cc..0000000 --- "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (1)/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(sides) { - const max = Math.max(...sides); - return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" "b/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" deleted file mode 100644 index 5e57afc..0000000 --- "a/build/solutions/level-0/\354\202\274\352\260\201\355\230\225\354\235\230 \354\231\204\354\204\261\354\241\260\352\261\264 (2)/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(sides) { - return Math.min(...sides) * 2 - 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" "b/build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" deleted file mode 100644 index 7d81def..0000000 --- "a/build/solutions/level-0/\354\204\270\352\267\240 \354\246\235\354\213\235/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n, t) { - return n * 2 ** t; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" "b/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" deleted file mode 100644 index 0dd3b5b..0000000 --- "a/build/solutions/level-0/\354\206\214\354\235\270\354\210\230\353\266\204\355\225\264/codeisneverodd.js" +++ /dev/null @@ -1,26 +0,0 @@ -function solution(n) { - let pFactors = []; - for (let i = 2; i <= Math.sqrt(n); i++) { - while (n % i === 0) { - pFactors = [...pFactors, i]; - n /= i; - } - } - if (n >= 2) pFactors = [...pFactors, n]; - return [...new Set(pFactors)].sort((a, b) => a - b); -} - -const funcB = () => { - return new Promise(resolve => { - setTimeout(resolve('guys'), 1000); - }); -}; - -const funcC = async () => { - const m = 1; - const res = await funcB(); - return res; -}; -window.addEventListener('DOMContentLoaded', async () => { - console.log(await funcC()); -}); \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" deleted file mode 100644 index 3eb8645..0000000 --- "a/build/solutions/level-0/\354\210\234\354\204\234\354\214\215\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - let count = 0; - for (let i = 1; i < Math.sqrt(n); i++) { - if (n % i === 0) count += 2; - } - if (n % Math.sqrt(n) === 0) count += 1; - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" deleted file mode 100644 index 22e52cc..0000000 --- "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (1)/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string) { - return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" "b/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" deleted file mode 100644 index cb7be2d..0000000 --- "a/build/solutions/level-0/\354\210\250\354\226\264\354\236\210\353\212\224 \354\210\253\354\236\220\354\235\230 \353\215\247\354\205\210 (2)/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(my_string) { - const nums = my_string.match(/[0-9]+/g); - return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index a06524e..0000000 --- "a/build/solutions/level-0/\354\210\253\354\236\220 \353\271\204\352\265\220\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num1, num2) { - return num1 === num2 ? 1 : -1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index 612ef6c..0000000 --- "a/build/solutions/level-0/\354\210\253\354\236\220 \354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(num, k) { - const index = [...('' + num)].findIndex(n => +n === k); - return index === -1 ? -1 : index + 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" "b/build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" deleted file mode 100644 index 509c4da..0000000 --- "a/build/solutions/level-0/\354\225\204\354\235\264\354\212\244 \354\225\204\353\251\224\353\246\254\354\271\264\353\205\270/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(money) { - return [Math.floor(money / 5500), money % 5500]; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" "b/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" deleted file mode 100644 index 8cc13a8..0000000 --- "a/build/solutions/level-0/\354\225\210\354\240\204\354\247\200\353\214\200/codeisneverodd.js" +++ /dev/null @@ -1,27 +0,0 @@ -function solution(board) { - const isBombNearby = (r, c) => { - const nearby = [ - [-1, -1], - [-1, 0], - [-1, 1], - [0, -1], - [0, 1], - [1, -1], - [1, 0], - [1, 1], - ]; - - const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length; - - return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1); - }; - - let count = 0; - - for (let r = 0; r < board.length; r++) { - for (let c = 0; c < board.length; c++) { - if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1; - } - } - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" "b/build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" deleted file mode 100644 index 576a3bc..0000000 --- "a/build/solutions/level-0/\354\225\224\355\230\270 \355\225\264\353\217\205/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(cipher, code) { - return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), ''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 621a86a..0000000 --- "a/build/solutions/level-0/\354\225\275\354\210\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - let answer = []; - for (let i = 1; i < Math.sqrt(n); i++) { - if (n % i === 0) answer = [...answer, i, n / i]; - } - if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)]; - return answer.sort((a, b) => a - b); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" "b/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" deleted file mode 100644 index 0403771..0000000 --- "a/build/solutions/level-0/\354\226\221\352\274\254\354\271\230/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n, k) { - return n * 12000 + (k - Math.floor(n / 10)) * 2000; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" "b/build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" deleted file mode 100644 index f9f1f83..0000000 --- "a/build/solutions/level-0/\354\227\260\354\206\215\353\220\234 \354\210\230\354\235\230 \355\225\251/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(num, total) { - const numArr = Array.from({ length: num }, (_, i) => i); - const sum = numArr.reduce((a, c) => a + c); - return numArr.map(n => n - (sum - total) / num); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" "b/build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" deleted file mode 100644 index 63cc07c..0000000 --- "a/build/solutions/level-0/\354\230\201\354\226\264\352\260\200 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(numbers) { - const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 }; - const regex = new RegExp(Object.keys(nums).join('|'), 'g'); - return +numbers.replace(regex, key => nums[key]); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" deleted file mode 100644 index ee84307..0000000 --- "a/build/solutions/level-0/\354\230\267\352\260\200\352\262\214 \355\225\240\354\235\270 \353\260\233\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(price) { - if (price >= 500000) return Math.floor(price * 0.8); - if (price >= 300000) return Math.floor(price * 0.9); - if (price >= 100000) return Math.floor(price * 0.95); - return price; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" deleted file mode 100644 index 7d0e932..0000000 --- "a/build/solutions/level-0/\354\230\271\354\225\214\354\235\264/codeisneverodd.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(babbling) { - const convertPWordsToNum = word => { - const pWords = ['aya', 'ye', 'woo', 'ma']; - return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word); - }; - const canPronounce = word => { - const result = convertPWordsToNum(word); - return !/[^\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]); - }; - - return babbling.filter(b => canPronounce(b)).length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" "b/build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" deleted file mode 100644 index b7619b2..0000000 --- "a/build/solutions/level-0/\354\231\270\352\263\204\354\226\264 \354\202\254\354\240\204/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(spell, dic) { - const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join(''); - return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230 \353\202\230\354\235\264/codeisneverodd.js" "b/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230 \353\202\230\354\235\264/codeisneverodd.js" deleted file mode 100644 index fc7a928..0000000 --- "a/build/solutions/level-0/\354\231\270\352\263\204\355\226\211\354\204\261\354\235\230 \353\202\230\354\235\264/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(age) { - return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index eba7d3d..0000000 --- "a/build/solutions/level-0/\354\234\240\355\225\234\354\206\214\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(a, b) { - const getGCD = (a, b) => { - let gcd = 1; - for (let i = 1; i <= Math.min(a, b); i++) { - if (a % i === 0 && b % i === 0) gcd = i; - } - return gcd; - }; - - const getPrimeFactors = num => { - let pFactors = []; - for (let i = 2; i <= Math.sqrt(num); i++) { - while (num % i === 0) { - pFactors = [...pFactors, i]; - num /= i; - } - } - if (num > 2) pFactors = [...pFactors, num]; - return pFactors; - }; - - return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 085b0f6..0000000 --- "a/build/solutions/level-0/\354\235\264\354\247\204\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(bin1, bin2) { - return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" deleted file mode 100644 index 4f9ba6e..0000000 --- "a/build/solutions/level-0/\354\235\270\353\215\261\354\212\244 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(my_string, num1, num2) { - const str = [...my_string]; - - [str[num1], str[num2]] = [str[num2], str[num1]]; - - return str.join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index b34fe52..0000000 --- "a/build/solutions/level-0/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 5b3f033..0000000 --- "a/build/solutions/level-0/\354\236\230\353\235\274\354\204\234 \353\260\260\354\227\264\353\241\234 \354\240\200\354\236\245\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(my_str, n) { - let result = []; - for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)]; - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" "b/build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" deleted file mode 100644 index 0c20fc5..0000000 --- "a/build/solutions/level-0/\354\240\200\354\243\274\354\235\230 \354\210\253\354\236\220 3/codeisneverodd.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(n) { - let num = 0; - let count = 0; - - while (count < n) { - num += 1; - if (!('' + num).includes('3') && num % 3 !== 0) count += 1; - } - - return num; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index e0b30d2..0000000 --- "a/build/solutions/level-0/\354\240\220\354\235\230 \354\234\204\354\271\230 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(dot) { - const [x, y] = dot; - if (y > 0) return x > 0 ? 1 : 2; - return x < 0 ? 3 : 4; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index c24becf..0000000 --- "a/build/solutions/level-0/\354\240\234\352\263\261\354\210\230 \355\214\220\353\263\204\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - return Number.isInteger(Math.sqrt(n)) ? 1 : 2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" deleted file mode 100644 index 2667b22..0000000 --- "a/build/solutions/level-0/\354\242\205\354\235\264 \354\236\220\353\245\264\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(M, N) { - return M * N - 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" deleted file mode 100644 index dfe38d5..0000000 --- "a/build/solutions/level-0/\354\243\274\354\202\254\354\234\204\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(box, n) { - return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" deleted file mode 100644 index fb13cc1..0000000 --- "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \353\254\270\354\236\220 \354\240\234\352\261\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string) { - return [...new Set(my_string)].join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" deleted file mode 100644 index 4620ee4..0000000 --- "a/build/solutions/level-0/\354\244\221\353\263\265\353\220\234 \354\210\253\354\236\220 \352\260\234\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(array, n) { - return array.filter(a => a === n).length; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index ba80a60..0000000 --- "a/build/solutions/level-0/\354\244\221\354\225\231\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(array) { - return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 913fce9..0000000 --- "a/build/solutions/level-0/\354\247\201\352\260\201\354\202\274\352\260\201\355\230\225 \354\266\234\353\240\245\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -const readline = require('readline'); -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, -}); - -let input = []; - -rl.on('line', function (line) { - input = line.split(' '); -}).on('close', function () { - for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i)); -}); \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 46e34d2..0000000 --- "a/build/solutions/level-0/\354\247\201\354\202\254\352\260\201\355\230\225 \353\204\223\354\235\264 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(dots) { - const xDots = dots.flatMap(([x, y]) => x); - const yDots = dots.flatMap(([x, y]) => y); - const width = Math.max(...xDots) - Math.min(...xDots); - const height = Math.max(...yDots) - Math.min(...yDots); - return width * height; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index bef7fec..0000000 --- "a/build/solutions/level-0/\354\247\204\353\243\214\354\210\234\354\204\234 \354\240\225\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(emergency) { - const sorted = [...emergency].sort((a, b) => b - a); - return emergency.map(e => sorted.findIndex(s => s === e) + 1); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" deleted file mode 100644 index 7dfda36..0000000 --- "a/build/solutions/level-0/\354\247\235\354\210\230 \355\231\200\354\210\230 \352\260\234\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(num_list) { - const evenLength = num_list.filter(n => n % 2 === 0).length; - return [evenLength, num_list.length - evenLength]; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" "b/build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" deleted file mode 100644 index 93e9fa3..0000000 --- "a/build/solutions/level-0/\354\247\235\354\210\230\353\212\224 \354\213\253\354\226\264\354\232\224/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - let nums = []; - for (let i = 0; i <= n; i++) { - if (i % 2 === 1) nums = [...nums, i]; - } - return nums; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" "b/build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" deleted file mode 100644 index 4b2aa7f..0000000 --- "a/build/solutions/level-0/\354\247\235\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - let answer = 0; - for (let i = 0; i <= n; i++) { - if (i % 2 === 0) answer += i; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" deleted file mode 100644 index 101f21b..0000000 --- "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260 (2)/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(numbers) { - const sorted = numbers.sort((a, b) => a - b); - return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" "b/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" deleted file mode 100644 index c9c6096..0000000 --- "a/build/solutions/level-0/\354\265\234\353\214\223\352\260\222 \353\247\214\353\223\244\352\270\260(1)/codeisneverodd.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(numbers) { - const [first, second, ...rest] = numbers.sort((a, b) => b - a); - return first * second; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 8605514..0000000 --- "a/build/solutions/level-0/\354\265\234\353\271\210\352\260\222 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(array) { - const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); - const max = Math.max(...Object.values(counts)); - const modes = Object.keys(counts).filter(key => counts[key] === max); - return modes.length === 1 ? +modes[0] : -1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" "b/build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" deleted file mode 100644 index 98a7917..0000000 --- "a/build/solutions/level-0/\354\271\230\355\202\250 \354\277\240\355\217\260/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(chicken) { - const order = coupons => { - if (coupons < 10) return 0; - const service = Math.floor(coupons / 10); - return service + order(service + (coupons % 10)); - }; - return order(chicken); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" "b/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" deleted file mode 100644 index 80334e9..0000000 --- "a/build/solutions/level-0/\354\272\220\353\246\255\355\204\260\354\235\230 \354\242\214\355\221\234/codeisneverodd.js" +++ /dev/null @@ -1,22 +0,0 @@ -//명령형 -function solution(keyinput, board) { - const moves = { - up: [0, 1], - down: [0, -1], - left: [-1, 0], - right: [1, 0], - }; - const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)]; - - let pos = [0, 0]; - - keyinput - .map(key => moves[key]) - .forEach(move => { - if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return; - pos[0] += move[0]; - pos[1] += move[1]; - }); - - return pos; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" "b/build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" deleted file mode 100644 index da760e2..0000000 --- "a/build/solutions/level-0/\354\273\250\355\212\270\353\241\244 \354\240\234\355\212\270/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(s) { - const arr = s.split(' '); - while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2); - return arr.map(n => +n).reduce((a, c) => a + c, 0); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" "b/build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" deleted file mode 100644 index 46bc5f3..0000000 --- "a/build/solutions/level-0/\355\212\271\354\235\264\355\225\234 \354\240\225\353\240\254/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(numlist, n) { - return numlist.sort((a, b) => { - const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)]; - if (aDiff === bDiff) return b - a; - return aDiff - bDiff; - }); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index cc6a0d7..0000000 --- "a/build/solutions/level-0/\355\212\271\354\240\225 \353\254\270\354\236\220 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(my_string, letter) { - return my_string.replaceAll(letter, ''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" "b/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" deleted file mode 100644 index 8ccd6d8..0000000 --- "a/build/solutions/level-0/\355\214\251\355\206\240\353\246\254\354\226\274/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(n) { - let factorial = [1, 1]; - for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i; - - return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" "b/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" deleted file mode 100644 index b6e70ff..0000000 --- "a/build/solutions/level-0/\355\216\270\354\247\200/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(message) { - return message.length * 2; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" "b/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" deleted file mode 100644 index 66a0001..0000000 --- "a/build/solutions/level-0/\355\217\211\355\226\211/codeisneverodd.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(dots) { - const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity); - const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2); - - return dots.some(dot => { - const line1 = [dots[0], dot]; - const line2 = dots.filter(dot => !line1.includes(dot)); - return isParallel(line1, line2); - }) - ? 1 - : 0; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" deleted file mode 100644 index 363990b..0000000 --- "a/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (1)/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - return Math.floor((n - 1) / 7) + 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" deleted file mode 100644 index 69fefc4..0000000 --- "a/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (2)/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(n) { - const getLCM = (a, b) => { - let lcm = 1; - while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1; - return lcm; - }; - - return getLCM(n, 6) / 6; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" "b/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" deleted file mode 100644 index 0247993..0000000 --- "a/build/solutions/level-0/\355\224\274\354\236\220 \353\202\230\353\210\240 \353\250\271\352\270\260 (3)/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(slice, n) { - return Math.floor((n - 1) / slice) + 1; -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" "b/build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" deleted file mode 100644 index f7a2de2..0000000 --- "a/build/solutions/level-0/\355\225\234 \353\262\210\353\247\214 \353\223\261\354\236\245\355\225\234 \353\254\270\354\236\220/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(s) { - const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {}); - return Object.keys(count) - .filter(key => count[key] === 1) - .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)) - .join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index 6ce099d..0000000 --- "a/build/solutions/level-0/\355\225\251\354\204\261\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(n) { - const isPrime = num => { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return true; - } - return false; - }; - - let count = 0; - - for (let i = 1; i <= n; i++) { - if (isPrime(i)) count += 1; - } - - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" "b/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" deleted file mode 100644 index dade482..0000000 --- "a/build/solutions/level-1/2016\353\205\204/chaerin-dev.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(a, b) { - let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - let week = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수 - let passedDays = 0; - // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌 - for (let i = 1; i < a; i++) passedDays += arr[i]; - // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌 - passedDays += b - 1; - return week[(5 + passedDays) % 7]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/2016\353\205\204/codeisneverodd.js" "b/build/solutions/level-1/2016\353\205\204/codeisneverodd.js" deleted file mode 100644 index cb0ee09..0000000 --- "a/build/solutions/level-1/2016\353\205\204/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(a, b) { - let count = 0; - const day = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - for (let i = 1; i < a; i++) count += month[i]; - count += b; - return day[(count + 4) % 7]; // 금요일 부터 1일 이므로 -} \ No newline at end of file diff --git "a/build/solutions/level-1/2016\353\205\204/prove-ability.js" "b/build/solutions/level-1/2016\353\205\204/prove-ability.js" deleted file mode 100644 index 9f59709..0000000 --- "a/build/solutions/level-1/2016\353\205\204/prove-ability.js" +++ /dev/null @@ -1,15 +0,0 @@ -function solution(a, b) { - var answer = ""; - // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? - const days = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; - const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - // 2016년 1월 1일은 금요일로 4를 더해준다 - let totalDays = 4; - // a 이전 모든 달의 일 수를 더한다 - for (let i = 0, len = a - 1; i < len; i++) { - totalDays += daysOfMonth[i]; - } - // totalDays 와 해당 일을 더해주고 7로 나눈 나머지 - const dayIndex = (totalDays + b) % 7; - return days[dayIndex]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/2016\353\205\204/yongchanson.js" "b/build/solutions/level-1/2016\353\205\204/yongchanson.js" deleted file mode 100644 index 167ce11..0000000 --- "a/build/solutions/level-1/2016\353\205\204/yongchanson.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(a, b) { - const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - const week = ["THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED"]; - - let sum = b; - for ( - let i = 0; - i < a - 1; - i++ //ex)5월인 경우 1~4월까지 더해준다. - ) - sum += month[i]; - - return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다. -} \ No newline at end of file diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" deleted file mode 100644 index 92ee17f..0000000 --- "a/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(n) { - var answer = 0; - const ternaryReversed = decimalToTernaryReversed(n); - answer = parseInt(ternaryReversed, 3); - return answer; -} - -const decimalToTernaryReversed = (num) => { - let ternary = ""; - while (num >= 3) { - ternary += (num % 3).toString(); - num = Math.floor(num / 3); - } - ternary += num.toString(); - return ternary; -}; \ No newline at end of file diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" deleted file mode 100644 index d894103..0000000 --- "a/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(n) { - var answer = n.toString(3).split("").reverse().join(""); - - return parseInt(answer, 3); -} \ No newline at end of file diff --git "a/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" "b/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" deleted file mode 100644 index a642e19..0000000 --- "a/build/solutions/level-1/3\354\247\204\353\262\225 \353\222\244\354\247\221\352\270\260/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - return parseInt(n.toString(3).split("").reverse().join(""), 3) -} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" deleted file mode 100644 index 6bb46f1..0000000 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/chaerin-dev.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(array, commands) { - let t = commands.length; - let answer = []; - while (t--) { - let command = commands.shift(); - answer.push( - array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[ - command[2] - 1 - ] - ); - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" deleted file mode 100644 index 00a6a06..0000000 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(array, commands) { - return commands.map((cmd) => { - const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b); - return arrCmd[cmd[2] - 1]; - }); -} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" deleted file mode 100644 index 32a27c3..0000000 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/createhb21.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(array, commands) { - let answer = []; - for (let i = 0; i < commands.length; i++) { - let eachCommand = commands[i]; - let slice = array.slice(eachCommand[0] - 1, eachCommand[1]); - answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]); - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" deleted file mode 100644 index 74bb8d0..0000000 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/jaewon1676.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(array, commands) { - var result = []; - var temp = []; - for (var i = 0; i < commands.length; i++) { - temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => { - return a - b; - }); - console.log(temp); - result.push(temp[commands[i][2] - 1]); - } - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" "b/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" deleted file mode 100644 index 841af4c..0000000 --- "a/build/solutions/level-1/K\353\262\210\354\247\270\354\210\230/prove-ability.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(array, commands) { - var answer = []; - commands.forEach(([i, j, k]) => { - const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1]; - answer.push(su); - }); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" deleted file mode 100644 index 946059a..0000000 --- "a/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/codeisneverodd.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(dartResult) { - const regex = /\d{1,2}[SDT]{1}[*|#]?/g; - let result = []; - for (const dart of dartResult.match(regex)) { - const game = [...dart.split(/([SDT]{1})/)]; - const score = game[0]; - let bonus = 1; - let option = 1; - if (game[1] === "S") bonus = 1; - if (game[1] === "D") bonus = 2; - if (game[1] === "T") bonus = 3; - - if (game[2] === "*") { - if (result.length !== 0) result[result.length - 1] *= 2; - option = 2; - } - if (game[2] === "#") option = -1; - - result.push(score ** bonus * option); - } - - return result.reduce((a, b) => a + b); -} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" "b/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" deleted file mode 100644 index 283de5a..0000000 --- "a/build/solutions/level-1/[1\354\260\250] \353\213\244\355\212\270 \352\262\214\354\236\204/jaewon1676.js" +++ /dev/null @@ -1,32 +0,0 @@ -function solution(dartResult) { - var answer = 0; - let score = 0; - let cnt = []; - - for (let i = 0; i < dartResult.length; i++) { - //점수가 주어질때 - if (!isNaN(dartResult[i])) { - // i가 1인 경우는 10점, 그외에는 점수 - score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]); - //보너스 S일때 - } else if (dartResult[i] === "S") { - cnt.push(score); - //보너스 D일때 - } else if (dartResult[i] === "D") { - cnt.push(Math.pow(score, 2)); - //보너스 T일때 - } else if (dartResult[i] === "T") { - cnt.push(Math.pow(score, 3)); - //옵션 *일떄 - } else if (dartResult[i] === "*") { - cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2; - cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2; - //옵션 #일때 - } else if (dartResult[i] === "#") { - cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1]; - } - } - //3개의 점수 합산 - answer = cnt.reduce((acc, cur) => acc + cur, 0); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" "b/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" deleted file mode 100644 index daff149..0000000 --- "a/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/codeisneverodd.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(n, arr1, arr2) { - var answer = []; - let mapA = []; - let mapB = []; - for (let i = 0; i < n; i++) { - let rowArrA = arr1[i].toString(2).split(""); - let rowArrB = arr2[i].toString(2).split(""); - for (let j = 0, len = rowArrA.length; j < n - len; j++) - rowArrA.unshift("0"); - for (let j = 0, len = rowArrB.length; j < n - len; j++) - rowArrB.unshift("0"); - mapA.push(rowArrA); - mapB.push(rowArrB); - } - let answer2D = mapA.slice(); - for (let i = 0; i < n; i++) { - for (let j = 0; j < n; j++) { - answer2D[i][j] = mapA[i][j] === "0" && mapB[i][j] === "0" ? " " : "#"; - } - } - answer = answer2D.map((row) => row.join("")); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" "b/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" deleted file mode 100644 index 9e892cf..0000000 --- "a/build/solutions/level-1/[1\354\260\250] \353\271\204\353\260\200\354\247\200\353\217\204/jaewon1676.js" +++ /dev/null @@ -1,22 +0,0 @@ -function solution(n, arr1, arr2) { - let answer = []; - for (let i = 0; i < n; i++) { - let temp = (arr1[i] | arr2[i]).toString(2); - let line = []; // 한 행의 모든 2진수 보관 - - for (let j = temp.length - n; j < temp.length; j++) { - if (temp[j] == 1) { - line.push("#"); - } else { - line.push(" "); - } - } - answer.push(line.join("")); - } - return answer; -} - -/* 풀이 과정 -1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다. -2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다. -3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/ \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" deleted file mode 100644 index 0d9c333..0000000 --- "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/chaerin-dev.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(x, n) { - var answer = []; - let add_gap = x; - // n번 반복 - for (let i = 0; i < n; i++) { - answer.push(x); // 처음 배열에 넣을 x - x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가 - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" deleted file mode 100644 index cf1c3d9..0000000 --- "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(x, n) { - return Array.from(Array(n), (_, index) => x * (index + 1)); -} \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" deleted file mode 100644 index fba7202..0000000 --- "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/jaewon1676.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - let str = ""; - for (let i = 0; i < n; i++) { - // 삼항 연산자와 +로 문자열을 붙여주어 추가. - i % 2 == 0 ? (str = str + "수") : (str = str + "박"); - } - return str; -} \ No newline at end of file diff --git "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" "b/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" deleted file mode 100644 index 259c816..0000000 --- "a/build/solutions/level-1/x\353\247\214\355\201\274 \352\260\204\352\262\251\354\235\264 \354\236\210\353\212\224 n\352\260\234\354\235\230 \354\210\253\354\236\220/prove-ability.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(x, n) { - var answer = []; - let i = 1; - // n개 지니는 리스트를 리턴해야 합니다 - while (answer.length !== n) { - // x부터 시작해 x씩 증가하는 숫자 - answer.push(x * i); - i++; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" deleted file mode 100644 index 163f3c9..0000000 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(s) { - return s.length % 2 - ? s[parseInt(s.length / 2)] - : s[s.length / 2 - 1] + s[s.length / 2]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index 371c2cd..0000000 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(s) { - return s.length % 2 !== 0 - ? s[Math.floor(s.length / 2)] - : s.slice(s.length / 2 - 1, s.length / 2 + 1); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" deleted file mode 100644 index cad7fdd..0000000 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(s) { - var answer = ''; - - if (s.length % 2 == 0 ) { // 짝수일 경우, - answer = s[s.length / 2 - 1] + s[s.length / 2]; - } else { - answer = s[parseInt(s.length / 2)]; // 홀수일 경우 - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" deleted file mode 100644 index a2a1fbf..0000000 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/prove-ability.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(s) { - var answer = ''; - // 중간 지점 찾기 - const point = Math.floor(s.length / 2); - // 짝수인 경우 - (중간지점 - 1) + 중간지점 - if(s.length % 2 ===0) answer = s[point - 1] + s[point]; - // 홀수인 경우 - 중간지점 - else answer = s[point]; - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" "b/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" deleted file mode 100644 index e4f54bf..0000000 --- "a/build/solutions/level-1/\352\260\200\354\232\264\353\215\260 \352\270\200\354\236\220 \352\260\200\354\240\270\354\230\244\352\270\260/yongchanson.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(s) { - var answer = ""; - let L2 = s.length / 2; - - answer = - s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]); - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" deleted file mode 100644 index 9091f00..0000000 --- "a/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/chaerin-dev.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(arr) { - // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고, - // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용 - // 첫 번째 요소의 경우 undefined와 비교 - return arr.filter((item, index) => item !== arr[index - 1]); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" deleted file mode 100644 index 3ef3014..0000000 --- "a/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(arr) { - var answer = [arr[0]]; - for (let i = 1; i < arr.length; i++) { - //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다. - answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" "b/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" deleted file mode 100644 index c353a43..0000000 --- "a/build/solutions/level-1/\352\260\231\354\235\200 \354\210\253\354\236\220\353\212\224 \354\213\253\354\226\264/prove-ability.js" +++ /dev/null @@ -1,17 +0,0 @@ -function solution(arr) { - let answer = []; - // 이중 배열을 사용해서 포인터?를 두 개를 사용한다 - for (let i = 0, len = arr.length - 1; i < len; i++) { - // i 의 다음수를 비교하기 위해 j = (i + 1) - for (let j = i + 1, len = arr.length; j < len; j++) { - // i 와 j 번째 값이 같이 않다면 - if (arr[i] !== arr[j]) { - answer.push(arr[i]); - i = j - 1; - break; - } - } - } - answer.push(arr[arr.length - 1]); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" deleted file mode 100644 index ce8a792..0000000 --- "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(arr, divisor) { - var answer = []; - arr.forEach((element) => { - element % divisor === 0 ? answer.push(element) : null; - }); - answer.length === 0 ? answer.push(-1) : null; - answer.sort((a, b) => a - b); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" deleted file mode 100644 index dc80adc..0000000 --- "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/dev.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(arr, divisor) { - let answer = []; - arr.forEach((e) => { - if (e % divisor === 0) answer.push(e); - }); - return answer.length ? answer.sort((a, b) => a - b) : [-1]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" "b/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" deleted file mode 100644 index a5a2d7a..0000000 --- "a/build/solutions/level-1/\353\202\230\353\210\204\354\226\264 \353\226\250\354\226\264\354\247\200\353\212\224 \354\210\253\354\236\220 \353\260\260\354\227\264/prove-ailbity.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(arr, divisor) { - var answer = []; - arr.forEach((v) => v % divisor === 0 && answer.push(v)) - return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index 078e719..0000000 --- "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - - let answer = 0; - for (let divisor = n - 1; divisor >= 2; divisor--) { - if (n % divisor === 1) answer = divisor; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" deleted file mode 100644 index eb35178..0000000 --- "a/build/solutions/level-1/\353\202\230\353\250\270\354\247\200\352\260\200 1\354\235\264 \353\220\230\353\212\224 \354\210\230 \354\260\276\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - var answer = 0; - for (let i=1; i acc + e * b[i], 0); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" "b/build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" deleted file mode 100644 index 7407dcd..0000000 --- "a/build/solutions/level-1/\353\202\264\354\240\201/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(a, b) { - return a.reduce((x, y, i) => x + y * b[i], 0); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" "b/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" deleted file mode 100644 index 74c1300..0000000 --- "a/build/solutions/level-1/\353\202\264\354\240\201/jaewon1676.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(a, b) { - let answer = 0; - for (let i=0; i a - b); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 6657c2a..0000000 --- "a/build/solutions/level-1/\353\221\220 \352\260\234 \353\275\221\354\225\204\354\204\234 \353\215\224\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(numbers) { - const answer = []; - - for(let i = 0, len = numbers.length; i < len; i++) { - for(let j = i + 1, len = numbers.length; j < len; j++) { - if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j]) - } - } - - return answer.sort((a, b) => a - b); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" deleted file mode 100644 index 8f84c56..0000000 --- "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/chaerin-dev.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(a, b) { - let answer = 0; - for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { - answer += i; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" deleted file mode 100644 index 8f84c56..0000000 --- "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(a, b) { - let answer = 0; - for (let i = Math.min(a, b); i <= Math.max(a, b); i++) { - answer += i; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" deleted file mode 100644 index c667026..0000000 --- "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/jaewon1676.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(a, b) { - if (b < a){ // b가 a보다 큰 수가 되도록 해준다. - let c = b - b = a - a = c - } - let sum = 0; // 합을 구할 변수 - for (let i=a; i<=b; i++){ - sum += i - } - return sum; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" "b/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" deleted file mode 100644 index 63d3980..0000000 --- "a/build/solutions/level-1/\353\221\220 \354\240\225\354\210\230 \354\202\254\354\235\264\354\235\230 \355\225\251/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(a, b) { - return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" deleted file mode 100644 index 23410fd..0000000 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/chaerin-dev.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(lottos, win_nums) { - let zeroCount = 0; - let winCount = 0; - lottos.forEach((item) => { - if (item === 0) zeroCount++; - else if (win_nums.includes(item)) winCount++; - }); - let maxRank = Math.min(7 - (winCount + zeroCount), 6); - let minRank = Math.min(7 - winCount, 6); - return [maxRank, minRank]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" deleted file mode 100644 index 0170319..0000000 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/codeisneverodd.js" +++ /dev/null @@ -1,28 +0,0 @@ -function solution(lottos, win_nums) { - // 0이 없는 경우 > 최저 순위 == 최고 순위 - // 0이 있는 경우 > 모두 0인경우 > 1위 - // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위 - // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함. - // 순위는 7 - hit - // 최종적으로 7위인 경우 6위로 변경 - var answer = []; - if (lottos.indexOf(0) === -1) { - answer[0] = answer[1] = 7 - hit(lottos, win_nums); - } else { - const zeroCount = lottos.length - [...new Set(lottos)].length + 1; - answer[1] = 7 - hit(lottos, win_nums); - zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount); - } - for (let i = 0; i < 2; i++) { - answer[i] >= 7 ? (answer[i] = 6) : null; - } - return answer; -} - -function hit(lottos, win_nums) { - let result = 0; - lottos.forEach((element) => { - win_nums.indexOf(element) === -1 ? null : (result += 1); - }); - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" deleted file mode 100644 index c40fa96..0000000 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/jaewon1676.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(lottos, win_nums) { - var answer = []; - let max = 7; - let min = 7; - console.log(lottos); - console.log(win_nums); - for (let i = 0; i < 6; i++) { - if (lottos.includes(win_nums[i])) { - max--; - } - } - min = max; - for (let i = 0; i < 6; i++) { - if (lottos[i] == 0) min--; - } - if (max == 7) max = 6; - if (min == 7) min = 6; - answer = [min, max]; - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" deleted file mode 100644 index 49fc515..0000000 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/prove-ability.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(lottos, win_nums) { - // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화 - let winCount = 0; - let zeroCount = 0; - // 내 로또 번호 하니씩 접근 - lottos.forEach((num) => { - // 번호가 0이 아니고 당첨 번호라면 - if (num !== 0 && win_nums.includes(num)) { - winCount++; - // 번호가 0이라면 - } else if (num === 0) { - zeroCount++; - } - }); - // 일치한 수와 등수는 반비례하기 때문에 빼기 7 - // 이때 등수를 벗어나면 낙첨(6) 으로 고정 - let max = 7 - (winCount + zeroCount); - if (max > 5) max = 6; - let min = 7 - winCount; - if (min > 5) min = 6; - - return [max, min]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" "b/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" deleted file mode 100644 index ae82632..0000000 --- "a/build/solutions/level-1/\353\241\234\353\230\220\354\235\230 \354\265\234\352\263\240 \354\210\234\354\234\204\354\231\200 \354\265\234\354\240\200 \354\210\234\354\234\204/yongchanson.js" +++ /dev/null @@ -1,29 +0,0 @@ -function solution(lottos, win_nums) { - //최고당첨개수 : maxPoint + basicPoint - //최저당첨개수 : basicPoint - - let basicPoint = 0; - let maxPoint = 0; - let answer = []; - - lottos.forEach(function (lottos_item) { - win_nums.forEach(function (win_nums_item) { - if (lottos_item == win_nums_item) { - basicPoint++; - } - }); - }); - - lottos.forEach(function (item) { - if (item == 0) { - maxPoint++; - } - }); - - maxPoint + basicPoint >= 2 - ? answer.push(7 - maxPoint - basicPoint) - : answer.push(6); - basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6); - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" deleted file mode 100644 index e157ad4..0000000 --- "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/chaerin-dev.js" +++ /dev/null @@ -1,22 +0,0 @@ -function solution(answers) { - const pattern = [ - [1, 2, 3, 4, 5], - [2, 1, 2, 3, 2, 4, 2, 5], - [3, 3, 1, 1, 2, 2, 4, 4, 5, 5], - ]; - const scores = [0, 0, 0]; - - answers.forEach((answer, i) => { - for (let j = 0; j < pattern.length; j++) { - const patternLength = pattern[j].length; - if (answer === pattern[j][i % patternLength]) scores[j]++; - } - }); - - const answer = []; - const maxScore = Math.max(...scores); - scores.forEach((score, i) => { - if (score === maxScore) answer.push(i + 1); - }); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" deleted file mode 100644 index 270280b..0000000 --- "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/codeisneverodd.js" +++ /dev/null @@ -1,25 +0,0 @@ -function solution(answers) { - const answer = []; - const firstPattern = [1, 2, 3, 4, 5]; - const firstPLength = firstPattern.length; - const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5]; - const secondPLength = secondPattern.length; - const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; - const thirdLength = thirdPattern.length; - let correctCount = [0, 0, 0]; - - for (let i = 0, len = answers.length; i < len; i++) { - if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1; - if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1; - if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1; - } - - const maxScore = Math.max(...correctCount); - for (let i = 0; i < 3; i++) { - if (correctCount[i] === maxScore) answer.push(i + 1); - } - - return answer; -} - -// 완벽한 정답이 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" deleted file mode 100644 index 39afe4a..0000000 --- "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/jaewon1676.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(answers) { - let arr1 = [1,2,3,4,5] - let arr2 = [2,1,2,3,2,4,2,5] - let arr3 = [3,3,1,1,2,2,4,4,5,5] - - let score = [0, 0, 0] - for (let i=0; i { - for (let [key, { pattern }] of Object.entries(players)) { - // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가 - if (pattern[index % pattern.length] === answer) { - players[key].count++; - // 제일 높은 count 구하기 - if (max < players[key].count) max = players[key].count; - } - } - }); - // players 중에 count 가 max 와 값이 같다면 result 추가 - for (let [key, { count }] of Object.entries(players)) { - if (count === max) result.push(parseInt(key, 10)); - } - - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" "b/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" deleted file mode 100644 index c5daa0b..0000000 --- "a/build/solutions/level-1/\353\252\250\354\235\230\352\263\240\354\202\254/yongchanson.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(answers) { - let score = []; - let answer = []; - let a1 = [1, 2, 3, 4, 5]; - let a2 = [2, 1, 2, 3, 2, 4, 2, 5]; - let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; - - score.push(answers.filter((a, i) => a === a1[i % a1.length]).length); - score.push(answers.filter((a, i) => a === a2[i % a2.length]).length); - score.push(answers.filter((a, i) => a === a3[i % a3.length]).length); - - for (let i = 0; i < score.length; i++) { - const max = Math.max(...score); - if (score[i] === max) { - answer.push(i + 1); - } - } - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" deleted file mode 100644 index f4d7aa2..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/chaerin-dev.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(s) { - let pCount = s.split(/p/i).length - 1; - let yCount = s.split(/y/i).length - 1; - return pCount === yCount; -} -// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다. -// Ex. "ababb".split("a") 의 결과는 ["", "b", "bb"] -// => 즉, "a"의 갯수는 3에서 1을 뺀 2 \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" deleted file mode 100644 index 47021f6..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(s) { - const countP = [...s.matchAll(/p/gi)].length; - const countY = [...s.matchAll(/y/gi)].length; - return countP === countY; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/prove-ability.js" deleted file mode 100644 index e875049..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/prove-ability.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(s){ - // 배열로 변환 - s = s.split(""); - // filter 를 사용해 갯수 추출 - const pCount = s.filter((v) => v === "p" || v === "P").length; - const yCount = s.filter((v) => v === "y" || v === "Y").length; - return pCount === yCount; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" deleted file mode 100644 index 6187068..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 p\354\231\200 y\354\235\230 \352\260\234\354\210\230/yongchanson.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(s) { - p = s.toLowerCase().split("p").length; - y = s.toLowerCase().split("y").length; - - return p == y ? true : false; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index 4b799bb..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(strings, n) { - return strings.sort((a, b) => { - // 인덱스 n번째 글자를 기준으로 오름차순 정렬 - if (a[n] > b[n]) return 1; - else if (a[n] < b[n]) return -1; - // 인덱스 n번째 글자가 같으면 사전순 정렬 - else return a > b ? 1 : -1; - }); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 9788f49..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(strings, n) { - return strings.sort((a, b) => { - if (a[n] < b[n]) return -1; - if (a[n] > b[n]) return 1; - if (a[n] === b[n]) return a < b ? -1 : 1; - return 0; - }); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index f42c9fd..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264 \353\247\210\354\235\214\353\214\200\353\241\234 \354\240\225\353\240\254\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(strings, n) { - // 정렬 - strings.sort((a, b) => { - // n번째 클자가 같다면 사전순 - if(a[n].charCodeAt() === b[n].charCodeAt()) { - return a > b ? 1 : -1; - } else return a[n].charCodeAt() - b[n].charCodeAt(); - }); - - return strings; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index 6b92f41..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s) { - return s.split("").sort((a, b) => (a < b ? 1 : -1)).join(""); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 1931eed..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(s) { - return s - .split("") - .sort((a, b) => { - if (a < b) return 1; - if (a > b) return -1; - return 0; - }) - .join(""); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" deleted file mode 100644 index f59aa60..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(s) { - return s.split('').sort().reverse().join('') -} -// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다. -// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다. -// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index a31aec0..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s) { - return s.split("").sort().reverse().join("") -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" deleted file mode 100644 index e789b8e..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/chaerin-dev.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(s) { - // 길이가 4 혹은 6이 아니면 false 반환 - if (s.length !== 4 && s.length !== 6) return false; - // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환 - for (let i = 0; i < s.length; i++) { - if (isNaN(Number(s[i]))) return false; - } - // 위의 모든 조건에 포함되지 않으면 - // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환 - return true; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" deleted file mode 100644 index f5af6b1..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s) { - return s.search(/\D/g) < 0 && (s.length === 4 || s.length === 6); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" deleted file mode 100644 index 8bfb3dc..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/prove-ability.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(s) { - var answer = true; - // 문자열 s의 길이가 4 혹은 6이고 - if (s.length === 4 || s.length === 6) { - for (let i = 0, len = s.length; i < len; i++) { - // 숫자로만 구성돼있는지 확인 - if (!Number.isInteger(parseInt(s[i], 10))) return false; - } - // 문자열 s의 길이가 4 혹은 6 가 아니라면 false - } else return false; - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" deleted file mode 100644 index a06892b..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/soulhn.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(s) { - if (s.length !== 4 && s.length !== 6) return false; - return !s.split("").some((i) => isNaN(parseInt(i, 10))); - //early return 제외사항 먼저 처리 - //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환 -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" deleted file mode 100644 index 7755bdb..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264 \353\213\244\353\243\250\352\270\260 \352\270\260\353\263\270/yongchanson.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(s) { - let parseInts = parseInt(s); - if (s.length == 6 || s.length == 4) { - if (s == parseInts) { - return true; - } - } - - return false; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" deleted file mode 100644 index 05e03c8..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s) { - return Number(s); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" deleted file mode 100644 index cf9f240..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s) { - return parseInt(s); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" deleted file mode 100644 index cf9f240..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s) { - return parseInt(s); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" deleted file mode 100644 index 4512da1..0000000 --- "a/build/solutions/level-1/\353\254\270\354\236\220\354\227\264\354\235\204 \354\240\225\354\210\230\353\241\234 \353\260\224\352\276\270\352\270\260/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(s) { - return parseInt(s, 10); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index ce0a05b..0000000 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(price, money, count) { - let totalPrice = 0; - for(let i=1; i<=count; i++){ - totalPrice += i * price; - } - return money > totalPrice ? 0 : totalPrice-money; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index e664b87..0000000 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(price, money, count) { - let totalCost = 0; - for (let i = 1; i <= count; i++) totalCost += price * i; - return totalCost <= money ? 0 : totalCost - money; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" deleted file mode 100644 index be5b851..0000000 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(price, money, count) { - let sum_price = 0; // 놀이기구의 이용료의 합 - for (let i = 1; i <= count; i++) { - sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다. - } - if (sum_price <= money) { - return 0; - } - return sum_price - money; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 32eb65d..0000000 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(price, money, count) { - let sum = 0; - for(let i = 1; i <= count; i++) { - sum += (i * price) - } - - return sum < money ? 0 : sum - money; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" "b/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" deleted file mode 100644 index 172d18b..0000000 --- "a/build/solutions/level-1/\353\266\200\354\241\261\355\225\234 \352\270\210\354\225\241 \352\263\204\354\202\260\355\225\230\352\270\260/yongchanson.js" +++ /dev/null @@ -1,15 +0,0 @@ -function solution(price, money, count) { - var answer = 0; - let sum = price; - - for (i = 2; i <= count; i++) { - sum += price * i; - } - - if (sum <= money) { - answer = 0; - } else { - answer = sum - money; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" deleted file mode 100644 index cf88650..0000000 --- "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(seoul) { - return `김서방은 ${seoul.indexOf("Kim")}에 있다`; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index cf88650..0000000 --- "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(seoul) { - return `김서방은 ${seoul.indexOf("Kim")}에 있다`; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/jaewon1676.js" deleted file mode 100644 index d6f0924..0000000 --- "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(seoul) { - var answer = ''; - for (let i=0; i<1000; i++){ - if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다'; - } - return 1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" deleted file mode 100644 index 679dd91..0000000 --- "a/build/solutions/level-1/\354\204\234\354\232\270\354\227\220\354\204\234 \352\271\200\354\204\234\353\260\251 \354\260\276\352\270\260/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(seoul) { - return `김서방은 ${seoul.findIndex(v => v === "Kim")}에 있다`; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 5a4b412..0000000 --- "a/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(survey, choices) { - const points = [-3, -2, -1, 0, 1, 2, 3]; - const types = ['RT', 'CF', 'JM', 'AN']; - const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {}); - survey.forEach((key, i) => { - const point = points[choices[i] - 1]; - Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point); - }); - return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" deleted file mode 100644 index 15b41cf..0000000 --- "a/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/codisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(survey, choices) { - const points = [-3, -2, -1, 0, 1, 2, 3]; - const types = ['RT', 'CF', 'JM', 'AN']; - const pointBoard = survey.reduce((a, key, i) => { - if (types.includes(key)) { - a[key] = (a[key] || 0) + points[choices[i] - 1]; - return a; - } - const rKey = key[1] + key[0]; - a[rKey] = (a[rKey] || 0) - points[choices[i] - 1]; - return a; - }, {}); - return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" "b/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" deleted file mode 100644 index 6091d41..0000000 --- "a/build/solutions/level-1/\354\204\261\352\262\251 \354\234\240\355\230\225 \352\262\200\354\202\254\355\225\230\352\270\260/ssi02014.js" +++ /dev/null @@ -1,41 +0,0 @@ -function solution(survey, choices) { - const points = [3, 2, 1, 0, 1, 2, 3]; - const pointBoard = { - R: 0, - T: 0, - C: 0, - F: 0, - J: 0, - M: 0, - A: 0, - N: 0, - }; - let result = ""; - - // 카테고리 별 점수 추가 - for (let i = 0; i < survey.length; i++) { - const categories = survey[i]; - - if (choices[i] < 4) { - pointBoard[categories[0]] += points[choices[i] - 1]; - } else if (choices[i] > 4) { - pointBoard[categories[1]] += points[choices[i] - 1]; - } - } - - const pointBoardEntries = Object.entries(pointBoard); - - // 지표에 맞게 결과 값 도출 - for (let i = 0; i < pointBoardEntries.length; i += 2) { - const [curCategory, curValue] = pointBoardEntries[i]; - const [nextCategory, nextValue] = pointBoardEntries[i + 1]; - - if (curValue < nextValue) { - result += nextCategory; - } else { - result += curCategory; - } - } - - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" deleted file mode 100644 index a4c347e..0000000 --- "a/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,31 +0,0 @@ -// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수 -const getCombinations = function (arr, selectNumber) { - const results = []; - if (selectNumber === 1) return arr.map((el) => [el]); - arr.forEach((fixed, index, origin) => { - const rest = origin.slice(index + 1); - const combinations = getCombinations(rest, selectNumber - 1); - const attached = combinations.map((el) => [fixed, ...el]); - results.push(...attached); - }); - return results; -}; - -// num이 소수인지 여부를 반환하는 함수 -function isPrime(num) { - if (num === 1) return false; - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return true; -} - -function solution(nums) { - const combinationResult = getCombinations(nums, 3); - let answer = 0; - combinationResult.forEach((e) => { - const sum = e[0] + e[1] + e[2]; - if (isPrime(sum)) answer++; - }); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index e7be628..0000000 --- "a/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,21 +0,0 @@ -function solution(nums) { - let answer = 0; - const length = nums.length; - for (let i = 0; i < length; i++) { - for (let j = i + 1; j < length; j++) { - for (let k = j + 1; k < length; k++) { - const sum = nums[i] + nums[j] + nums[k]; - if (isPrime(sum)) answer += 1; - } - } - } - - return answer; -} - -function isPrime(num) { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return num >= 2; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" deleted file mode 100644 index 11a67bc..0000000 --- "a/build/solutions/level-1/\354\206\214\354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,26 +0,0 @@ -// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript - -function solution(nums) { - let len = nums.length, answer = 0; - - for (let i = 0; i < len - 2; i++) { - for (let j = i + 1; j < len - 1; j++) { - for (let k = j + 1; k < len; k++) { - if (isPrime(nums[i] + nums[j] + nums[k])) { - answer++; - } - } - } - } - return answer; -} - -const isPrime = (n) => { - for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회 - if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다. - return false; - } - } - return true; -} -// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" deleted file mode 100644 index cae5da1..0000000 --- "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,17 +0,0 @@ -// 소수인지 판별하는 함수 -function isPrime(x) { - for (let i = 2; i <= Math.sqrt(x); i++) { - if (x % i === 0) return false; - } - return true; -} -function solution(n) { - // 소수의 개수를 저장할 변수 - let answer = 0; - // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해 - for (let i = 2; i <= n; i++) { - // 소수이면 소수의 개수에 1 추가 - if (isPrime(i)) answer++; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index 518085e..0000000 --- "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,36 +0,0 @@ -function solution(numbers) { - let answer = 0; - const numArr = numbers.split(""); - const permutationAll = []; - for (let r = 1; r <= numbers.length; r++) { - const permutationR = Permutation(numArr, r).map((arr) => - parseInt(arr.join("")) - ); - for (let i = 0; i < permutationR.length; i++) - permutationAll.push(permutationR[i]); - } - const permutationSet = [...new Set(permutationAll)]; - for (const number of permutationSet) { - if (isPrime(number)) answer += 1; - } - return answer; -} - -function Permutation(arr, r) { - const result = []; - if (r === 1) return arr.map((num) => [num]); - arr.forEach((fixed, index, org) => { - const rest = [...org.slice(0, index), ...org.slice(index + 1)]; - const permutation = Permutation(rest, r - 1); - const attached = permutation.map((numbers) => [fixed, ...numbers]); - result.push(...attached); - }); - return result; -} - -function isPrime(num) { - for (let i = 2; i <= Math.sqrt(num); i++) { - if (num % i === 0) return false; - } - return num >= 2; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" deleted file mode 100644 index 2963004..0000000 --- "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(n) { - let arr = []; - - // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다. - for(let i=2; i<=n; i++) { - arr[i] = i; - } - for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다. - if (arr[i] === 0) continue; - - for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다. - arr[j] = 0; - } - } - - // filter를 이용해 0이아닌 수들의 개수를 return합니다. - return arr.filter(v => v!==0).length; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" deleted file mode 100644 index e6b2994..0000000 --- "a/build/solutions/level-1/\354\206\214\354\210\230 \354\260\276\352\270\260/prove-ability.js" +++ /dev/null @@ -1,19 +0,0 @@ -// 소수 판별 로직 -function isPrime(n) { - // n 제곱근 후 올림 - for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) { - if (n % i === 0) return false; - } - return true; -} - -function solution(n) { - let count = 0; - // 1부터 n까지 반복적으로 접근 - i - for(let i = 1; i <= n; i++) { - // i 가 소수인지 확인 후 count++ - if(isPrime(i)) count++; - } - - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" deleted file mode 100644 index 921f2be..0000000 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/chaerin-dev.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(n) { - // "수박"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환 - return '수박'.repeat(n).substr(0, n); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" deleted file mode 100644 index c7cc934..0000000 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - let answer = ''; - for (let i = 0; i < n; i++) { - answer += i % 2 === 0 ? '수' : '박'; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" deleted file mode 100644 index 1531e21..0000000 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/jaewon1676.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - let str = ''; - for (let i = 0; i < n; i++) { - // 삼항 연산자와 +로 문자열을 붙여주어 추가. - i % 2 == 0 ? (str = str + '수') : (str = str + '박'); - } - return str; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" deleted file mode 100644 index 282a92d..0000000 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/prove-ability.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(n) { - let answer = ''; - answer = '수박'.repeat(n / 2); - if (n % 2 !== 0) answer += '수'; - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" "b/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" deleted file mode 100644 index b43c4ba..0000000 --- "a/build/solutions/level-1/\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230\353\260\225\354\210\230?/yongchanson.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - return '수박'.repeat(n / 2) + '수'.repeat(n % 2); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" deleted file mode 100644 index ec4e990..0000000 --- "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/chaerin-dev.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(s) { - s = s - .replace(/zero/g, 0) - .replace(/one/g, 1) - .replace(/two/g, 2) - .replace(/three/g, 3) - .replace(/four/g, 4) - .replace(/five/g, 5) - .replace(/six/g, 6) - .replace(/seven/g, 7) - .replace(/eight/g, 8) - .replace(/nine/g, 9); - return parseInt(s); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" deleted file mode 100644 index 12fa684..0000000 --- "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/codeisneverodd.js" +++ /dev/null @@ -1,22 +0,0 @@ -function solution(s) { - var answer = 0; - let answerString = s; - const stringToNum = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - for (let i = 0; i < 10; i++) { - const regex = new RegExp(stringToNum[i], "g"); - answerString = answerString.replace(regex, i); - } - answer = Number(answerString); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" deleted file mode 100644 index 5e32adf..0000000 --- "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/jaewon1676.js" +++ /dev/null @@ -1,17 +0,0 @@ -function solution(s) { - let answer = 0; - - s = s.replace(/zero/g, 0); - s = s.replace(/one/g, 1); - s = s.replace(/two/g, 2); - s = s.replace(/three/g, 3); - s = s.replace(/four/g, 4); - s = s.replace(/five/g, 5); - s = s.replace(/six/g, 6); - s = s.replace(/seven/g, 7); - s = s.replace(/eight/g, 8); - s = s.replace(/nine/g, 9); - - answer = Number(s); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" deleted file mode 100644 index 55dadb9..0000000 --- "a/build/solutions/level-1/\354\210\253\354\236\220 \353\254\270\354\236\220\354\227\264\352\263\274 \354\230\201\353\213\250\354\226\264/yongchanson.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(s) { - let en = [ - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - ]; - - for (let i = 0; i < s.length * 2; i++) { - let p = i % en.length; - s = s.replace(en[p], p); - } - return Number(s); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" "b/build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" deleted file mode 100644 index aa5d8be..0000000 --- "a/build/solutions/level-1/\354\210\253\354\236\220 \354\247\235\352\277\215/ssi02014.js" +++ /dev/null @@ -1,26 +0,0 @@ -/** - * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화 - * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 - * (테스트 케이스 11 ~ 15 100ms~200ms 차이) - */ -function solution(X, Y) { - const commons = []; - const obj = {}; - - for (const el of X) { - obj[el] = (obj[el] || 0) + 1; - } - - for (const el of Y) { - if (obj[el]) { - commons.push(el); - obj[el]--; - } - } - - commons.sort((a, b) => b - a); - - if (!commons.length) return "-1"; - else if (commons[0] === "0") return "0"; - return commons.join(""); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" deleted file mode 100644 index 4191a08..0000000 --- "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/chaerin-dev.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(s, n) { - let result = ""; - for (let i = 0; i < s.length; i++) { - if (s[i] === " ") result += " "; - else { - let charCode = s.charCodeAt(i); - // 원래 대문자였는데 - if (charCode <= 90) { - charCode += n; - // 변경 후 아스키코드값이 90보다 크다면 - if (charCode > 90) charCode -= 26; - } - // 원래 소문자였는데 - else { - charCode += n; - // 변경 후 아스키코드값이 122보다 크다면 - if (charCode > 122) charCode -= 26; - } - result += String.fromCharCode(charCode); - } - } - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" deleted file mode 100644 index a66e7a5..0000000 --- "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/codeisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(s, n) { - return s - .split("") - .map((element) => { - if (element === " ") return " "; - const code = element.charCodeAt(0); - if ((code + n > 90 && code <= 90) || code + n > 122) { - return String.fromCharCode(code + n - 26); - } else { - return String.fromCharCode(code + n); - } - }) - .join(""); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" deleted file mode 100644 index 813c969..0000000 --- "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/jaewon1676.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(s, n) { - return s - .split("") - .map((el) => { - if (el == " ") return el; - let tmp = el.charCodeAt(); - return el.toLowerCase().charCodeAt() + n > 122 - ? String.fromCharCode(tmp + n - 26) - : String.fromCharCode(tmp + n); - }) - .join(""); -} - -/* 문자열 -> 아스키코드 : s.charCodeAt() -아스키코드 -> 문자열 : String.fromCharCode() -풀이과정 -1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다. -2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. - 대문자 아스키코드는 65가 A, 90이 Z이다. - 소문자 아스키코드는 97이 a, 122가 z이다. -3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고 - 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다. -*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" "b/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" deleted file mode 100644 index 98462df..0000000 --- "a/build/solutions/level-1/\354\213\234\354\240\200 \354\225\224\355\230\270/prove-ability.js" +++ /dev/null @@ -1,17 +0,0 @@ -function solution(s, n) { - var answer = ''; - for(let i = 0, len = s.length; i < len; i++) { - if(s[i] === " ") { - answer += " "; - continue; - } - let index = s[i].charCodeAt(); - // 65 - 90 - // 97 - 122 - if(index <= 90 && index + n > 90) index -= 26; - else if (index + n > 122) index -= 26; - - answer += String.fromCharCode(index + n) - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" deleted file mode 100644 index 0af228f..0000000 --- "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,26 +0,0 @@ -function solution(id_list, report, k) { - // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리 - let set = new Set(report); - report = Array.from(set); - - // 1. report를 2차원배열로 변형 - // 2. 각 유저가 신고당한 횟수 cnt에 저장 - // 3. 각 유저를 신고한 유저 who에 저장 - let cnt = Array.from({ length: id_list.length }, i => 0); - let who = Array.from({ length: id_list.length }, i => []); - for (let i = 0; i < report.length; i++) { - report[i] = report[i].split(' '); - cnt[id_list.indexOf(report[i][1])]++; - who[id_list.indexOf(report[i][1])].push(report[i][0]); - } - - // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장 - let mail = Array.from({ length: id_list.length }, i => 0); - for (let i = 0; i < cnt.length; i++) { - if (cnt[i] < k) continue; - for (let j = 0; j < who[i].length; j++) { - mail[id_list.indexOf(who[i][j])]++; - } - } - return mail; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" deleted file mode 100644 index 8b63de7..0000000 --- "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,31 +0,0 @@ -function solution(id_list, report, k) { - //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장, - //각 id를 신고한 사람 array를 reportedBy에 저장, - //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장 - //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장. - const reportSet = new Set(report); - const reportedCount = {}; //{"id": Number(count)} - const reportedBy = {}; //{"id":[]} - const mailCount = {}; //{"id":Number(count)} - - id_list.forEach(element => { - reportedCount[element] = 0; - mailCount[element] = 0; - reportedBy[element] = []; - }); - - reportSet.forEach(element => { - const [id, reported] = element.split(' '); - reportedCount[reported] += 1; - reportedBy[reported].push(id); - }); - - for (const reportedId in reportedCount) { - if (reportedCount[reportedId] >= k) { - reportedBy[reportedId].forEach(reporter => { - mailCount[reporter] += 1; - }); - } - } - return id_list.map(id => mailCount[id]); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" deleted file mode 100644 index ba53517..0000000 --- "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,29 +0,0 @@ -function solution(id_list, report, k) { - let answer = new Array(id_list.length).fill(0); - let report_list = {}; // 신고당한 ID - - // key, value 형식의 report_list 객체를 만든다. - id_list.map(user => { - report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체 - }); - // report_list { muzi: [], frodo: [], apeach: [], neo: [] } - - // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다. - report.map(user => { - const [user_id, report_id] = user.split(' '); - // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다. - if (!report_list[report_id].includes(user_id)) { - report_list[report_id].push(user_id); - // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다. - } - }); - for (const key in report_list) { - // report_list의 index 순회 - if (report_list[key].length >= k) { - report_list[key].map(user => { - answer[id_list.indexOf(user)] += 1; - }); - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" deleted file mode 100644 index a57bed4..0000000 --- "a/build/solutions/level-1/\354\213\240\352\263\240 \352\262\260\352\263\274 \353\260\233\352\270\260/prove-ability.js" +++ /dev/null @@ -1,27 +0,0 @@ -function solution(id_list, report, k) { - // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기 - var answer = Array.from({ length: id_list.length }).fill(0); - // 신고 내용 객체 초기화 - 신고된 내용 정리 - const reportObj = {}; - // 신고건 반복문으로 하나씩 접근 - for (let i = 0, len = report.length; i < len; i++) { - const [userId, reportUserId] = report[i].split(' '); - // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가 - if (reportObj[reportUserId]) { - if (!reportObj[reportUserId].includes(userId)) { - reportObj[reportUserId] = [...reportObj[reportUserId], userId]; - } - // 신고 내용 객체에 신고당한 사람이 없다면 추가 - } else reportObj[reportUserId] = [userId]; - } - // 만들어진 신고 내용 객체로 반복적으로 접근 - for (const item of Object.values(reportObj) - .filter(v => v.length >= k) - .flatMap(v => v)) { - // 인덱스로 접근해 메일 카운트 증가 - const index = id_list.findIndex(v => v === item); - answer[index]++; - } - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" deleted file mode 100644 index 66c2dff..0000000 --- "a/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/chaerin-dev.js" +++ /dev/null @@ -1,29 +0,0 @@ -function solution(new_id) { - // 1단계: 모든 대문자를 소문자로 - new_id = new_id.toLowerCase(); - - // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거 - new_id = new_id.replace(/[^\w\-\.]/g, ''); - - // 3단계: 연속되는 마침표는 마침표 하나로 - new_id = new_id.replace(/\.{2,}/g, '.'); - - // 4단계: 처음이나 끝에 마침표가 있으면 제거 - new_id = new_id.replace(/^\.|\.$/, ''); - - // 5단계: new_id가 빈 문자열이면 "a" 대입 - if (new_id.length === 0) new_id = 'a'; - - // 6단계: new_id의 길이가 16자 이상이면, - // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거 - // 제거 후 끝에 마침표가 있으면 제거 - if (new_id.length >= 16) new_id = new_id.slice(0, 15); - new_id = new_id.replace(/\.$/, ''); - - // 7단계: new_id의 길이가 2자 이하이면, - // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임 - let len = new_id.length; - if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len); - - return new_id; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" deleted file mode 100644 index e972944..0000000 --- "a/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/codeisneverodd.js" +++ /dev/null @@ -1,15 +0,0 @@ -function solution(new_id) { - let answer = new_id - .toLowerCase() //step 1 - .replace(/[^0-9a-z._-]/g, '') // step 2 - .replace(/\.+/g, '.') //step 3 - .replace(/^\.|\.$/g, '') //step 4 - .replace(/^$/, 'a') //step 5 - .slice(0, 15) - .replace(/\.$/, ''); //step 6 - // step7 - if (answer.length === 1) answer = answer[0].repeat(3); - if (answer.length === 2) answer = answer + answer[1]; - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" "b/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" deleted file mode 100644 index 8bcf8f4..0000000 --- "a/build/solutions/level-1/\354\213\240\352\267\234 \354\225\204\354\235\264\353\224\224 \354\266\224\354\262\234/jaewon1676.js" +++ /dev/null @@ -1,30 +0,0 @@ -function solution(new_id) { - // 1 소문자로 치환 - let answer = new_id - .toLowerCase() - - // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거. - .replace(/[^a-z0-9-_.]/gi, '') - - // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환 - .replace(/[.]{2,}/gi, '.') - - // 4 마침표(.)가 처음이나 끝에 위치하면 제거 - .replace(/^[.]|[.]$/gi, ''); - - // 5 빈 문자열이면 a 대입 - if (answer === '') answer = 'a'; - - // 6 length > 15이면 그 뒤의 문자들은 제거 - if (answer.length > 15) { - answer = answer.substring(0, 15); - // 마침표(.)가 끝에 위치하면 마침표(.)제거 - answer = answer.replace(/[.]$/gi, ''); - } - - // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임 - while (answer.length < 3) { - answer += answer[answer.length - 1]; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" deleted file mode 100644 index 7ebe199..0000000 --- "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/codeisneverodd.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(N, stages) { - var answer = []; - let failRate = new Array(N + 2).fill(0); - let playerChallenging = new Array(N + 2).fill(0); - let playerReached = new Array(N + 2).fill(0); - - for (const stage of stages) { - for (let i = 1; i <= stage; i++) playerReached[i] += 1; - playerChallenging[stage] += 1; - } - for (let i = 1; i <= N + 1; i++) - failRate[i] = - playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i]; - const rateNIndex = failRate - .slice(1, N + 1) - .map((rate, stage) => [rate, stage + 1]); - const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]); - answer = sortedRate.map((stage) => stage[1]); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" "b/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" deleted file mode 100644 index 39c6e38..0000000 --- "a/build/solutions/level-1/\354\213\244\355\214\250\354\234\250/jaewon1676.js" +++ /dev/null @@ -1,40 +0,0 @@ -function solution(N, stages) { - let map = Array.from(Array(N), () => Array(2).fill(0)); - let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수 - let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율 - let count = 0; - - stages.sort(function (a, b) { - return a - b; - }); // 난이도 오름차순 정렬 - for (let i = 1; i <= N; i++) { - while (1) { - // i 스테이지의 실패율 계산 - if (stages[0] == i) { - answer[i - 1] += 1; - count += 1; - stages.shift(); - } else break; - } - rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산 - - count = 0; - - map[i - 1][0] = i; - map[i - 1][1] = rate[i - 1]; - } - map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬 - let stack = []; // 답 - for (let i = 0; i < map.length; i++) { - stack.push(map[i][0]); - } - - return stack; -} - -/* 풀이 과정 -1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다. -2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다. -3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서. -4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다. -*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" deleted file mode 100644 index 700a96c..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/codeisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(left, right) { - var answer = 0; - for (let num = left; num <= right; num++) { - divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num); - } - return answer; -} - -const divisorCounter = (num) => { - let count = 0; - const sqrt = Math.sqrt(num); - for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1; - return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2; -}; \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" deleted file mode 100644 index 9f654e9..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/jaewon1676.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(left, right) { - var answer = 0; - - for (left; left <= right; left++) { - // left의 제곱근이 정수면 약수의 개수는 홀수 - if (Number.isInteger(Math.sqrt(left))) { - answer -= left; - } else { - answer += left; - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" deleted file mode 100644 index dae01cf..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \352\260\234\354\210\230\354\231\200 \353\215\247\354\205\210/prove-bility.js" +++ /dev/null @@ -1,17 +0,0 @@ -function getDivisorCount(i) { - let count = 0; - for(let j = 1; j <= i; j++) { - if(i % j === 0) count++; - } - return count; -} - -function solution(left, right) { - let answer = 0; - for(let i = left; i <= right; i++) { - let count = getDivisorCount(i); - if(count % 2 === 0) answer += i; - else answer -= i; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" deleted file mode 100644 index 9c78b96..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/chaerin-dev.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(n) { - let result = 0; - let sqrtN = Math.sqrt(n); - // 효율성을 위해 1부터 n의 제곱근-1까지만 순회 - for (let i = 1; i < sqrtN; i++) { - if (n % i === 0) result += i + n / i; - } - // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌 - if (Number.isInteger(sqrtN)) result += sqrtN; - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" deleted file mode 100644 index 2374b31..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - let answer = 0; - for (let divisor = 1; divisor <= n; divisor++) { - if (n % divisor === 0) answer += divisor; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" deleted file mode 100644 index 5df213c..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/jaewon1676.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(n) { - var answer = 0; - for (let i = 1; i <= n; i++) { - if (n % i == 0) { - // n으로 i를 나눴을 때, 나머지가 0이면 약수이다. - answer += i; - } - } - return answer; -} - -// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다. -// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다. -// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" deleted file mode 100644 index 0ffdd07..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/prove-ability.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - let answer = 0; - for(let i = 1; i <= n; i++) { - if(n % i === 0) answer += i; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" "b/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" deleted file mode 100644 index 58221a0..0000000 --- "a/build/solutions/level-1/\354\225\275\354\210\230\354\235\230 \355\225\251/yongchanson.js" +++ /dev/null @@ -1,17 +0,0 @@ -function solution(n) { - var answer = 0; - let i; - for (i = 1; i <= Math.sqrt(n); i++) { - if (n % i == 0) { - if (i * i == n) { - //i의 제곱이 n인경우 처리 - answer += i; - } else { - answer += i; - answer += n / i; - } - } - } - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index f935d8f..0000000 --- "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(numbers) { - let answer = 0; - for (let i = 0; i <= 9; i++) { - if (!numbers.includes(i)) answer += i; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 544348b..0000000 --- "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(numbers) { - var answer = 0; - for (let i = 0; i < 10; i++) { - answer += numbers.includes(i) ? 0 : i; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 34b9d5c..0000000 --- "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(numbers) { - var answer = 0; - - for (let i = 0; i < 10; i++) { - if (!numbers.includes(i)) answer += i; - } - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" deleted file mode 100644 index 1760a53..0000000 --- "a/build/solutions/level-1/\354\227\206\353\212\224 \354\210\253\354\236\220 \353\215\224\355\225\230\352\270\260/yongchanson.js" +++ /dev/null @@ -1,22 +0,0 @@ -function solution(numbers) { - var answer = -1; - - let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; - let arr_sum = 0; - let numbers_sum = 0; - - for (i = 0; i < arr.length / 2; i++) { - if (arr[i] == arr[arr.length - 1 - i]) { - arr_sum += arr[i]; - } else { - arr_sum += arr[i] + arr[arr.length - 1 - i]; - } - } - - for (i = 0; i < numbers.length; i++) { - numbers_sum += numbers[i]; - } - - answer = arr_sum - numbers_sum; - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" "b/build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" deleted file mode 100644 index 80810c9..0000000 --- "a/build/solutions/level-1/\354\230\210\354\202\260/codeisneverodd.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(d, budget) { - let answer = 0; - d.sort((a, b) => a - b); - for (const department of d) { - if (budget < department) break; - answer += 1; - budget -= department; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" "b/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" deleted file mode 100644 index 5216476..0000000 --- "a/build/solutions/level-1/\354\230\210\354\202\260/jaewon1676.js" +++ /dev/null @@ -1,15 +0,0 @@ -function solution(d, budget) { - let count = 0; // 최대 물품 지원 할 수 있는 부서 수 - d.sort((a, b) => a - b) // 오름차순 정렬 - for (let i=0; i a - b); - for(let i = 0, len = d.length; i < len; i++) { - // 작은 수 부터 하나씩 더해준다 - sum += d[i]; - // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환 - if(sum > budget) return count; - count++; - } - - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" deleted file mode 100644 index 2a4d3e5..0000000 --- "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/chaerin-dev.js" +++ /dev/null @@ -1,17 +0,0 @@ -function solution(participant, completion) { - var answer = ""; - // 두 배열을 정렬한다! - participant.sort(); - completion.sort(); - // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!! - // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로 - // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만 - // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음! - for (let i = 0; i < participant.length; i++) { - if (participant[i] != completion[i]) { - answer = participant[i]; - break; - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" deleted file mode 100644 index ef93b52..0000000 --- "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(participant, completion) { - participant = participant.sort(); - completion = completion.sort(); - for (let i = 0; i < completion.length; i++) { - if (participant[i] !== completion[i]) return participant[i]; - } - return participant[participant.length - 1]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" deleted file mode 100644 index 7b69f32..0000000 --- "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/hyosung.js" +++ /dev/null @@ -1,31 +0,0 @@ -function solution(participant, completion) { - let answer = ""; - // 2개 이상을 가진 특정값의 갯수 기록용 변수 - let max = 0; - // 반복문 내부에서 set.has 를 사용하기 위해 Set 선언 (처음에는 Array.findIndex 를 사용) - const set = new Set([...completion]); - // 반복문 최적화 - 반복되던 연산 제거 (값 비교, length) - const length = participant.length; - for (let i = length; i--; ) { - // 완주자 명단에 없다면 완주하지 못한 참가자 이므로 바로 종료 - if (!set.has(participant[i])) { - answer = participant[i]; - break; - } - // 배열안에 특정값 갯수 확인 - let count = participant.reduce( - (a, v) => (v === participant[i] ? a + 1 : a), - 0 - ); - // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면 - // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다 - if (count > 1 && max < count) { - answer = participant[i]; - // 조건에 맞는 동명이인 수 저장 - max = count; - } - } - return answer; -} - -//완벽한 정답이 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" deleted file mode 100644 index 15d3e45..0000000 --- "a/build/solutions/level-1/\354\231\204\354\243\274\355\225\230\354\247\200 \353\252\273\355\225\234 \354\204\240\354\210\230/jaewon1676.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(participant, completion) { - var answer = ""; - for (let i = 0; i < participant.length; i++) { - for (let j = 0; j < completion.length; j++) { - if (participant[i] === completion[j]) { - console.log(participant, completion); - participant.splice(i, 1); - completion.splice(j, 1); - i--; - j--; - console.log(participant, completion); - break; - } - } - } - - return participant[0]; -} - -//완벽한 정답이 아닙니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index 204367b..0000000 --- "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(absolutes, signs) { - // 연산 결과를 저장할 변수 - let result = 0; - // signs의 각 요소에 대해 - signs.forEach((e, i) => { - // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌 - if (e) result += absolutes[i]; - // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌 - else result -= absolutes[i]; - }); - // result 반환 - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" deleted file mode 100644 index cd1350e..0000000 --- "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverod.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(absolutes, signs) { - var answer = 0; - for (let i = 0; i < absolutes.length; i++) { - answer += signs[i] ? absolutes[i] : -1 * absolutes[i]; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index cd252f6..0000000 --- "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(absolutes, signs) { - return absolutes.reduce( - (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1), - 0 - ); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" deleted file mode 100644 index 5a16408..0000000 --- "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(absolutes, signs) { - var answer = 0; - for (var i = 0; i < absolutes.length; i++) { - if (signs[i] === false) { - answer = answer - absolutes[i]; - } else { - answer = answer + absolutes[i]; - } - } - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 70d2da3..0000000 --- "a/build/solutions/level-1/\354\235\214\354\226\221 \353\215\224\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(absolutes, signs) { - let answer = 0; - absolutes.forEach((absolute, i) => { - if(!signs[i]) absolute *= -1; - answer += absolute; - }) - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" deleted file mode 100644 index 8627346..0000000 --- "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,17 +0,0 @@ -// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..! -function solution(s) { - let result = ""; - let flag = true; - for (let i = 0; i < s.length; i++) { - if (s[i] === " ") { - flag = false; - result += s[i]; - } else if (flag) { - result += s[i].toUpperCase(); - } else { - result += s[i].toLowerCase(); - } - flag = !flag; - } - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index d14e7f5..0000000 --- "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,15 +0,0 @@ -function solution(s) { - return s - .split(" ") - .map((word) => - word - .split("") - .map((char, index) => - index % 2 === 0 - ? word[index].toUpperCase() - : word[index].toLowerCase() - ) - .join("") - ) - .join(" "); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" deleted file mode 100644 index 0c9bf3b..0000000 --- "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,33 +0,0 @@ -function solution(s) { - return s - .split(" ") - .map((el) => - el - .split("") - .map((el, index) => - index % 2 == 0 ? el.toUpperCase() : el.toLowerCase() - ) - .join("") - ) - .join(" "); -} - -/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ] - -.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 -[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]] - -.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()) -//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다! -//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다. -[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]] - -.join('') 작은 배열들을 합쳐줍니다. -['TrY', 'HeLlO', 'WoRlD'] - -.join(' ') 큰 배열들을 합쳐줍니다. -"TrY HeLlO WoRlD" - -대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 -문자열을 연습하는데 좋은 문제입니다. -*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" deleted file mode 100644 index 2448e65..0000000 --- "a/build/solutions/level-1/\354\235\264\354\203\201\355\225\234 \353\254\270\354\236\220 \353\247\214\353\223\244\352\270\260/prove-ability.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(s) { - let answer = ''; - s.split(" ").forEach((word) => { - for(let i = 0, len = word.length; i < len; i++) { - if(i % 2 === 0) answer+=word[i].toUpperCase(); - else answer+=word[i].toLowerCase(); - } - answer += " "; - }) - answer = answer.slice(0, answer.length - 1) - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index 598dac3..0000000 --- "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - let result = 0; - while (n > 0) { - result += n % 10; - n = Math.floor(n / 10); - } - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index dc043b8..0000000 --- "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - return n - .toString() - .split("") - .map((x) => parseInt(x)) - .reduce((acc, curr) => acc + curr, 0); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 3db5be8..0000000 --- "a/build/solutions/level-1/\354\236\220\353\246\277\354\210\230 \353\215\224\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(n) { - var answer = 0; - n.toString() - .split("") - .forEach((v) => { - answer += parseInt(v); - }); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" deleted file mode 100644 index 60db10a..0000000 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환 - return String(n) - .split("") - .reverse() - .map((item) => parseInt(item)); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index 75c39cb..0000000 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - return n - .toString() - .split("") - .reverse() - .map((x) => parseInt(x)); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" deleted file mode 100644 index aac049c..0000000 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(n) { - return (n = n - .toString() - .split("") - .reverse() - .map((o) => (o = parseInt(o)))); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" deleted file mode 100644 index 9af9665..0000000 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/prove-ability.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(n) { - // 1. 문자열 변환 - // 2. 배열로 변환 - // 3. 배열 반전 - // 4. 정수로 변환 - return n - .toString() - .split("") - .reverse() - .map((v) => parseInt(v)); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" deleted file mode 100644 index e6ef74d..0000000 --- "a/build/solutions/level-1/\354\236\220\354\227\260\354\210\230 \353\222\244\354\247\221\354\226\264 \353\260\260\354\227\264\353\241\234 \353\247\214\353\223\244\352\270\260/yongchanson.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(n) { - let answer = []; - let string = n.toString(); - for (let i = string.length - 1; i >= 0; i--) { - let slice = string.substr(i, 1) * 1; - answer.push(slice); - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index 29c4f72..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - // 정수 -> 문자열 -> 배열 - let arrN = String(n).split(""); - // 배열 내림차순 정렬 - arrN.sort((a, b) => b - a); - // 배열 -> 문자열 -> 정수 - return parseInt(arrN.join("")); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index c94889e..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(n) { - return parseInt( - n - .toString() - .split("") - .sort((a, b) => b - a) - .join("") - ); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 312f90c..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \353\202\264\353\246\274\354\260\250\354\210\234\354\234\274\353\241\234 \353\260\260\354\271\230\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - return parseInt(n.toString().split("").sort((a, b) => b - a).join(""), 10); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" deleted file mode 100644 index ed91e46..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/chaerin-dev.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(n) { - // n의 제곱근값을 x에 저장 - let x = Math.sqrt(n); - // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환 - return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" deleted file mode 100644 index dfb7cd9..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(n) { - return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" deleted file mode 100644 index c0b318b..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/jaewon1676.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(n) { - let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인 - if (s ** 2 === n) return ((s+1) ** 2) - - return -1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" deleted file mode 100644 index 35d3ae4..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/prove-ability.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - // n의 제곱근을 x 초기화 - const x = Math.sqrt(n); - // 양의 정수라면 x + 1 제곱 반환 - if(Number.isInteger(x)) return Math.pow(x + 1, 2) - // 아니라면 -1 반환 - return -1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" "b/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" deleted file mode 100644 index 16074f7..0000000 --- "a/build/solutions/level-1/\354\240\225\354\210\230 \354\240\234\352\263\261\352\267\274 \355\214\220\353\263\204/yongchanson.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(n) { - const sqrt = Math.sqrt(n); - //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수 - return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index d03d5d4..0000000 --- "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(arr) { - // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제 - arr.splice(arr.indexOf(Math.min(...arr)), 1); - // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환 - return arr.length ? arr : [-1]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 9e2e89c..0000000 --- "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(arr) { - const index = arr.indexOf(Math.min(...arr)); - arr.splice(index, 1); - return arr.length === 0 ? [-1] : arr; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" deleted file mode 100644 index b8441ae..0000000 --- "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(arr) { - arr.splice(arr.indexOf(Math.min(...arr)), 1); - if (arr.length < 1) return [-1]; - return arr; -} - -/* 풀이과정 arr [4,3,2,1] 일경우 -Math.min(...arr)은 1 -arr.indexOf(1), 1이 있는 index가 3이므로 3 반환. -arr.splice(3, 1) arr의 3번째 index만 제거 해준다. -arr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 75583f9..0000000 --- "a/build/solutions/level-1/\354\240\234\354\235\274 \354\236\221\354\235\200 \354\210\230 \354\240\234\352\261\260\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(arr) { - // 최솟값 찾기 - const min = Math.min(...arr); - // arr 중 min 과 같은 요소의 인덱스 제거 - arr.splice( - arr.findIndex((num) => num === min), - 1 - ); - // 만약 arr 가 비어있다면 [-1] 반환 - if (arr.length === 0) return [-1]; - return arr; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" deleted file mode 100644 index f2b2e5a..0000000 --- "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,17 +0,0 @@ -process.stdin.setEncoding("utf8"); -process.stdin.on("data", (data) => { - const n = data.split(" "); - const a = Number(n[0]), - b = Number(n[1]); - // 정답을 저장할 문자열 answer - answer = ""; - // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복 - for (let i = 0; i < b; i++) { - // 가로 길이만큼 문자열에 별 더해주기 - for (let j = 0; j < a; j++) answer += "*"; - // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기 - answer += "\n"; - } - // 정답 출력 - console.log(answer); -}); \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" deleted file mode 100644 index db280cb..0000000 --- "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/prove-ability.js" +++ /dev/null @@ -1,18 +0,0 @@ -process.stdin.setEncoding('utf8'); -process.stdin.on('data', data => { - const nums = data.split(" "); - const n = Number(nums[0]), m = Number(nums[1]); - - let result = ""; - // 2차원으로 접근 - // 세로 길이만큼 반복 - for(let i = 0; i < m; i++) { - // 가로 길이만큼 별 더하기 - for(let j = 0; j < n; j++) { - result += "*"; - } - // 가로가 끝나면 줄내림 - result += "\n"; - } - console.log(result) -}); \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" "b/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" deleted file mode 100644 index 99e2263..0000000 --- "a/build/solutions/level-1/\354\247\201\354\202\254\352\260\201\355\230\225 \353\263\204\354\260\215\352\270\260/yongchanson.js" +++ /dev/null @@ -1,12 +0,0 @@ -process.stdin.setEncoding("utf8"); -process.stdin.on("data", (data) => { - const n = data.split(" "); - const a = Number(n[0]), - b = Number(n[1]); - console.log(("*".repeat(a) + `\n`).repeat(b)); -}); -/* -<풀이과정> -repeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count); -'*'.repeat(a) : *를 a만큼 반복한다. -*/ \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" deleted file mode 100644 index 4132441..0000000 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/chaerin-dev.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num) { - return num % 2 == 0 ? "Even" : "Odd"; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" deleted file mode 100644 index ca5fec1..0000000 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num) { - return num % 2 === 0 ? "Even" : "Odd"; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" deleted file mode 100644 index 77b641d..0000000 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/jaewon1676.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(num) { - let answer; - num % 2 == 0 ? (answer = "Even") : (answer = "Odd"); - // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환. - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" deleted file mode 100644 index ca5fec1..0000000 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num) { - return num % 2 === 0 ? "Even" : "Odd"; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" deleted file mode 100644 index 1aa6b8c..0000000 --- "a/build/solutions/level-1/\354\247\235\354\210\230\354\231\200 \355\231\200\354\210\230/yongchanson.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(num) { - return num % 2 ? "Odd" : "Even"; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" deleted file mode 100644 index d9d25e8..0000000 --- "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/chaerin-dev.js" +++ /dev/null @@ -1,35 +0,0 @@ -function solution(n, lost, reserve) { - // 학생들의 체육복 개수를 저장할 배열 students - // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정 - // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음 - const students = Array.from({ length: n + 1 }, () => 1); - - // 체육복 분실/여분 정보 students 배열에 반영 - lost.forEach((lostStudent) => students[lostStudent]--); - reserve.forEach((reserveStudent) => students[reserveStudent]++); - - // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt - let cnt = 0; - students.forEach((student, i) => { - // 현재 인덱스의 학생이 체육복이 없다면 - if (student === 0) { - // 바로 앞 학생이 체육복 여분이 있다면 - if (students[i - 1] === 2) { - // 바로 앞 학생에게 체육복 빌리기 - students[i - 1]--; - student++; - } - // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면 - else if (students[i + 1] === 2) { - // 바로 뒤 학생에게 체육복 빌리기 - students[i + 1]--; - student++; - } - // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음 - else cnt++; - } - }); - - // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수 - return n - cnt; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" deleted file mode 100644 index 14bfff4..0000000 --- "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/codeisneverodd.js" +++ /dev/null @@ -1,24 +0,0 @@ -function solution(n, lost, reserve) { - let answer = 0; - let studentClothes = new Array(n + 2).fill(1); - for (const student of reserve) studentClothes[student] += 1; - for (const student of lost) studentClothes[student] -= 1; - for (let i = 1; i < n + 1; i++) { - if (studentClothes[i] === 0) { - if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) { - if (studentClothes[i - 1] === 2) { - studentClothes[i - 1] -= 1; - studentClothes[i] += 1; - } else { - studentClothes[i + 1] -= 1; - studentClothes[i] += 1; - } - } - } - } - for (const student of studentClothes) { - answer += student > 0 ? 1 : 0; - } - answer -= 2; - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" deleted file mode 100644 index 0060564..0000000 --- "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/jaewon1676.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(n, lost, reserve) { - let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다 - let cnt = 0; - for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복 - answer[reserve[i]-1] += 1 - } - for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1 - answer[lost[i]-1] -= 1 - } - for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다. - if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){ - answer[i] = 1 - answer[i+1] = 1 - } - } - for(let i = 0; i < answer.length; i++){ - (answer[i] >= 1 ? cnt += 1 : null) - } - return cnt - } - //그리디 - // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다. - // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다. \ No newline at end of file diff --git "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" "b/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" deleted file mode 100644 index ed959c9..0000000 --- "a/build/solutions/level-1/\354\262\264\354\234\241\353\263\265/prove-ability.js" +++ /dev/null @@ -1,36 +0,0 @@ -function solution(n, lost, reserve) { - // students 초기화 - 학생들은 체육복 개수 1로 초기화 - let students = Array.from({ length: n }).fill(1); - - // 읽어버린 학생 개수 반영 - lost.forEach((target) => { - students[target - 1]--; - }); - - // 여별 체육복 개수 반영 - reserve.forEach((target) => { - students[target - 1]++; - }); - - // 학생들 순차적으로 접근 - for (let i = 0, len = students.length; i < len; i++) { - // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue - if (students[i] === 0 || students[i] === 1) continue; - // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 - if (i !== 0 && students[i - 1] === 0) { - // 이전 학생 증가 - students[i - 1]++; - // 자신은 대여해줬으니 감소 - students[i]--; - } - // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면 - if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) { - // 다음 학생 증가 - students[i + 1]++; - // 자신은 대여해줬으니 감소 - students[i]--; - } - } - // 체육복 1개 이상을 가진 학생들의 수 반환 - return students.filter((v) => v >= 1).length; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" deleted file mode 100644 index 428e3d2..0000000 --- "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/chaerin-dev.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n, m) { - // 최대공약수 구하기 - let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m)); - // 최소공배수 구하기 - let lcm = (n, m) => (n * m) / gcd(n, m); - // 결과 출력 - return [gcd(n, m), lcm(n, m)]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" deleted file mode 100644 index 16aebe1..0000000 --- "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(n, m) { - const gcd = greatestCommonDivisor(n, m); - return [gcd, (n * m) / gcd]; -} - -const greatestCommonDivisor = (a, b) => { - if (b === 0) return a; - else return greatestCommonDivisor(b, a % b); -}; \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" "b/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" deleted file mode 100644 index aa92161..0000000 --- "a/build/solutions/level-1/\354\265\234\353\214\200\352\263\265\354\225\275\354\210\230\354\231\200 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/yongchanson.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(a, b) { - let gcd = 0; - for (let i = 1; i <= Math.min(a, b); i++) { - if ((a % i) + (b % i) === 0) { - gcd = i; - } - } - return [gcd, (a / gcd) * b]; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" deleted file mode 100644 index 0ab3720..0000000 --- "a/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(sizes) { - for (let card of sizes) { - if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]]; - } - - const maxWidth = Math.max(...sizes.map(card => card[0])); - const maxHeight = Math.max(...sizes.map(card => card[1])); - return maxWidth * maxHeight; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" "b/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" deleted file mode 100644 index 8d6d146..0000000 --- "a/build/solutions/level-1/\354\265\234\354\206\214\354\247\201\354\202\254\352\260\201\355\230\225/prove-ability.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(sizes) { - // 가로, 세로 중 큰 값을 가로 길이로 변경(스압) - sizes.forEach(([width, height], index) => { - if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]]; - }); - - // 가로, 세로 각각 큰 값 추출 - const widthMax = Math.max(...sizes.map(v => v[0])); - const widthHeight = Math.max(...sizes.map(v => v[1])); - - return widthMax * widthHeight; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" deleted file mode 100644 index ea83378..0000000 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/chaerin-dev.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(num) { - // 작업을 반복한 횟수를 저장할 변수 - let cnt = 0; - // num이 1이 되면 반복 종료 - while (num > 1) { - // 작업을 500번 반복해도 1이 되지 않으면 -1 반환 - if (cnt == 500) return -1; - // 작업 반복 횟수 증가 - cnt++; - // 입력된 수가 짝수이면 2로 나누기 - if (num % 2 == 0) num /= 2; - // 입력된 수가 홀수이면 3을 곱하고 1을 더하기 - else { - num *= 3; - num++; - } - } - // 작업을 반복한 횟수 반환 - return cnt; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" deleted file mode 100644 index db503a6..0000000 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(num) { - let answer = 0; - while (answer <= 500) { - if (num === 1) return answer; - num = num % 2 === 0 ? num / 2 : num * 3 + 1; - answer += 1; - } - return -1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" deleted file mode 100644 index 4db0d3a..0000000 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/jaewon1676.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(num) { - var answer = 0; - // num이 1이 아니고, answer이 500이 아니면 진행. - // 두 가지 조건중 하나라도 맞지 않으면 while문 종료. - while (num != 1 && answer != 500) { - //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다. - num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1); - answer++; - } - return num == 1 ? answer : -1; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" deleted file mode 100644 index 2c110fa..0000000 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/prove-ability.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(num) { - let count = 0; - - // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. - while (num !== 1) { - // 입력된 수가 짝수라면 2로 나눕니다. - if (num % 2 === 0) num /= 2; - // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. - else num = num * 3 + 1; - count++; - // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요 - if (count > 500) return -1; - } - - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" "b/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" deleted file mode 100644 index d263054..0000000 --- "a/build/solutions/level-1/\354\275\234\353\235\274\354\270\240 \354\266\224\354\270\241/yongchanson.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(num) { - let count = 0; - while (num !== 1) { - if (count++ === 500) return -1; - num = num % 2 ? num * 3 + 1 : num / 2; - } - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/chaerin-dev.js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/chaerin-dev.js" deleted file mode 100644 index a571e0b..0000000 --- "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/chaerin-dev.js" +++ /dev/null @@ -1,26 +0,0 @@ -function solution(board, moves) { - let n = board.length; - - // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경 - board = board.flat(); - let rotatedBoard = Array.from({ length: n }, (i) => []); - for (let i = 0; i < board.length; i++) { - if (board[i]) rotatedBoard[i % n].push(board[i]); - } - - // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기 - let stack = []; - let cnt = 0; - for (let move of moves) { - let doll = rotatedBoard[move - 1].shift(); - if (doll === undefined) continue; - if (stack[stack.length - 1] === doll) { - stack.pop(); - cnt += 2; - } else { - stack.push(doll); - } - } - - return cnt; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" deleted file mode 100644 index 58f0574..0000000 --- "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/codeisneverodd.js" +++ /dev/null @@ -1,22 +0,0 @@ -function solution(board, moves) { - let answer = 0; - const length = board.length - let basket = [] - moves.forEach(move => { - for (let i = 0; i < length; i++) { - const item = board[i][move - 1] - if (item !== 0) { - if (basket[basket.length - 1] !== item) { - basket.push(item) - } else { - basket.pop() - answer += 2 - } - board[i][move - 1] = 0 - break - } - } - }) - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" "b/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" deleted file mode 100644 index 3ae37b8..0000000 --- "a/build/solutions/level-1/\355\201\254\353\240\210\354\235\270 \354\235\270\355\230\225\353\275\221\352\270\260 \352\262\214\354\236\204/jaewon1676.js" +++ /dev/null @@ -1,29 +0,0 @@ -function solution(board, moves) { - var answer = 0; // 인형을 터뜨린 횟수 - let basket = []; // 바구니 - let crane = 0; // 크레인의 행의 위치 - for (let i = 0; i < moves.length; i++) { - crane = moves[i] - 1; // crane = 0 - for (let j = 0; j < board.length; j++) { - if (board[j][crane] == 0) - else if (board[j][crane] != 0) { - basket.push(board[j][crane]) - board[j][crane] = 0 - if (basket[basket.length - 1] == basket[basket.length - 2]) { - basket.pop(); - basket.pop(); - answer += 2; - } - break; - } - } - } - - return answer; -} - -/* 풀이 과정 -1. 입력받은 moves의 length만큼 for문을 돌린다. -2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다. -3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다. -4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */ \ No newline at end of file diff --git "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" deleted file mode 100644 index 82a2239..0000000 --- "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,61 +0,0 @@ -function solution(numbers, hand) { - // 키패드를 4행 3열의 이차원 배열이라고 생각 - - // leftRow, leftCol: 왼손의 현재 위치 - let [leftRow, leftCol] = [3, 0]; - // rightRow, rightCol: 오른손의 현재 위치 - let [rightRow, rightCol] = [3, 2]; - // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열 - let result = ''; - - // 눌러야할 각 번호가 - numbers.forEach(e => { - // 1/4/7이면 왼손으로 눌러야하므로 - if (e === 1 || e === 4 || e === 7) { - // 왼손의 위치 업데이트 - [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0]; - // result 문자열에 "L" 이어붙여줌 - result += 'L'; - } - - // 3/6/9이면 오른손으로 눌러야하므로 - else if (e === 3 || e === 6 || e === 9) { - // 오른손의 위치 업데이트 - [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2]; - // result 문자열에 "R" 이어붙여줌 - result += 'R'; - } - - // 2/5/8/0이면 - else { - // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌 - if (e === 0) e = 11; - - // leftRow, leftCol: 다음에 눌러야 할 번호의 위치 - let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1]; - // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리 - let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol); - // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리 - let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol); - - // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로 - if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) { - // 왼손의 위치 업데이트 - [leftRow, leftCol] = [nextRow, nextCol]; - // result 문자열에 "L" 이어붙여줌 - result += 'L'; - } - - // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로 - else { - // 오른손의 위치 업데이트 - [rightRow, rightCol] = [nextRow, nextCol]; - // reuslt 문자열에 "R" 이어붙여줌 - result += 'R'; - } - } - }); - - // result 문자열 반환 - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" deleted file mode 100644 index c366e17..0000000 --- "a/build/solutions/level-1/\355\202\244\355\214\250\353\223\234 \353\210\204\353\245\264\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,37 +0,0 @@ -function solution(numbers, hand) { - let leftNum = 10; - let rightNum = 12; - return numbers - .map(num => { - if (num === 0) { - num = 11; - } - if (num % 3 === 1) { - return leftTo(num); - } else if (num % 3 === 0) { - return rightTo(num); - } else { - const numLocation = numToLocation(num); - const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation); - const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation); - if (leftDistance === rightDistance) { - return hand === 'left' ? leftTo(num) : rightTo(num); - } else if (leftDistance < rightDistance) { - return leftTo(num); - } else { - return rightTo(num); - } - } - }) - .join(''); - - function leftTo(num) { - leftNum = num; - return 'L'; - } - - function rightTo(num) { - rightNum = num; - return 'R'; - } -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" deleted file mode 100644 index 1904361..0000000 --- "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(arr) { - // arr의 모든 요소를 sum에 더힘 - let sum = arr.reduce((sum, e) => sum + e); - // sum을 arr의 요소의 갯수로 나눈 후 반환 - return sum / arr.length; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index e8739d0..0000000 --- "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(arr) { - return arr.reduce((acc, curr) => acc + curr) / arr.length; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" deleted file mode 100644 index 578d8bf..0000000 --- "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(arr) { - var answer = 0; - for (var i = 0; i < arr.length; i++) { - answer += arr[i]; - } - return answer / arr.length; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" "b/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" deleted file mode 100644 index 5c52555..0000000 --- "a/build/solutions/level-1/\355\217\211\352\267\240 \352\265\254\355\225\230\352\270\260/prove-ability.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(arr) { - var answer = 0; - arr.forEach((num) => { - answer += num; - }); - return answer / arr.length; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" deleted file mode 100644 index d473ff1..0000000 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/chaerin-dev.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(nums) { - // 가질 수 있는 폰켓몬의 수 - const getCnt = nums.length / 2; - // 폰켓몬 종류의 수 - const setSize = new Set(nums).size; - // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면 - // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음 - // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면 - // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수 - return setSize > getCnt ? getCnt : setSize; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" deleted file mode 100644 index 76e1073..0000000 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/codeisneverodd.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(nums) { - const numLen = nums.length; - const setLen = [...new Set(nums)].length; - return numLen / 2 >= setLen ? setLen : numLen / 2; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" deleted file mode 100644 index 853e198..0000000 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/jaewon1676.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(nums) { - let max = nums.length / 2; // N / 2 - let set = [...new Set(nums)]; // 중복을 없앤다. - return set.length > max ? max : set.length; -} - -/* 풀이 과정 -1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다. -2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다. -3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 - 두가지 경우의 수로 좁혀진다. */ \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" deleted file mode 100644 index 92e064f..0000000 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/prove-ability.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(nums) { - var answer = 0; - // set 을 사용해 중복 제거 - const set = new Set(); - nums.forEach((num) => { - set.add(num); - }); - // set 의 사이즈가 N/2 보다 크다면 N/2 반환 - // 그렇지 않다면 set size 반환 - if (set.size > nums.length / 2) answer = nums.length / 2; - else answer = set.size; - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" "b/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" deleted file mode 100644 index 7bbe104..0000000 --- "a/build/solutions/level-1/\355\217\260\354\274\223\353\252\254/yongchanson.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(nums) { - const unique = nums.filter((element, index) => { - return nums.indexOf(element) === index; - }); - - return unique.length > nums.length / 2 ? nums.length / 2 : unique.length; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" deleted file mode 100644 index f944962..0000000 --- "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/chaerin-dev.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(x) { - // x의 각 자리에 접근하기 위해 x를 문자열로 변환 - let x_str = x.toString(); - // 각 자릿수의 합을 저장할 변수 - let sum_of_digits = 0; - // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌 - for (let i = 0; i < x_str.length; i++) { - sum_of_digits += Number(x_str[i]); - } - // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환 - return x % sum_of_digits == 0; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" deleted file mode 100644 index 233c828..0000000 --- "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(x) { - const sum = x - .toString() - .split("") - .map((x) => parseInt(x)) - .reduce((acc, curr) => acc + curr); - return x % sum === 0; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" deleted file mode 100644 index d1963e2..0000000 --- "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/jaewon1676.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(x) { - let sum = 0; - let arr = String(x).split(""); // 숫자를 하나씩 분리한다. - - for (var i = 0; i < arr.length; i++) { - sum += Number(arr[i]); // 각 숫자를 더해준다. - } - - return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수 -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" "b/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" deleted file mode 100644 index 83f82e8..0000000 --- "a/build/solutions/level-1/\355\225\230\354\203\244\353\223\234 \354\210\230/prove-ability.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(x) { - var answer = true; - // 모든 자릿수의 합을 구한다 - const sum = x - .toString() - .split("") - .reduce((acc, cur) => acc + parseInt(cur, 10), 0); - // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환 - if (x % sum !== 0) return false; - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" deleted file mode 100644 index e5a6e98..0000000 --- "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/chaerin-dev.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(phone_number) { - // "*"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과 - // phone_number의 -4인덱스부터 끝까지 추출한 문자열을 - // 이어붙인 후 반환 - return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" deleted file mode 100644 index b4737b4..0000000 --- "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(phone_number) { - return "*".repeat(phone_number.length - 4) + phone_number.slice(-4); -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" "b/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" deleted file mode 100644 index 293e294..0000000 --- "a/build/solutions/level-1/\355\225\270\353\223\234\355\217\260 \353\262\210\355\230\270 \352\260\200\353\246\254\352\270\260/prove-ability.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(phone_number) { - var answer = ""; - answer += "*".repeat(phone_number.length - 4); - answer += phone_number.slice(phone_number.length - 4, phone_number.length); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" deleted file mode 100644 index 5b52f9e..0000000 --- "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/chaerin-dev.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(arr1, arr2) { - var answer = []; - for (let i = 0; i < arr1.length; i++) { - let ans_row = []; - for (let j = 0; j < arr1[0].length; j++) { - ans_row.push(arr1[i][j] + arr2[i][j]); - } - answer.push(ans_row); - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" deleted file mode 100644 index d40aa09..0000000 --- "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/codeisneverodd.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(arr1, arr2) { - var answer = new Array(arr1.length); - for (let i = 0; i < arr1.length; i++) { - answer[i] = new Array(arr1[0].length); - } - for (let row = 0; row < answer.length; row++) { - for (let col = 0; col < answer[0].length; col++) { - answer[row][col] = arr1[row][col] + arr2[row][col]; - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" "b/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" deleted file mode 100644 index 7c4990c..0000000 --- "a/build/solutions/level-1/\355\226\211\353\240\254\354\235\230 \353\215\247\354\205\210/yongchanson.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(A, B) { - let answer = []; - - for (let i = 0; i < A.length; i++) { - answer[i] = []; - for (let j = 0; j < A[0].length; j++) { - answer[i][j] = A[i][j] + B[i][j]; - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" deleted file mode 100644 index 270448d..0000000 --- "a/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/RyanDeclan.js" +++ /dev/null @@ -1,18 +0,0 @@ -// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용 -// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드 -let result = ""; -function solution(n) { - let remainder = n % 3; - let quotient = Math.floor(n / 3) - if(!remainder){ - quotient = Math.floor(n / 3) - 1; - remainder = 3 - } - result += remainder; - if( quotient <= 3){ - if(quotient)result += quotient - result = result.replace(/["3"]/g,"4") - return result.split("").reverse().join("") - } - return solution(quotient); -} \ No newline at end of file diff --git "a/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" deleted file mode 100644 index 45389a4..0000000 --- "a/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/codeisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(n) { - var answer = ''; - const oneTwoFour = ['4', '1', '2'] - while (n > 0) { - const remainder = n % 3 - answer = oneTwoFour[remainder] + answer; - if (remainder === 0) { - n = Math.floor((n - 1) / 3) - } else { - n = Math.floor(n / 3) - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" "b/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" deleted file mode 100644 index 18dd30c..0000000 --- "a/build/solutions/level-2/124 \353\202\230\353\235\274\354\235\230 \354\210\253\354\236\220/jaewon1676.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(n) { - const number = [ 4, 1, 2]; - let answer = ""; - - while(n){ // - answer = number[n%3] + answer; - n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3); - } - - return answer -} \ No newline at end of file diff --git "a/build/solutions/level-2/2 x n \355\203\200\354\235\274\353\247\201/jaewon1676.js" "b/build/solutions/level-2/2 x n \355\203\200\354\235\274\353\247\201/jaewon1676.js" deleted file mode 100644 index bf5be3f..0000000 --- "a/build/solutions/level-2/2 x n \355\203\200\354\235\274\353\247\201/jaewon1676.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(n) { - let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력, - if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다. - for (let i=3; i<=n; i++){ - dp.push((dp[i-1] + dp[i-2]) % 1000000007); - } - } - return dp[n] -} -/* -n이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다. -n = (n - 1) + (n - 2)의 식으로 구할 수 있고, -제한 사항을 주의해서 풀어보자. */ \ No newline at end of file diff --git "a/build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" "b/build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" deleted file mode 100644 index ced2c8d..0000000 --- "a/build/solutions/level-2/2\352\260\234 \354\235\264\355\225\230\353\241\234 \353\213\244\353\245\270 \353\271\204\355\212\270/le2sky.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(numbers) { - const answer = []; - numbers.forEach((num) => { - if (num % 2 == 0) answer.push(num + 1); - else { - let binary = ["0", ...num.toString(2)]; - let last = binary.lastIndexOf("0"); - binary[last] = "1"; - binary[last + 1] = "0"; - answer.push(parseInt(binary.join(""), 2)); - } - }); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" "b/build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" deleted file mode 100644 index 01c1410..0000000 --- "a/build/solutions/level-2/3 x n \355\203\200\354\235\274\353\247\201/codeisneverodd.js" +++ /dev/null @@ -1,15 +0,0 @@ -function solution(n) { - if (n % 2 !== 0) return 0; - - const getCount = n => { - const k = n / 2; - const count = [3, 11, ...Array(k - 2)]; - const divider = 1000000007; - for (let i = 2; i < k; i++) { - count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider; - } - return count[count.length - 1]; - }; - - return getCount(n); -} \ No newline at end of file diff --git a/build/solutions/level-2/H Index/codeisneverodd.js b/build/solutions/level-2/H Index/codeisneverodd.js deleted file mode 100644 index 9053906..0000000 --- a/build/solutions/level-2/H Index/codeisneverodd.js +++ /dev/null @@ -1,11 +0,0 @@ -function solution(citations) { - var answer = 0; - let h = 0 - let length = 0 - while (length >= h) { - h++ - length = citations.filter(citation => citation >= h).length - } - answer = h - 1 - return answer; -} \ No newline at end of file diff --git a/build/solutions/level-2/H Index/jaewon1676.js b/build/solutions/level-2/H Index/jaewon1676.js deleted file mode 100644 index ccbd40a..0000000 --- a/build/solutions/level-2/H Index/jaewon1676.js +++ /dev/null @@ -1,11 +0,0 @@ -function solution(citations) { - var answer = 0; - citations.sort((a,b)=>(b-a)) - - for(var i=0; ix[0] ? x[0].toUpperCase() + x.substring(1) : "").join(" "); -} - -// 이 문제에서 제일 핵심은 "공백문자가 연속해서 나올 수 있습니다." 입니다. 이 부분을 꼭 고려하셔야합니다. -// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다. -// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. -//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다. \ No newline at end of file diff --git "a/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index f0df969..0000000 --- "a/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(s) { - var answer = '' - answer = s.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ') - //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다. - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" deleted file mode 100644 index 8f8ce04..0000000 --- "a/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(s) { - s = s.split(' ').map(el => el.split('').map((el, index) => - index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ') - return s; -} -// 문자열을 연습하기에 좋은 문제입니다. - -// s.split(' ') // 띄어쓰기를 기준으로 나눕니다. -// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 -// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase()) -// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. -// .join('') 작은 배열들을 합쳐줍니다. -// .join(' ') 큰 배열들을 합쳐줍니다. \ No newline at end of file diff --git "a/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" deleted file mode 100644 index 5b1c367..0000000 --- "a/build/solutions/level-2/JadenCase \353\254\270\354\236\220\354\227\264 \353\247\214\353\223\244\352\270\260/yongchanson.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(s) { - let answer = []; - s = s.split(" "); - - for (let i = 0; i < s.length; i++) { - answer.push( - s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase() - ); - } - return answer.join(" "); -} \ No newline at end of file diff --git a/build/solutions/level-2/N Queen/codeisneverodd.js b/build/solutions/level-2/N Queen/codeisneverodd.js deleted file mode 100644 index 425ebc0..0000000 --- a/build/solutions/level-2/N Queen/codeisneverodd.js +++ /dev/null @@ -1,36 +0,0 @@ -function solution(n) { - /* - 1. 0번째 행에 0번째 queen을 놓는다. - 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다. - 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다. - 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다. - 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다. - */ - let answer = 0; - const canBePlacedOn = (chess, currentRow) => { - //해당 행에 둔 queen이 유효한지 - for (let prevRow = 0; prevRow < currentRow; prevRow++) { - const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow]) - const onStraight = chess[prevRow] === chess[currentRow] - if (onDiagonal || onStraight) return false - } - return true - } - const placeQueen = (chess, currentRow) => { - //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴 - let count = 0 - if (currentRow === chess.length) return 1 - for (let currentQueen = 0; currentQueen < n; currentQueen++) { - //queen을 우선 배치한 후 가능한지 살펴본다. - chess[currentRow] = currentQueen - if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1) - } - return count - } - for (let firstQueen = 0; firstQueen < n; firstQueen++) { - const chess = new Array(n).fill(-1) - chess[0] = firstQueen - answer += placeQueen(chess, 1) - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/N\352\260\234\354\235\230 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" "b/build/solutions/level-2/N\352\260\234\354\235\230 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" deleted file mode 100644 index c0fbcc4..0000000 --- "a/build/solutions/level-2/N\352\260\234\354\235\230 \354\265\234\354\206\214\352\263\265\353\260\260\354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(arr) { - var answer = 0; - answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1) - return answer; -} - -function leastCommonMultiple(a, b) { - return a * b / greatestCommonDivisor(a, b) -} - -function greatestCommonDivisor(a, b) { - while (b > 0) { - let r = a % b; - a = b; - b = r; - } - return a; -} \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" deleted file mode 100644 index 7d412f4..0000000 --- "a/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/codeisneverodd.js" +++ /dev/null @@ -1,24 +0,0 @@ -function solution(str1, str2) { - var answer = 0; - let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2) - const union = new Set([...compare1, ...compare2]) - let multiIntersectionLen = 0, multiUnionLen = 0 - for (const slice of union) { - const compare1Count = compare1.filter(x => x === slice).length, - compare2Count = compare2.filter(x => x === slice).length - multiIntersectionLen += Math.min(compare1Count, compare2Count) - multiUnionLen += Math.max(compare1Count, compare2Count) - } - answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536) - return answer; -} - -function verifiedSlices(str) { - const onlyAlphabet = /[a-zA-Z]{2}/ - let result = [] - for (let i = 0; i < str.length - 1; i++) { - const slice = str.slice(i, i + 2) - if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase()) - } - return result -} \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" "b/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" deleted file mode 100644 index b403c03..0000000 --- "a/build/solutions/level-2/[1\354\260\250] \353\211\264\354\212\244 \355\201\264\353\237\254\354\212\244\355\204\260\353\247\201/jaewon1676.js" +++ /dev/null @@ -1,49 +0,0 @@ -function solution(str1, str2) { - - str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌. - str2 = str2.toUpperCase(); - let arr1 = new Array() // 빈 객체를 만들어줌. - let arr2 = new Array() - - for (var i = 0; i < str1.length - 1; i++) { - let tmp = str1.substr(i, 2) // i부터 2개 ( i, i+1 ) - if (tmp.search(/[^A-Z]/g) >= 0) { - // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) - // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환. - continue - } - arr1.push(tmp) - } - - for (var i = 0; i < str2.length - 1; i++) { - let tmp = str2.substr(i, 2) - if (tmp.search(/[^A-Z]/g) >= 0) { - continue - } - arr2.push(tmp) - } - arr1.sort() - arr2.sort() - var a = [] // 중복포함, 교집합 배열 - var b = [] // 중복포함, 합집합 배열 - - for (var i = 0; i < arr2.length; i++) { - if (arr1.indexOf(arr2[i]) >= 0) { - // arr1 객체에 arr2[i]과 같은 값이 있는지 확인. - // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. - a.push(arr1.splice(arr1.indexOf(arr2[i]), 1)) - } - // 교집합이 성립되지 않으면 실행. - b.push(arr2[i]) - } - - for (var i = 0; i < arr1.length; i++) { - b.push(arr1[i]) - } - - // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함 - if (b.length === 0) return 65536 - if (a.length === 0) return 0 - - return Math.floor((a.length / b.length) * 65536) -} \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" deleted file mode 100644 index ebc1c5b..0000000 --- "a/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/codeisneverodd.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(cacheSize, cities) { - var answer = 0; - let cache = [] - if (cacheSize === 0) return 5 * cities.length - for (const city of cities) { - const cityLC = city.toLowerCase() - if (cache.includes(cityLC)) { - cache.splice(cache.indexOf(cityLC), 1) - cache.unshift(cityLC) - answer += 1 - } else { - if (cache.length >= cacheSize) cache.pop() - cache.unshift(cityLC) - answer += 5 - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" "b/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" deleted file mode 100644 index 1002bab..0000000 --- "a/build/solutions/level-2/[1\354\260\250] \354\272\220\354\213\234/jaewon1676.js" +++ /dev/null @@ -1,34 +0,0 @@ -function solution(cacheSize, cities) { - var answer = 0; - let cache = []; - - //캐시 크기가 0인 경우는 따로 처리 - if (cacheSize === 0) return cities.length * 5; - - while (cities.length != 0) { - // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다. - const city = cities.shift().toLowerCase(); - // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss) - if (cache.includes(city)) { - // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고, - cache.splice(cache.indexOf(city), 1); - // 맨 뒤로 push 해준다. - cache.push(city); - // cache hit - answer += 1; - } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다. - if (cache.length === cacheSize) { - cache.shift(); - } - // 새로운 캐시 맨 뒤로 push - cache.push(city); - // cache miss - answer += 5; - } - } - return answer; - } - /* LRU 알고리즘 - n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다. - n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면 - 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */ \ No newline at end of file diff --git "a/build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" "b/build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" deleted file mode 100644 index 8be09fb..0000000 --- "a/build/solutions/level-2/[1\354\260\250] \355\224\204\353\240\214\354\246\2104\353\270\224\353\241\235/codeisneverodd.js" +++ /dev/null @@ -1,44 +0,0 @@ -function solution(m, n, board) { - board = board.map(r => r.split('')); - const getSquare = ([r, c]) => [ - [r, c], - [r, c + 1], - [r + 1, c], - [r + 1, c + 1], - ]; - - const isSquare = ([r, c]) => { - if (board[r][c] === '@') return false; - return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1; - }; - - const remove = () => { - const removeArr = []; - for (let r = 0; r < m - 1; r++) { - for (let c = 0; c < n - 1; c++) { - if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v)); - } - } - removeArr.forEach(([r, c]) => { - board[r][c] = '@'; - }); - return removeArr.length !== 0; - }; - - const pull = () => { - for (let c = 0; c < n; c++) { - const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@'); - const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn]; - resultColumn.forEach((v, r) => { - board[r][c] = v; - }); - } - return board; - }; - - while (remove()) { - pull(); - } - - return board.flat().filter(v => v === '@').length; -} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250] n\354\247\204\354\210\230 \352\262\214\354\236\204/codeisneverodd.js" "b/build/solutions/level-2/[3\354\260\250] n\354\247\204\354\210\230 \352\262\214\354\236\204/codeisneverodd.js" deleted file mode 100644 index aa44727..0000000 --- "a/build/solutions/level-2/[3\354\260\250] n\354\247\204\354\210\230 \352\262\214\354\236\204/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(n, t, m, p) { - let queue = [], result = [], currentNumDecimal = -1, turn = 0 - while (result.length < t) { - if (queue.length === 0) { - currentNumDecimal++ - currentNumDecimal.toString(n).split('').forEach(x => queue.push(x)) - } - const currentChar = queue.shift() - if (turn % m === p - 1) result.push(currentChar) - turn++ - } - return result.join('').toUpperCase() -} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" "b/build/solutions/level-2/[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" deleted file mode 100644 index 8b821d5..0000000 --- "a/build/solutions/level-2/[3\354\260\250] \353\260\251\352\270\210\352\267\270\352\263\241/minjongbaek.js" +++ /dev/null @@ -1,39 +0,0 @@ -function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수 - return m - .replace(/C#/g, 'c') - .replace(/D#/g, 'd') - .replace(/F#/g, 'f') - .replace(/G#/g, 'g') - .replace(/A#/g, 'a'); -} - -function solution(m, musicinfos) { - - // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다. - // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다. - // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다. - - const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다. - - const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다. - for (const info of musicinfos) { - const [start, finish, title, _score] = info.split(','); - // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다. - const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5)))); - - const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다. - - // 재생된 멜로디를 구합니다. - // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다. - // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다. - const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration); - if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다. - map.set(title, {score, playScore}); - } - } - - // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다. - // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다. - const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length); - return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다. -} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" "b/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" deleted file mode 100644 index 5cacb2a..0000000 --- "a/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/codeisneverodd.js" +++ /dev/null @@ -1,30 +0,0 @@ -function solution(msg) { - const outputs = []; - const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))]; - let [start, end] = [0, 1]; - - const doesDictHave = (start, end) => dict.includes(msg.substring(start, end)); - - const getInput = (start, end) => { - if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end]; - return getInput(start, end + 1); - }; - - const addToDict = (start, end) => { - if (doesDictHave(start, end)) return; - dict.push(msg.substring(start, end)); - }; - - const addToOutputs = (start, end) => { - if (!doesDictHave(start, end)) return; - outputs.push(dict.indexOf(msg.substring(start, end))); - }; - - while (start < msg.length) { - [start, end] = getInput(start, end); - addToDict(start, end + 1); - addToOutputs(start, end); - start = end; - } - return outputs; -} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" "b/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" deleted file mode 100644 index 847e772..0000000 --- "a/build/solutions/level-2/[3\354\260\250] \354\225\225\354\266\225/ssi02014.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(msg) { - const result = []; - const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i)) - - // 시간 복잡도 O(N^2) - const lastWordAndCompression = msg.split("").reduce((acc, cur) => { - const nextWord = acc + cur; - const nextWordIdx = dict.indexOf(nextWord); - const prevWordIdx = dict.indexOf(acc); - - if (nextWordIdx !== -1) return acc + cur; - dict.push(nextWord); - - if (prevWordIdx !== -1) result.push(prevWordIdx + 1); - return cur; - }, ""); - - result.push(dict.indexOf(lastWordAndCompression) + 1); - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-2/[3\354\260\250] \355\214\214\354\235\274\353\252\205 \354\240\225\353\240\254/codeisneverodd.js" "b/build/solutions/level-2/[3\354\260\250] \355\214\214\354\235\274\353\252\205 \354\240\225\353\240\254/codeisneverodd.js" deleted file mode 100644 index 9d77106..0000000 --- "a/build/solutions/level-2/[3\354\260\250] \355\214\214\354\235\274\353\252\205 \354\240\225\353\240\254/codeisneverodd.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(files) { - var answer = []; - const numberRegex = /[0-9]+/ - answer = files.sort((a, b) => { - const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)] - const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()] - const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])] - return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0 - }) - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234 \354\206\214\354\210\230 \352\260\234\354\210\230 \352\265\254\355\225\230\352\270\260/minjongbaek.js" "b/build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234 \354\206\214\354\210\230 \352\260\234\354\210\230 \352\265\254\355\225\230\352\270\260/minjongbaek.js" deleted file mode 100644 index 6eeb88f..0000000 --- "a/build/solutions/level-2/k\354\247\204\354\210\230\354\227\220\354\204\234 \354\206\214\354\210\230 \352\260\234\354\210\230 \352\265\254\355\225\230\352\270\260/minjongbaek.js" +++ /dev/null @@ -1,20 +0,0 @@ -function isPrime(number) { // 소수를 판별하는 함수 - if (number < 2) return false; - for (let i = 2; i * i <= number; i += 1) { - if (number % i === 0) { - return false; - } - } - return true; -} - -function solution(n, k) { - // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만, - // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다. - // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다. - - // (n).toString(k) // n을 k진수로 변환합니다. - // .split('0') // 0을 기준으로 나눕니다. - // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다. - return (n).toString(k).split('0').filter((number) => isPrime(+number)).length; -} \ No newline at end of file diff --git "a/build/solutions/level-2/n^2 \353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/jaewon1676.js" "b/build/solutions/level-2/n^2 \353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/jaewon1676.js" deleted file mode 100644 index 03a0421..0000000 --- "a/build/solutions/level-2/n^2 \353\260\260\354\227\264 \354\236\220\353\245\264\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution (n, left, right) { - const answer = []; - - for (let i=left; i <= right; i++) { // left부터 right까지를 구한다. - let row = parseInt(i/n); // 행(row)을 구한다. - let column = i%n; // 열(column)을 구한다. - answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다. - } - return answer -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" deleted file mode 100644 index 8a5782f..0000000 --- "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(numbers) { - var answer = ''; - numbers.sort(sortFunc) - answer = numbers.join('') - if (answer[0] === '0') return '0' - return answer; -} - -const sortFunc = (a, b) => { - const compareA = parseInt(a.toString() + b.toString()) - const compareB = parseInt(b.toString() + a.toString()) - return compareB - compareA -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" deleted file mode 100644 index f873c7f..0000000 --- "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/createhb21.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(numbers) { - let stringNum = - numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b)); - - return stringNum[0] === '0' ? '0' : stringNum.join(''); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" deleted file mode 100644 index eafcb32..0000000 --- "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\210\230/prove-ability.js" +++ /dev/null @@ -1,3 +0,0 @@ -function solution(numbers) { - return numbers.every(v => v === 0) ? "0" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(""); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/codeisneverodd.js" deleted file mode 100644 index 052c1c8..0000000 --- "a/build/solutions/level-2/\352\260\200\354\236\245 \355\201\260 \354\240\225\354\202\254\352\260\201\355\230\225 \354\260\276\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(board) { - for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능 - for (let col = 0; col < board[0].length; col++) { - if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined))) - board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1; - } - } - return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대 -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260 \355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260 \355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 47eedd6..0000000 --- "a/build/solutions/level-2/\352\261\260\353\246\254\353\221\220\352\270\260 \355\231\225\354\235\270\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(places) { - var answer = []; - answer = places.map(place => { - return place.some((row, rowIndex) => - row.split('').some((mark, colIndex, rowArr) => { - if (mark === 'X') return false - const countPeopleAround = [ - rowArr[colIndex - 1] || '', - rowArr[colIndex + 1] || '', - (place[rowIndex - 1] || '')[colIndex], - (place[rowIndex + 1] || '')[colIndex], - ].filter(mark => mark === 'P').length - return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1) - }) - ) ? 0 : 1 - }) - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" "b/build/solutions/level-2/\352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" deleted file mode 100644 index b7a27ce..0000000 --- "a/build/solutions/level-2/\352\262\214\354\236\204 \353\247\265 \354\265\234\353\213\250\352\261\260\353\246\254/prove-ability.js" +++ /dev/null @@ -1,38 +0,0 @@ -function solution(maps) { - // BFS 활용 - const row = maps.length - 1, col = maps[0].length - 1; - - // 큐 - 시작 위치 y, x, 이동 거리 - const queue = [[0, 0, 1]]; - - while(queue.length) { - // 큐 추출 - let [y, x, count] = queue.shift(); - // 상대 팀 진영이라면 - if(y === row && x === col) return count; - // 동서남북 확인 - for(let i = 0; i < 4; i++) { - const [dy, dx] = DIRECTION[i]; - // 다음 길 위치 - const nextY = dy + y, nextX = dx + x; - // 맵 밖으로 나간다면 - if(isOut(nextY, nextX, row, col)) continue; - // 도착한 곳이 벽이라면 - if(maps[nextY][nextX] === 0) continue; - // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지 - maps[nextY][nextX] = 0; - // 다음에 확인해야하는 곳 큐에 추가 - // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 - queue.push([nextY, nextX, count + 1]); - // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음.. - } - } - - return -1; -} - -// 상 우 하 좌 -const DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]]; - -// 사용이 가능한 길인지 확인하는 함수 -const isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col; \ No newline at end of file diff --git "a/build/solutions/level-2/\352\264\204\355\230\270 \353\263\200\355\231\230/codeisneverodd.js" "b/build/solutions/level-2/\352\264\204\355\230\270 \353\263\200\355\231\230/codeisneverodd.js" deleted file mode 100644 index 2dade70..0000000 --- "a/build/solutions/level-2/\352\264\204\355\230\270 \353\263\200\355\231\230/codeisneverodd.js" +++ /dev/null @@ -1,36 +0,0 @@ -function solution(p) { - if (p.length === 0) { - return p - } else { - const sliceIndex = balancedIndex(p) - const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)] - if (isRight(u)) { - return u + solution(v) - } else { - let emptyString = '(' + solution(v) + ')' - const slicedReversedString = u - .slice(1, u.length - 1) - .split('') - .map(bracket => bracket === '(' ? ')' : '(') - .join('') - return emptyString + slicedReversedString - } - } -} - -const isRight = (str) => { - if (str[0] === ')') return false - let stack = 0 - for (let i = 0; i < str.length; i++) { - stack = str[i] === '(' ? stack + 1 : stack - 1 - if (stack < 0) return false - } - return stack === 0 -} -const balancedIndex = (str) => { - let count = 0 - for (let i = 0; i < str.length; i++) { - count = str[i] === '(' ? count + 1 : count - 1 - if (count === 0) return i - } -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\264\204\355\230\270 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\264\204\355\230\270 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 119b65c..0000000 --- "a/build/solutions/level-2/\352\264\204\355\230\270 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,35 +0,0 @@ -function solution(s) { - let answer = 0; - let sArr = s.split('') - if (isRight(sArr.join(''))) answer += 1 - for (let i = 0; i < sArr.length - 1; i++) { - sArr.push(sArr.shift()) - if (isRight(sArr.join(''))) answer += 1 - } - return answer; -} - -function isRight(str) { - const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')'] - let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}] - for (let sIndex = 0; sIndex < str.length; sIndex++) { - for (let bIndex = 0; bIndex < 3; bIndex++) { - if (str[sIndex] === bracketOpen[bIndex]) { - status[bIndex].open = true - status[bIndex].openOrder.push(sIndex) - } - if (str[sIndex] === bracketClose[bIndex]) { - if (status[bIndex].openOrder.length > 0) { - if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0) - return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘 - status[bIndex].openOrder.pop() - status[bIndex].open = false - } else { - return false //열리기 전에 닫힘 - } - } - } - } - for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음 - return true -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index 9c3fdff..0000000 --- "a/build/solutions/level-2/\352\265\220\354\240\220\354\227\220 \353\263\204 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,40 +0,0 @@ -function solution(line) { - const getCrossPoint = ([A, B, E], [C, D, F]) => { - if (A * D - B * C === 0) return [Infinity, Infinity]; - return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)]; - }; //문제 설명 최하단 참조 - - const crossPoints = line.flatMap((lineA, i) => - line - .slice(i + 1) - .map(lineB => getCrossPoint(lineA, lineB)) - .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y)) - ); - - const generateCanvas = crossPoints => { - const xPoints = [...crossPoints.map(([x, y]) => x)]; - const yPoints = [...crossPoints.map(([x, y]) => y)]; - const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)]; - const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)]; - const xLength = Math.abs(maxX - minX) + 1; - const yLength = Math.abs(maxY - minY) + 1; - - return { - canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')), - draw([x, y], value) { - this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value; - }, - print() { - return this.canvas.map(row => row.join('')); - }, - }; - }; - - const canvas = generateCanvas(crossPoints); - - crossPoints.forEach(point => { - canvas.draw(point, '*'); - }); - - return canvas.print(); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" deleted file mode 100644 index 5fa447d..0000000 --- "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/iHoHyeon.js" +++ /dev/null @@ -1,21 +0,0 @@ -function solution(people, limit) { - people.sort((a, b) => a - b); // 오름차순 정렬 - - let cnt = 0; // 구명보트 개수 - - let front = 0; // 가장 몸무게가 작은 사람의 index - let last = people.length; // 가장 몸무게가 큰 사람의 index - - while (last > front) { - cnt++; - - const now = people.pop(); - last--; - - if (now + people[front] <= limit) { - front++; // shift() 연산의 비효율로 인해 front 사용 - } - } - - return cnt; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" deleted file mode 100644 index b58cee0..0000000 --- "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/jaewon1676.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(people, limit) { - let cnt = 0; - - people.sort((a, b) => {return a - b}) // 몸무게 오름차순 - - while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 - if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기 - people.pop() - people.shift() - } else { - people.pop() // 무거운사람을 뺴주자 - } - cnt++; - } - return cnt; -} // 4주차 2번 문제와 유사함 \ No newline at end of file diff --git "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" "b/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" deleted file mode 100644 index d11be8c..0000000 --- "a/build/solutions/level-2/\352\265\254\353\252\205\353\263\264\355\212\270/prove-ability.js" +++ /dev/null @@ -1,22 +0,0 @@ -function solution(people, limit) { - let count = 0; - // 오름차순 정렬 - people.sort((a, b) => a - b); - - // people 배열 요소가 있다면? - while(people.length) { - - // 요소 중 가장 큰 수인 마지막 요소를 가져온다 - let sum = people.pop(); - - // 요소 중 가장 작은 수를 더한다 - sum += people[0] - - // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거 - if(sum <= limit) people.shift(); - - count++; - } - - return count; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" deleted file mode 100644 index 077e2db..0000000 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/RyanDeclan.js" +++ /dev/null @@ -1,35 +0,0 @@ -// 예제1) 입력값 : [93, 30, 55], [1, 30, 5] -function solution(progresses, speeds) { - // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열 - let countBox = []; - let completeBox = []; - for(k=1; k<100; k++){ - let complete = [] - for(i=0; i= 100){ - complete.push([i,k]); - progresses.splice(i,1,"end") - } - } - if(complete[0] != null)completeBox.push(...complete) - } - completeBox.sort((a,b) => a[0] - b[0]) - - //여기까지 한다면 console.log(completeBox) [ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. - // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 - - // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 - let count = 0; - completeBox.reduce((acc, cur, i) => { - if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 - if(i) countBox.push(count) - acc[0] = cur[1]; - count = 0; - count++ - }else{count++} - if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. - return acc - } ,[0]) - return countBox; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" deleted file mode 100644 index a29f599..0000000 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/chaerin-dev.js" +++ /dev/null @@ -1,25 +0,0 @@ -function solution(progresses, speeds) { - // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장 - const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i])); - - // 최초 배포날은 daysLeftArr의 첫 번째 요소 - let deployDay = daysLeftArr[0]; - // 각 배포에 몇 개의 기능이 배포될지 셀 변수 - let cnt = 0; - // 각 배포에 몇 개의 기능이 배포될지 저장할 배열 - const answer = []; - - // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포 - daysLeftArr.forEach((daysLeft) => { - if (deployDay < daysLeft) { - deployDay = daysLeft; - answer.push(cnt); - cnt = 0; - } - cnt++; - }); - answer.push(cnt); - - // 정답 반환 - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" deleted file mode 100644 index f399a8b..0000000 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd - \354\213\234\352\260\204\353\263\265\354\236\241\353\217\204 \352\260\220\354\206\214.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(progresses, speeds) { - var answer = []; - const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index])) - console.log(remainDays) - let maxDay = remainDays[0] - answer.push(0) - for (let i = 0; i < remainDays.length; i++) { - if (remainDays[i] <= maxDay) { - answer[answer.length - 1] += 1 - } else { - answer.push(1) - maxDay = remainDays[i] - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" deleted file mode 100644 index 6c05446..0000000 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/codeisneverodd.js" +++ /dev/null @@ -1,19 +0,0 @@ -function solution(progresses, speeds) { - var answer = []; - while (progresses.length > 0) { - let done = 0 - progresses = progresses.map((prog, index) => prog + speeds[index]) - const length = progresses.length - for (let i = 0; i < length; i++) { - if (progresses[0] >= 100) { - progresses.shift() - speeds.shift() - done += 1 - } else { - break - } - } - if (done > 0) answer.push(done) - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" deleted file mode 100644 index 12ff036..0000000 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/createhb21.js" +++ /dev/null @@ -1,24 +0,0 @@ -function solution(progresses, speeds) { - // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열 - var answer = []; - // 각각의 기능이 몇 일 소요되는지 담은 큐 - let queue = []; - - for (let i = 0; i < speeds.length; i++) { - // 각각의 기능이 몇 일 걸리는지 계산 - let task = Math.ceil((100 - progresses[i]) / speeds[i]); - // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다. - queue.push(task); - - // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push() - // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화 - if(task > queue[0]) { - answer.push(queue.length-1); - // 큐 초기화 - queue = [task]; - } - } - - answer.push(queue.length); - return answer; - } \ No newline at end of file diff --git "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" "b/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" deleted file mode 100644 index 531ff0e..0000000 --- "a/build/solutions/level-2/\352\270\260\353\212\245\352\260\234\353\260\234/jaewon1676.js" +++ /dev/null @@ -1,21 +0,0 @@ -function solution(progresses, speeds) { - let answer = []; - - while(speeds.length > 0) { - for(let i=0;i= 100) { - progresses.shift(); - speeds.shift(); - count++; - } - if(count > 0) { // 결과 배열에 넣어주기 - answer.push(count); - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" deleted file mode 100644 index 277b5e6..0000000 --- "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/codeisneverodd.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(bridge_length, weight, truck_weights) { - const bridge = new Array(bridge_length).fill(0) - let tick = 0 - do { - tick++ - bridge.pop() - bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ? - bridge.unshift(truck_weights.shift()) : bridge.unshift(0) - } while (bridge.reduce((a, b) => a + b) !== 0) - return tick; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/jaewon1676.js" "b/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/jaewon1676.js" deleted file mode 100644 index 4be0d38..0000000 --- "a/build/solutions/level-2/\353\213\244\353\246\254\353\245\274 \354\247\200\353\202\230\353\212\224 \355\212\270\353\237\255/jaewon1676.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(bridge_length, weight, truck_weights) { - var answer = 0; // 총 걸리는 시간 - let bridge = []; // 다리를 건너는 트럭 - let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게 - - while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다. - answer++; // 1초 추가 - if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다. - bridge_weight -= bridge.shift(); - } - if (bridge_weight + truck_weights[0] > weight) { - bridge.push(0); - continue; - } - let truck_weight = truck_weights.shift(); - bridge.push(truck_weight); - bridge_weight += truck_weight; - } - - answer += bridge_length; - - return answer; - } \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" deleted file mode 100644 index c8d13be..0000000 --- "a/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/codeisneverodd.js" +++ /dev/null @@ -1,19 +0,0 @@ -function solution(n) { - var answer = 0; - let find = false - const nCountOne = countOne(n.toString(2)) - let counter = 1 - while (!find) { - if (nCountOne === countOne((n + counter).toString(2))) { - answer = n + counter - find = true - } - counter++ - } - return answer; -} - -const countOne = (str) => { - return str.split('').reduce((sum, currentChar) => - currentChar === '1' ? sum += 1 : sum, 0) -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" deleted file mode 100644 index 5b14d1f..0000000 --- "a/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/dia.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(n) { - const count = (num) => num.toString(2).match(/1/g).length; - for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" "b/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" deleted file mode 100644 index 2591680..0000000 --- "a/build/solutions/level-2/\353\213\244\354\235\214 \355\201\260 \354\210\253\354\236\220/prove-ability.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(n) { - let i = n; - n = n.toString(2).match(/1/g).length; - while(true) { - i++; - const value = i.toString(2).match(/1/g).length; - if(n === value) return i; - } -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index 07fb788..0000000 --- "a/build/solutions/level-2/\353\221\220 \355\201\220 \355\225\251 \352\260\231\352\262\214 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,28 +0,0 @@ -function solution(queue1, queue2) { - const getSum = arr => arr.reduce((a, c) => a + c, 0); - - if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1; - - const queue = [...queue1, ...queue2, ...queue1, ...queue2]; - const maxCount = queue.length; - const average = getSum(queue) / 4; - let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length]; - - const pop = () => { - currentSum -= queue[start]; - start += 1; - count += 1; - }; - const insert = () => { - currentSum += queue[end]; - end += 1; - count += 1; - }; - - while (count <= maxCount) { - if (currentSum < average) insert(); - if (currentSum > average) pop(); - if (currentSum === average) return count; - } - return -1; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" deleted file mode 100644 index f7008f5..0000000 --- "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(land) { - for (let rowIndex = 1; rowIndex < land.length; rowIndex++) { - for (let colIndex = 0; colIndex < land[0].length; colIndex++) { - land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1)) - } - } - return Math.max(...land[land.length - 1]) -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" deleted file mode 100644 index af830cc..0000000 --- "a/build/solutions/level-2/\353\225\205\353\224\260\353\250\271\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(land) { - var answer = 0; - - for (i = 1; i < land.length; i++){ - land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3])); - land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3])); - land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3])); - land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2])) - } - answer = land[land.length - 1] - return Math.max(...answer) -} -/* 풀이 과정 -1. land의 행만큼 반복문을 돌린다. -2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다. -3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" deleted file mode 100644 index 27110ad..0000000 --- "a/build/solutions/level-2/\353\251\200\353\246\254 \353\233\260\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(n) { - if (n < 2) return 1; - const count = [0, 1, 2, ...Array(n - 2).fill(0)]; - count.forEach((_, i) => { - if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567; - }); - return count[n]; -} -//재귀를 사용하면 콜스택 오버플로우가 발생합니다. \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" deleted file mode 100644 index 65c5cb0..0000000 --- "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/codeisneverodd.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(w, h) { - var answer = 1; - const gcd = greatestCommonDivisor2(w, h) - const erasedBoxInUnit = h / gcd + w / gcd - 1 - answer = w * h - erasedBoxInUnit * gcd - return answer; -} - -let greatestCommonDivisor2 = (a, b) => { - while (b > 0) { - let r = a % b; - a = b; - b = r; - } - return a; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" deleted file mode 100644 index da2b9ab..0000000 --- "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/jaewon1676.js" +++ /dev/null @@ -1,14 +0,0 @@ -// 유클리드 호제법을 이용한 최대 공약수 구하기 -function gcd(w, h) { - let mod = w % h; // w와 h의 나머지를 구합니다. - - if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다. - return h; - } - // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다. - return gcd(h, mod); -} -function solution(w, h) { - const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다. - return w * h - (w + h - gcdVal); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" "b/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" deleted file mode 100644 index 2e31c16..0000000 --- "a/build/solutions/level-2/\353\251\200\354\251\241\355\225\234 \354\202\254\352\260\201\355\230\225/yongchanson.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(w,h){ - const slope = h / w; - let cnt = 0; - //대각선 아래에 위치한 도형의 개수를 구합니다. - //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다. - for(let i = 1; i <= w; i++){ - cnt += Math.ceil(slope * i); - } - //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다. - return ((w*h - cnt) * 2); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" "b/build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" deleted file mode 100644 index 347124b..0000000 --- "a/build/solutions/level-2/\353\251\224\353\211\264 \353\246\254\353\211\264\354\226\274/codeisneverodd.js" +++ /dev/null @@ -1,32 +0,0 @@ -function solution(orders, course) { - var answer = []; - for (const selectNum of course) { - let combinations = [] - for (const order of orders) { - getCombinations(Array.from(order), selectNum) - .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다. - .forEach(combString => combinations.push(combString)) - } - const combCounts = combinations.reduce((counts, combination) => { - counts[combination] = (counts[combination] || 0) + 1; - return counts; - }, {}); - let maxCount = 0, maxComb = [] - for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb] - for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb) - answer.push(...maxComb) - } - answer = answer.sort() - return answer; -} - -const getCombinations = (array, selectNum) => { - const result = []; - if (selectNum === 1) return array.map((element) => [element]); - array.forEach((fixed, index, origin) => { - const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1); - const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]); - result.push(...attached); - }); - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" "b/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" deleted file mode 100644 index bf37728..0000000 --- "a/build/solutions/level-2/\353\252\250\354\235\214\354\202\254\354\240\204/codeisneverodd.js" +++ /dev/null @@ -1,27 +0,0 @@ -function solution(word) { - const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 }; - const price = calculatePrice([1], 5); - return word - .split("") - .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet]) - .reduce((acc, curr) => acc + curr, 0); -} -const calculatePrice = (result = [1], targetLength) => { - if (result.length === targetLength) return result; - return calculatePrice([result[0] * 5 + 1, ...result], targetLength); -}; -/* -각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까? -4번째 자리 - 1 -3번째 자리 - 1*5 + 1 = 6 -2번째 자리 - 6*5 + 1 = 31 -1번째 자리 - 31*5 + 1 = 156 -0번째 자리 - 156*5 + 1 = 781 - -검증(1부터 시작하므로 1 + 비용) -I => (1 + 781 * 2) = 1563 -EIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189 -AAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10 -AAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6 -추천 레퍼런스: https://seongho96.tistory.com/50 -*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" deleted file mode 100644 index 59bcaf7..0000000 --- "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/chaerin-dev.js" +++ /dev/null @@ -1,43 +0,0 @@ -function solution(s) { - // len: 압축 전 문자열 길이 - const len = s.length; - // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화) - let shortenLen = len; - - // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행 - for (let i = 1; i <= len / 2; i++) { - // cnt: 단위가 반복되는 횟수를 카운트할 변수 - let cnt = 1; - // temp: 현재 단위 문자열을 임시로 저장해둘 변수 - let temp = s.slice(0, i); - // shhortenS: 압축 후 문자열을 저장할 변수 - let shortenS = ""; - - // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단 - for (let j = i; j < len; j += i) { - // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가 - if (temp === s.slice(j, j + i)) cnt++; - // 현재 단위 문자열과 일치하지 않으면 - else { - // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고 - if (cnt === 1) shortenS += temp; - else shortenS += cnt + temp; - - // 단위가 반복되는 횟수는 다시 1로 초기화 - cnt = 1; - // 현재 단위 문자열 업데이트 - temp = s.slice(j, j + i); - } - } - - // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함 - if (cnt === 1) shortenS += temp; - else shortenS += cnt + temp; - - // 압축 후 문자열 길이의 최솟값 업데이트 - shortenLen = Math.min(shortenLen, shortenS.length); - } - - // 압축 후 문자열 길이의 최솟값 반환 - return shortenLen; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" "b/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" deleted file mode 100644 index 3ab021c..0000000 --- "a/build/solutions/level-2/\353\254\270\354\236\220\354\227\264 \354\225\225\354\266\225/codeisneverodd.js" +++ /dev/null @@ -1,23 +0,0 @@ -function solution(s) { - var answer = 0; - let lengthArr = [] - for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length) - answer = Math.min(...lengthArr) - return answer; -} - -function compressedString(str, unitNum) { - let count = 1 - let result = [''] - for (let repeat = 0; repeat <= str.length / unitNum; repeat++) { - const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum) - if (result[result.length - 1] === slicedGroup) { - count++ - } else { - if (count > 1) result[result.length - 1] = count + result[result.length - 1] - result.push(slicedGroup) - count = 1 - } - } - return result.join('') -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" "b/build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" deleted file mode 100644 index 730f8e5..0000000 --- "a/build/solutions/level-2/\353\260\251\353\254\270 \352\270\270\354\235\264/codeisneverodd.js" +++ /dev/null @@ -1,34 +0,0 @@ -function solution(dirs) { - const move = ([x, y], dir) => { - let next = [x, y]; - if (dir === 'U') next = [x, y + 1]; - if (dir === 'D') next = [x, y - 1]; - if (dir === 'R') next = [x + 1, y]; - if (dir === 'L') next = [x - 1, y]; - if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y]; - return next; - }; - - const isSameRoute = ([s1, e1], [s2, e2]) => { - const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2; - return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1)); - }; - - const trace = { - visited: [], - visit(start, end) { - if (start[0] === end[0] && start[1] === end[1]) return; - if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]); - }, - }; - - let current = [0, 0]; - - dirs.split('').forEach(dir => { - const next = move(current, dir); - trace.visit(current, next); - current = next; - }); - - return trace.visited.length; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" deleted file mode 100644 index 13fc78a..0000000 --- "a/build/solutions/level-2/\353\260\260\353\213\254/pereng11 O(N * N);.js" +++ /dev/null @@ -1,53 +0,0 @@ -//다익스트라 + 선형탐색 -function solution ( N, road, K ) -{ - const roadsTable = {}; //전체 도로 정보 - - // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 - for ( let i = 1; i <= N; i++ ) - { - roadsTable[ i ] = []; - } - road.forEach( road => - { - let [ sp, ep, dist ] = road; - roadsTable[ sp ].push( [ ep, dist ] ); - roadsTable[ ep ].push( [ sp, dist ] ); - } ); - - function djikstra ( sp ) - { - const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 - const queue = []; - - queue.push( [sp, 0] ); - - while ( queue.length > 0 ) - { - const [ ep, val ] = queue.shift(); - if ( dist[ ep ] > val ) - { - dist[ ep ] = val; - const nexts = roadsTable[ ep ]; - if ( nexts ) - { - nexts.forEach( n => - { - let [ nextEp, nextVal ] = n; - //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 - if ( dist[ nextEp ] > val + nextVal ) - { - queue.push( [ nextEp, val + nextVal ] ); - } - } ); - } - } - } - // 거리가 K이하인 지점의 개수 반환 - const result = dist.filter( d => d <= K ).length; - return result; - } - - const answer = djikstra( 1 ); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" "b/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" deleted file mode 100644 index c4b6ba9..0000000 --- "a/build/solutions/level-2/\353\260\260\353\213\254/pereng11.js" +++ /dev/null @@ -1,131 +0,0 @@ -// 다익스트라 + 최소힙 O( N * logN ) - // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 -class MinHeap{ - constructor () - { - this.heap = [ null ]; - } - // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬 - push ( val ) - { - this.heap.push(val); - let childIdx = this.heap.length-1; - let parentIdx = Math.floor(childIdx / 2); - while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){ - this.swap( childIdx, parentIdx ); - childIdx = parentIdx; - parentIdx = Math.floor(childIdx / 2); - } - } - pop () - { - if ( this.heap.length === 1 ) - { - return undefined; - } - // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬 - const minNode = this.heap[ 1 ]; - this.heap[ 1 ] = this.heap[ this.heap.length - 1 ]; - this.heap.pop(); - let parentIdx = 1; - let leftChildIdx = 2; - let rightChildIdx = 3; - while ( parentIdx < this.heap.length ) - { - // 자식이 없는 경우 - if ( !this.heap[ leftChildIdx ] ) - { - break; - } // 왼쪽 자식만 있는 경우 - else if ( !this.heap[ rightChildIdx ] ) - { - if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] ) - { - this.swap( parentIdx, leftChildIdx ); - } - break; - // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬 - } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] ) - { - const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx; - this.swap( parentIdx, minChildIdx ); - parentIdx = minChildIdx; - leftChildIdx = parentIdx * 2 - rightChildIdx = parentIdx * 2 + 1; - } else - { - // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지 - break; - } - } - return minNode; - } - swap ( idx1, idx2 ) - { - [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ]; - } - length () - { - return this.heap.length; - } -} - -function solution ( N, road, K ) -{ - const roadsTable = {}; //전체 도로 정보 - - // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열 - for ( let i = 1; i <= N; i++ ) - { - roadsTable[ i ] = []; - } - road.forEach( road => - { - let [ sp, ep, dist ] = road; - roadsTable[ sp ].push( [ ep, dist ] ); - roadsTable[ ep ].push( [ sp, dist ] ); - } ); - - function djikstra ( sp ) - { - const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열 - const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리 - const heap = new MinHeap(); - - //시작점 삽입 - heap.push( [sp, 0] ); - - // 가장 가까운 목적지부터 순서대로 방문 - while ( heap.length() > 1 ) - { - //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리] - const [ ep, val ] = heap.pop(); - //아직 방문하지 않은 곳만 처리 - if ( !visited[ ep ] ) - { - //방문처리, 거리 저장 - visited[ ep ] = true; - dist[ ep ] = val; - //방문 지점을 거쳐서 가는 다른 목적지 구하기 - const nexts = roadsTable[ ep ]; - if ( nexts ) - { - nexts.forEach( n => - { - let [ nextEp, nextVal ] = n; - if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입 - { - heap.push( [ nextEp, val + nextVal ] ); - } - }) - } - } - } - // 거리가 K이하인 지점의 개수 반환 - const result = dist.filter( d => d <= K ).length; - return result; - } - - const answer = djikstra( 1 ); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" "b/build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" deleted file mode 100644 index 152d3b1..0000000 --- "a/build/solutions/level-2/\353\271\233\354\235\230 \352\262\275\353\241\234 \354\202\254\354\235\264\355\201\264/minjongbaek.js" +++ /dev/null @@ -1,72 +0,0 @@ -// 빛의 이동을 위한 DX, DY 변수를 선언합니다. -const DX = [-1, 1, 0, 0]; -const DY = [0, 0, -1, 1]; - -function solution(grid) { - - // DFS에 4방향을 고려하여 문제를 풉니다. - // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다. - - const answer = []; - - // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]] - const visited = Array.from({ length: grid.length }, () => []).map((v) => { - for (let i = 0; i < grid[0].length; i += 1) { - v.push(new Array(4).fill(false)); - } - return v - }); - - for (let x = 0; x < grid.length; x += 1) { - for (let y = 0; y < grid[0].length; y += 1) { - for (let d = 0; d < 4; d += 1) { - // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다. - if (!visited[x][y][d]) { - const stack = []; - stack.push([x, y, d]); - - let cnt = 0; - while (stack.length !== 0) { - const [currentX, currentY, currentD] = stack.pop(); - if (!visited[currentX][currentY][currentD]) { - visited[currentX][currentY][currentD] = true; - cnt += 1; - - const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다. - const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다. - - stack.push([nextX, nextY, nextD]) - } - - } - answer.push(cnt); - } - } - } - } - return answer.sort((a, b) => a - b); -} - -// 다음 행선지를 구하는 함수 -function getNextXY(x, y, d, xLength, yLength) { - x += DX[d]; - y += DY[d]; - - // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다. - if (x < 0) x = xLength - 1; - if (x >= xLength) x = 0; - if (y < 0) y = yLength - 1; - if (y >= yLength) y = 0; - - return [x, y]; -} - -// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수 -function getNextD(command, d) { - if (command === 'L') { - d = [2, 3, 1, 0][d] - } else if (command === 'R') { - d = [3, 2, 0, 1][d] - } - return d -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" "b/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" deleted file mode 100644 index c1f51ea..0000000 --- "a/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/codeisneverodd.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(n) { - const snail = Array.from(Array(n), (_, index) => Array(index + 1)); - let currentNum = 0; - let [currentRow, currentCol] = [-1, 0]; - let shouldMove = n; - while (shouldMove > 0) { - for (let i = 0; i < shouldMove; i++) - snail[++currentRow][currentCol] = ++currentNum; - for (let i = 0; i < shouldMove - 1; i++) - snail[currentRow][++currentCol] = ++currentNum; - for (let i = 0; i < shouldMove - 2; i++) - snail[--currentRow][--currentCol] = ++currentNum; - shouldMove -= 3; - } - return snail.flatMap((num) => num); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" "b/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" deleted file mode 100644 index c18f065..0000000 --- "a/build/solutions/level-2/\354\202\274\352\260\201 \353\213\254\355\214\275\354\235\264/jaewon1676.js" +++ /dev/null @@ -1,19 +0,0 @@ -function solution(n) { - const answer = new Array(n).fill().map((e, i) => new Array(i + 1)); - // 이차원배열을 만들어준다 - - let count = 0; - let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다. - let y = 0; // 열 - while (n > 0) { - for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다. - for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다. - for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다. - - n -= 3; - } - return answer.flatMap(e => e); - // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. - // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] - // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7] -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\230\354\213\235 \354\265\234\353\214\200\355\231\224/codeisneverodd.js" "b/build/solutions/level-2/\354\210\230\354\213\235 \354\265\234\353\214\200\355\231\224/codeisneverodd.js" deleted file mode 100644 index b9b46f9..0000000 --- "a/build/solutions/level-2/\354\210\230\354\213\235 \354\265\234\353\214\200\355\231\224/codeisneverodd.js" +++ /dev/null @@ -1,30 +0,0 @@ -function solution(expression) { - var answer = 0; - const mathExp = ['*', '+', '-'] - let priorityArr = Permutation(mathExp, 3) - const calculated = [] - for (const priority of priorityArr) { - const expressionArr = expression.split(/(\D)/) - for (const exp of priority) { - while (expressionArr.includes(exp)) { - const index = expressionArr.indexOf(exp) - expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join(''))) - } - } - calculated.push(Math.abs(expressionArr[0])) - } - answer = Math.max(...calculated) - return answer -} - -function Permutation(arr, r) { - const result = [] - if (r === 1) return arr.map((num) => [num]) - arr.forEach((fixed, index, org) => { - const rest = [...org.slice(0, index), ...org.slice(index + 1)] - const permutation = Permutation(rest, r - 1) - const attached = permutation.map((numbers) => [fixed, ...numbers]) - result.push(...attached) - }) - return result -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" "b/build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" deleted file mode 100644 index a28855b..0000000 --- "a/build/solutions/level-2/\354\210\234\354\234\204 \352\262\200\354\203\211/codeisneverodd.js" +++ /dev/null @@ -1,48 +0,0 @@ -function solution(infos, queries) { - const infoData = {}; - - const fetchInfoData = (keyArr, score, start) => { - const key = keyArr.join(''); - - infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]); - - for (let i = start; i < keyArr.length; i++) { - fetchInfoData( - keyArr.map((v, index) => (index === i ? '-' : v)), - score, - i + 1 - ); - } - }; - - const getPassCount = (key, passScore) => { - const scores = infoData[key]; - - if (!scores) return 0; - - let [left, right] = [0, scores.length]; - - while (left < right) { - const mid = Math.floor((left + right) / 2); - scores[mid] >= passScore ? (right = mid) : (left = mid + 1); - } - - return scores.length - left; - }; - - infos - .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]]) - .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0)); - - Object.keys(infoData).forEach(key => { - infoData[key].sort((a, b) => a - b); - }); - - return queries - .map(query => query.replace(/ and /g, '').split(' ')) - .map(([key, passScore]) => getPassCount(key, +passScore)); -} -// 주의 할 점 -// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림 -// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림. -// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음. \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" "b/build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" deleted file mode 100644 index 97cfa53..0000000 --- "a/build/solutions/level-2/\354\210\253\354\236\220 \353\270\224\353\241\235/iHoHyeon.js" +++ /dev/null @@ -1,29 +0,0 @@ -function solution(begin, end) { - return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx)); - // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다. -} - -const calc = (number) => { - if (number === 1) return 0; - // 1번째 위치는 무조건 0블록이 위치 - - for (let i = 2; i <= Math.sqrt(number); i++) { - if (number % i === 0 && number / i <= 10_000_000) return number / i; - // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외 - } - - return 1; -}; - -/* - 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는 - 시간 / 공간 복잡도가 급상승 - - -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자 - - -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다. - - -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다. - - + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다. -*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" deleted file mode 100644 index 6562ab4..0000000 --- "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/codeisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(n) { //수학적 풀이는 별도로 하지 않았습니다. - var answer = 0; - for (let i = 1; i <= n; i++) { - let sum = 0 - for (let j = i; j <= n; j++) { - sum += j - if (sum >= n) { - if (sum === n) answer++ - break - } - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" deleted file mode 100644 index fba1ba0..0000000 --- "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/prove-ability.js" +++ /dev/null @@ -1,15 +0,0 @@ -function solution(n) { - let answer = 0; - for(let i = 1; i <= n; i++) { - let sum = 0; - for(let j = i; j <= n; j++) { - sum += j; - if(sum > n) break; - if(n === sum) { - answer++; - break; - } - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" "b/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" deleted file mode 100644 index 986bb93..0000000 --- "a/build/solutions/level-2/\354\210\253\354\236\220\354\235\230 \355\221\234\355\230\204/yongchanson.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(n) { - /* - 정답 = n의 홀수 약수의 개수 - 15의 홀수 약수 : 1,3,5,15 - 1+2+3+4+5=15 (중간값 3) - 4+5+6=15 (중간값 5) - 7+8=15 (연속된 값) - 15=15 (15) - */ - let result = 0; - - for (let i = 1; i <= n; i++) { - if (n % i == 0 && i % 2 == 1) result++; - } - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" "b/build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" deleted file mode 100644 index 6d1e0d5..0000000 --- "a/build/solutions/level-2/\354\212\244\355\202\254\355\212\270\353\246\254/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(skill, skill_trees) { - var answer = 0; - for (const tree of skill_trees) { - let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x)) - if (checkOrder(check)) answer += 1 - } - return answer; -} - -function checkOrder(checkArr) { - for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false - return true -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" "b/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" deleted file mode 100644 index 33f7731..0000000 --- "a/build/solutions/level-2/\354\226\221\352\266\201\353\214\200\355\232\214/codeisneverodd.js" +++ /dev/null @@ -1,69 +0,0 @@ -// 문제 풀이 전략 -// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다. -// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다. -// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다. -// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다. -// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다. -// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다 -// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다. -// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다. -function solution(possibleArrows, apeachComb) { - const compareTable = apeachComb.map(apeachArrow => ({ - apeachArrow, - ryanArrow: 0, - })); - const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows); - const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff)); - const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff); - if (maxScoreDiff <= 0) return [-1]; - const getIndexOfLastArrow = arrowTable => - arrowTable.length - - arrowTable - .slice() - .reverse() - .findIndex(x => x !== 0); - return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable; -} -function getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) { - const { apeachArrow } = compareTable[currentIndex]; - const lastIndex = compareTable.length - 1; - const possibleRyanArrows = [ - 0, - numberOfArrowLeft > apeachArrow && apeachArrow + 1, - numberOfArrowLeft >= apeachArrow && apeachArrow, - ]; - - if (currentIndex === lastIndex || numberOfArrowLeft === 0) { - if (numberOfArrowLeft > 0) { - compareTable[compareTable.length - 1] = { - apeachArrow, - ryanArrow: numberOfArrowLeft, - }; - } - const appeachScore = compareTable.reduce( - (acc, { apeachArrow, ryanArrow }, index) => - apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc, - 0 - ); - const ryanScore = compareTable.reduce( - (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc), - 0 - ); - return [ - { - scoreDiff: ryanScore - appeachScore, - ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow), - }, - ]; - } - return [ - ...possibleRyanArrows.flatMap(ryanUsedArrow => { - const nextCompareTable = [...compareTable]; - nextCompareTable.splice(currentIndex, 1, { - apeachArrow, - ryanArrow: ryanUsedArrow, - }); - return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow); - }), - ]; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\201\354\226\264 \353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\230\201\354\226\264 \353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" deleted file mode 100644 index eceaa27..0000000 --- "a/build/solutions/level-2/\354\230\201\354\226\264 \353\201\235\353\247\220\354\236\207\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(n, words) { - var answer = []; - let turn = 1 - for (let i = 1; i < words.length; i++) { - let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i])) - if (i % n === 0) turn++ - if (!pass) return [i % n + 1, turn] - } - return [0, 0]; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" "b/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" deleted file mode 100644 index e69153a..0000000 --- "a/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/codeisneverodd.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(n, a, b) { - let currentRound = 1; - const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호 - while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다. - if (myNextNumber(a) === myNextNumber(b)) break - a = myNextNumber(a) - b = myNextNumber(b) - currentRound++ - } - return currentRound -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" "b/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" deleted file mode 100644 index e20837d..0000000 --- "a/build/solutions/level-2/\354\230\210\354\203\201 \353\214\200\354\247\204\355\221\234/le2sky.js" +++ /dev/null @@ -1,24 +0,0 @@ -function solution(n, a, b) { - let arr = Array.from({ length: n }, () => 0) - arr[b - 1] = "B" - arr[a - 1] = "A" - - const isDiff = () => { - return ( - (arr.indexOf("A") + 1 > arr.length / 2 && arr.indexOf("B") + 1 <= arr.length / 2) || - (arr.indexOf("A") + 1 <= arr.length / 2 && arr.indexOf("B") + 1 > arr.length / 2)) ? true : false - }; - const isLeft = () => { - return (arr.indexOf("A") + 1 > arr.length / 2) ? false : true - }; - - //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴 - while (!isDiff()) { - if (isLeft()) { - arr.splice(arr.length / 2) - } else { - arr.splice(0, arr.length / 2) - } - } - return Math.log2(arr.length) -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" deleted file mode 100644 index cca7c29..0000000 --- "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/chaerin-dev.js" +++ /dev/null @@ -1,42 +0,0 @@ -function solution(record) { - // 최종 메시지를 저장할 배열 - let result = []; - // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열 - let resultId = []; - // 유저의 아이디: 닉네임 쌍을 저장할 Map - let idNameMap = new Map(); - - // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환 - record = record.map((e) => e.split(" ")); - - // record의 각 요소에 대해 - record.forEach((e) => { - // 각 요소의 첫 번째 요소(Enter/Leave/Change)가 - switch (e[0]) { - // Enter이면 - case "Enter": - // resultID 배열에 들어온 유저의 아이디 저장 - resultId.push(e[1]); - // result 배열에 닉네임을 제외하고 표시될 메시지 저장 - result.push("님이 들어왔습니다."); - // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장 - idNameMap.set(e[1], e[2]); - break; - // Leave이면 - case "Leave": - // resultID 배열에 들어온 유저의 아이디 저장 - resultId.push(e[1]); - // result 배열에 닉네임을 제외하고 표시될 메시지 저장 - result.push("님이 나갔습니다."); - break; - // Change이면 - case "Change": - // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경 - idNameMap.set(e[1], e[2]); - break; - } - }); - - // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환 - return result.map((e, i) => idNameMap.get(resultId[i]) + e); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" deleted file mode 100644 index 8a5302c..0000000 --- "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/codeisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(record) { - var answer = []; - const users = {} - record.map(history => { - const [action, id, name] = history.split(' ') - if (action !== 'Leave') users[id] = name - }) - record.map(history => { - const [action, id, name] = history.split(' ') - if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`) - if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`) - }) - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" "b/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" deleted file mode 100644 index 4c363a8..0000000 --- "a/build/solutions/level-2/\354\230\244\355\224\210\354\261\204\355\214\205\353\260\251/jaewon1676.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(record) { - let answer = []; - const map = new Map(); - - for (let i = 0; i < record.length; ++i) { - const [state, uid, name] = record[i].split(' '); - - if (state == 'Leave') { - answer.push([uid, '님이 나갔습니다.']); - - continue; - } - - if (state == 'Enter') { - answer.push([uid, '님이 들어왔습니다.']); - } - map.set(uid, name); - } - return answer.map(ele => map.get(ele[0]) + ele[1]); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" "b/build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" deleted file mode 100644 index ca1567c..0000000 --- "a/build/solutions/level-2/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270/codeisneverodd.js" +++ /dev/null @@ -1,9 +0,0 @@ -function solution(s) { - let opened = 0; - for (const bracket of s) { - if (bracket === "(") opened += 1; - if (bracket === ")") opened -= 1; - if (opened < 0) return false; - } - return opened === 0; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" "b/build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" deleted file mode 100644 index 93962be..0000000 --- "a/build/solutions/level-2/\354\234\204\354\236\245/chaerin-dev.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(clothes) { - // 각 카테고리별 의상의 수를 clothsObj 객체에 저장 - const clothsObj = {}; - clothes.forEach((cloth) => - clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1) - ); - - // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐 - // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나) - // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨 - let answer = 1; - for (let key of Object.keys(clothsObj)) { - answer *= clothsObj[key] + 1; - } - - // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기 - return answer - 1; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" "b/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" deleted file mode 100644 index 5055174..0000000 --- "a/build/solutions/level-2/\354\234\204\354\236\245/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(clothes) { - var answer = 0; - const spyWear = {}; - for (const clothNPart of clothes) { - if (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = []; - spyWear[clothNPart[1]].push(clothNPart[0]); - } - const clothesCount = []; - for (const part in spyWear) clothesCount.push(spyWear[part].length + 1); - answer = - clothesCount.reduce((previous, current) => previous * current, 1) - 1; - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" "b/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" deleted file mode 100644 index 5ae5612..0000000 --- "a/build/solutions/level-2/\354\234\204\354\236\245/hyosung.js" +++ /dev/null @@ -1,19 +0,0 @@ -function solution(clothes) { - let answer = 1; - // 옷 종류 - const types = {}; - // 반복문 최적화 - length, 비교연산 제거 - const length = clothes.length; - for (let i = length; i--; ) { - // 해당 옷의 종류가 없다면 종류 1 - if (!types[clothes[i][1]]) types[clothes[i][1]] = 1; - // 해당 옷의 종류가 있다면 종류 증가 - else types[clothes[i][1]] += 1; - } - // (종류 별 값 + 1 ) 을 다 곱셈 - Object.values(types).forEach((v) => { - answer *= v + 1; - }); - - return answer - 1; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" "b/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" deleted file mode 100644 index 9556533..0000000 --- "a/build/solutions/level-2/\354\234\204\354\236\245/jaewon1676.js" +++ /dev/null @@ -1,21 +0,0 @@ -function solution(clothes) { - var answer = 1; - var obj={}; - for(var i=0;i 1){ - let reamain = s.replace(/0/g,"").length - box[0] += 1 - box[1] += (s.length - reamain) - s = reamain.toString(2) - } - return box; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 7f4d66e..0000000 --- "a/build/solutions/level-2/\354\235\264\354\247\204 \353\263\200\355\231\230 \353\260\230\353\263\265\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,17 +0,0 @@ -function solution(s) { - const removeZero = s => { - const removed = s - .split('') - .filter(n => n !== '0') - .join(''); - return { removed, count: s.length - removed.length }; - }; - - const convertToBinary = (s, turnCount, removedCount) => { - if (s === '1') return [turnCount, removedCount]; - const { removed, count } = removeZero(s); - return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count); - }; - - return convertToBinary(s, 0, 0); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" deleted file mode 100644 index 27faa44..0000000 --- "a/build/solutions/level-2/\354\240\204\353\240\245\353\247\235\354\235\204 \353\221\230\353\241\234 \353\202\230\353\210\204\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,26 +0,0 @@ -function solution(n, wires) { - const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b); - - const convertWiresToTree = wires => [...new Set(wires.flat())]; - - const generateTree = (wires, tree) => { - if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree; - - const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire)); - const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))]; - - return [...new Set(generateTree(nextWires, nextTree))]; - }; - - let minDiff = Infinity; - const length = convertWiresToTree(wires).length; - - wires.forEach((_, i) => { - const [initWire, ...remainWires] = wires.filter((_, j) => j !== i); - const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length; - const diff = Math.abs(lengthA - (length - lengthA)); - minDiff = Math.min(diff, minDiff); - }); - - return minDiff; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" deleted file mode 100644 index 5791f0e..0000000 --- "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/codeisneverodd.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(n) { - var ans = 0; - while (n > 0) { - if (n % 2 !== 0) { - n = (n - 1) / 2 - ans++ - } else { - n = n / 2 - } - } - return ans; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" "b/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" deleted file mode 100644 index 9d7cffa..0000000 --- "a/build/solutions/level-2/\354\240\220\355\224\204\354\231\200 \354\210\234\352\260\204 \354\235\264\353\217\231/yongchanson.js" +++ /dev/null @@ -1,8 +0,0 @@ -function solution(n) { - let result = 0; - while (n > 0) { - result += n % 2; - n = Math.floor(n / 2); - } - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" "b/build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" deleted file mode 100644 index 817534e..0000000 --- "a/build/solutions/level-2/\354\241\260\354\235\264\354\212\244\355\213\261/codeisneverodd.js" +++ /dev/null @@ -1,22 +0,0 @@ -function solution(name) { - var answer = 0; - const length = name.length; - let upDownCount = 0 - let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때 - for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i]) - for (let startOfA = 0; startOfA < name.length; startOfA++) { - let endOfA = startOfA + 1; - while (endOfA < length && name[endOfA] === 'A') endOfA++; - const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA] - leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1 - leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A.. - } - answer = upDownCount + Math.min(...leftRightCountList) - return answer; -} - -function minUpOrDownCount(destination) { - const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - const index = Alphabet.indexOf(destination) - return Math.min(index, Alphabet.length - index) -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" "b/build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" deleted file mode 100644 index 34d2f8b..0000000 --- "a/build/solutions/level-2/\354\243\274\354\260\250 \354\232\224\352\270\210 \352\263\204\354\202\260/ljw0096.js" +++ /dev/null @@ -1,61 +0,0 @@ -function solution(fees, records) { - const answer = [] - - const parkingTable = getParkingTable(records) - const sortedKeys = Object.keys(parkingTable).sort() - - for (const targetCar of sortedKeys) { - if (parkingTable[targetCar].length % 2 === 1) { - parkingTable[targetCar].push(['23:59', 'OUT']) - } - const totalTime = getTotalTime(parkingTable, targetCar) - const fee = calculateFee(totalTime, fees) - answer.push(fee) - } - - return answer -} - -function getParkingTable(records) { - const parkingTable = {} - - records.forEach((val) => { - const info = val.split(' ') - if (Object.keys(parkingTable).includes(info[1])) { - parkingTable[info[1]].push([info[0], info[2]]) - } else { - parkingTable[info[1]] = [[info[0], info[2]]] - } - }) - - return parkingTable -} - -function getTotalTime(parkingTable, targetCar) { - let totalTime = 0 - for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) { - totalTime += calculateTotalTime( - parkingTable[targetCar][i][0], - parkingTable[targetCar][i + 1][0] - ) - } - return totalTime -} - -function calculateTotalTime(time1, time2) { - const [hour1, minute1] = time1.split(':').map((val) => parseInt(val)) - const [hour2, minute2] = time2.split(':').map((val) => parseInt(val)) - - return hour2 * 60 + minute2 - (hour1 * 60 + minute1) -} - -function calculateFee(totalTime, feeInfo) { - let fee = 0 - if (feeInfo[0] >= totalTime) { - fee = feeInfo[1] - } else { - fee = - feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3] - } - return fee -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" "b/build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" deleted file mode 100644 index 7dbe374..0000000 --- "a/build/solutions/level-2/\354\244\204 \354\204\234\353\212\224 \353\260\251\353\262\225/codeisneverodd.js" +++ /dev/null @@ -1,36 +0,0 @@ -function solution(n, k) { - const getFactorial = n => { - const result = [1, 1, 2, ...Array(n - 2)]; - result.forEach((_, i) => { - if (i > 2) result[i] = result[i - 1] * i; - }); - return result; - }; - - const getDivision = (dividend, divisor) => { - const quotient = Math.floor(dividend / divisor); - const remainder = dividend % divisor; - return [quotient, remainder]; - }; - - const stepCount = getFactorial(n).reverse(); - - const generateSteps = (k, step) => { - const [q, r] = getDivision(k, stepCount[step]); - if (r === 0) return [q]; - return [q, ...generateSteps(r, step + 1)]; - }; - - const answer = []; - - const steps = generateSteps(k - 1, 0); - - const notUsedNums = Array.from({ length: n }, (_, i) => i + 1); - - steps.slice(1).forEach(q => { - answer.push(notUsedNums[q]); - notUsedNums.splice(q, 1); - }); - - return [...answer, ...notUsedNums]; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 32c568c..0000000 --- "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(s) { - var answer = -1; - let notPairStack = [] - notPairStack.push(s[0]) - for (let i = 1; i < s.length; i++) { - if (notPairStack[notPairStack.length - 1] === s[i]) { - notPairStack.pop() - } else { - notPairStack.push(s[i]) - } - } - answer = notPairStack.length === 0 ? 1 : 0 - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" deleted file mode 100644 index 829b3bd..0000000 --- "a/build/solutions/level-2/\354\247\235\354\247\200\354\226\264 \354\240\234\352\261\260\355\225\230\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(s){ - let cnt = 0; // 빼준 부분을 카운트 해줍니다 - let answer; - let stack = [] - for (let i of s){ - if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다 - stack.pop(); - cnt++;; - } else { - stack.push(i) - } - } - - (s.length / 2 == cnt ? answer = 1 : answer = 0 ) - // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다 - return answer; - } - // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다 \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" deleted file mode 100644 index 75739e7..0000000 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/codeisneverodd.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(s) { - var answer = ''; - const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b) - answer = arr[0] + ' ' + arr[arr.length - 1] - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" deleted file mode 100644 index dd47ba1..0000000 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/jaewon1676.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(s) { - s = s.split(' ') - s.sort((a, b) => {return a - b}) // 오름차순 정렬 - let small = s[0] // s의 최솟값 - let large = s[s.length - 1] // s의 최댓값 - return (small + ' ' + large) -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" deleted file mode 100644 index 5f5aad5..0000000 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/prove-ability.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(s) { - s = s.split(" ").map((v) => parseInt(v, 10)) - return `${Math.min(...s)} ${Math.max(...s)}`; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" "b/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" deleted file mode 100644 index c2f9397..0000000 --- "a/build/solutions/level-2/\354\265\234\353\214\223\352\260\222\352\263\274 \354\265\234\354\206\237\352\260\222/yongchanson.js" +++ /dev/null @@ -1,6 +0,0 @@ -function solution(s) { - let arr = s.split(" ").sort((a, b) => a - b); - arr.splice(1, arr.length - 2, " "); - let result = arr.join(""); - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index 0dbfa32..0000000 --- "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,7 +0,0 @@ -function solution(A, B) { - var answer = 0; - A = A.sort((a, b) => a - b) - B = B.sort((a, b) => b - a) - for (let i = 0; i < A.length; i++) answer += A[i] * B[i] - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" deleted file mode 100644 index c1b8e5c..0000000 --- "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/prove-ability.js" +++ /dev/null @@ -1,11 +0,0 @@ -function solution(A,B){ - let sum = 0; - A.sort((a, b) => a - b); - B.sort((a, b) => b - a); - - for(let i = 0, len = A.length; i < len; i++) { - sum += A[i] * B[i]; - } - - return sum; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" "b/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" deleted file mode 100644 index 82f70b8..0000000 --- "a/build/solutions/level-2/\354\265\234\354\206\237\352\260\222 \353\247\214\353\223\244\352\270\260/yongchanson.js" +++ /dev/null @@ -1,5 +0,0 @@ -function solution(A, B) { - A.sort((a, b) => a - b); - B.sort((a, b) => b - a); - return A.reduce((t, n, i) => t + n * B[i], 0); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" "b/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" deleted file mode 100644 index 70d6798..0000000 --- "a/build/solutions/level-2/\354\271\264\355\216\253/codeisneverodd.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(brown, yellow) { - var answer = []; - const size = brown + yellow - answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0] - return answer; -} - -function widthHeightPair(size) { - let result = [] - for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i]) - return result -} \ No newline at end of file diff --git "a/build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" "b/build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" deleted file mode 100644 index beeda9d..0000000 --- "a/build/solutions/level-2/\354\271\264\355\216\253/jaewon1676.js" +++ /dev/null @@ -1,24 +0,0 @@ -function solution(brown, yellow) { - var answer = []; - let sum = brown + yellow; - - //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색) - for(let height=3; height { - const length = matrix.length; - const half = length / 2; - const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0])); - - if (pass(matrix)) return [matrix[0][0]]; - if (length <= 2) return matrix; - - const startPoints = [ - [0, 0], - [0, half], - [half, 0], - [half, half], - ]; - - return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half)))); - }; - return quad(arr) - .flat(Infinity) - .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]); -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" deleted file mode 100644 index 824254e..0000000 --- "a/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,14 +0,0 @@ -function solution(number, k) { - var answer = ''; - let answerStack = [0] - let deleteCount = -1 - for (let i = 0; i < number.length; i++) { - while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) { - answerStack.pop() - deleteCount++ - } - if (answerStack.length < number.length - k) answerStack.push(number[i]) - } - answer = answerStack.join('') - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" "b/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" deleted file mode 100644 index 1071977..0000000 --- "a/build/solutions/level-2/\355\201\260 \354\210\230 \353\247\214\353\223\244\352\270\260/jaewon1676.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(number, k) { - const stack = []; - let answer = ''; - - for(let i=0; i 0 && stack[stack.length-1] < el){ - stack.pop(); - k--; - } - stack.push(el); - } - stack.splice(stack.length-k, k); - answer = stack.join(""); - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" "b/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" deleted file mode 100644 index 0fce1d8..0000000 --- "a/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(numbers, target) { - var answer = 0; - const binaryLength = numbers.length; - const binary = 2 ** binaryLength; - for (let i = 0; i < binary; i++) { - const numSlice = numbers.slice(); - const binaryString = i.toString(2).padStart(binaryLength, '0'); - for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null; - const calculated = numSlice.reduce((prev, current) => prev + current); - if (calculated === target) answer += 1; - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" "b/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" deleted file mode 100644 index 46fac1b..0000000 --- "a/build/solutions/level-2/\355\203\200\352\262\237 \353\204\230\353\262\204/ssi02014.js" +++ /dev/null @@ -1,19 +0,0 @@ -function solution(numbers, target) { - let answer = 0; - - dfs(0, 0); - return answer; - - function dfs(index, sum) { - // 재귀 종료 - if (index === numbers.length) { - if (sum === target) { - answer++; - } - return; - } - - dfs(index + 1, sum + numbers[index]); - dfs(index + 1, sum - numbers[index]); - } -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" "b/build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" deleted file mode 100644 index dcbb1db..0000000 --- "a/build/solutions/level-2/\355\212\234\355\224\214/chaerin-dev.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(s) { - // 문자열 -> 정수 이차원 배열 - const sArr = s - .substring(2, s.length - 2) - .split("},{") - .map((e) => e.split(",").map((e) => parseInt(e))) - .sort((a, b) => a.length - b.length); - // 정답을 저장할 배열 - const answer = []; - // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가 - for (let i = 0; i < sArr.length; i++) { - for (let j = 0; j < sArr[i].length; j++) { - const temp = sArr[i][j]; - if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]); - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" "b/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" deleted file mode 100644 index d41ab1f..0000000 --- "a/build/solutions/level-2/\355\212\234\355\224\214/codeisneverodd.js" +++ /dev/null @@ -1,10 +0,0 @@ -function solution(s) { - var answer = []; - let sets = s - .slice(2, -2) - .split('},{') - .map(set => set.split(',').map(x => parseInt(x))) - .sort((a, b) => a.length - b.length) - for (const set of sets) answer.push(...set.filter(x => !answer.includes(x))) - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" deleted file mode 100644 index c2066d8..0000000 --- "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/codeisneverodd.js" +++ /dev/null @@ -1,47 +0,0 @@ -//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다. -function solution(priorities, location) { - let answer = 0; - const printer = new Queue; - priorities.forEach((priority, index) => { - printer.enqueue([priority, index]) - }) - while (printer.size() > 0) { - const check = printer.dequeue() - const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length - if (countHigherPriority > 0) { - printer.enqueue(check) - } else { - answer += 1 - if (check[1] === location) break - } - - } - return answer; -} - -class Queue { - constructor() { - this.queue = [] - this.front = 0 - this.rear = 0 - } - - enqueue(value) { - this.queue[this.rear++] = value - } - - dequeue() { - const value = this.queue[this.front] - delete this.queue[this.front] - this.front += 1 - return value - } - - peek() { - return this.queue(this.front) - } - - size() { - return this.rear - this.front - } -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" deleted file mode 100644 index 6dc890e..0000000 --- "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/createhb21.js" +++ /dev/null @@ -1,18 +0,0 @@ -function solution(priorities, location) { - var answer = priorities.map((priority, index) => { - return { - index, - priority - }; - }); - - let queue = []; - - while(answer.length > 0){ - const first = answer.shift(); - const isPriority = answer.some((p) => p.priority > first.priority); - isPriority ? answer.push(first) : queue.push(first); - } - const idx = queue.findIndex(p => p.index === location) + 1; - return idx; - } \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" "b/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" deleted file mode 100644 index d113bd3..0000000 --- "a/build/solutions/level-2/\355\224\204\353\246\260\355\204\260/jaewon1676.js" +++ /dev/null @@ -1,21 +0,0 @@ -function solution(priorities, location) { - var answer = 0; - while (true) { - - if (priorities[0] < Math.max(...priorities)) { - if (location - 1 < 0) location = priorities.length - priorities.push(priorities.shift()) - location--; - } else { - answer++; - if (location - 1 < 0) { - return answer; - } - priorities.shift() - location--; - } - console.log(priorities, location, answer) - - } - return answer -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" "b/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" deleted file mode 100644 index 66a28a6..0000000 --- "a/build/solutions/level-2/\355\224\274\353\241\234\353\217\204/pereng11.js" +++ /dev/null @@ -1,22 +0,0 @@ -//완전 탐색, greedy O(N^2) -function solution(currentFatigue, dungeons) { - return getMaxCount(currentFatigue, 0, dungeons); -} - -function getMaxCount(currentFatigue, visitedCount, dungeons) { - const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue); - if (possibleDungeons.length === 0) return visitedCount; - - const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => { - const [_, usedFatigue] = curr; - const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex); - const currentCount = getMaxCount( - currentFatigue - usedFatigue, - visitedCount + 1, - nextDungeons - ); - return Math.max(currentCount, prevCount); - }, 0); - - return maxCount; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" deleted file mode 100644 index 68819dd..0000000 --- "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/codeisneverodd.js" +++ /dev/null @@ -1,13 +0,0 @@ -function solution(n) { - var answer = 0; - answer = fibonacci1234567(n) - return answer; -} - -function fibonacci1234567(n) { //재귀적으로 하면 시간초과 - let fiboArr = new Array(n + 1).fill(0) - fiboArr[0] = 0 - fiboArr[1] = 1 - for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과 - return fiboArr[n] -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/jaewon1676.js" "b/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/jaewon1676.js" deleted file mode 100644 index 523a6f5..0000000 --- "a/build/solutions/level-2/\355\224\274\353\263\264\353\202\230\354\271\230 \354\210\230/jaewon1676.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(n) { - let f_1 = 0; - let f_2 = 1; - - for (let i=2; i<=n; i++) { - let temp = (f_1 + f_2) % 1234567; - f_1 = f_2; - f_2 = temp; - } - - return f_2; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" "b/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" deleted file mode 100644 index b422316..0000000 --- "a/build/solutions/level-2/\355\225\230\353\205\270\354\235\264\354\235\230 \355\203\221/codeisneverodd.js" +++ /dev/null @@ -1,25 +0,0 @@ -function solution(n) { - return move(1, 3, 2, n); -} -const move = (departure, destination, waypoint, numberOfPlate) => { - if (numberOfPlate === 1) return [[departure, destination]]; - return [ - ...move(departure, waypoint, destination, numberOfPlate - 1), - ...move(departure, destination, waypoint, 1), - ...move(waypoint, destination, departure, numberOfPlate - 1), - ]; -}; -//재귀를 생각해보기에 좋은 문제입니다. -//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi -/* -n개가 있다면 -1. 1->2로 n-1개를 옮김 -2. 1->3으로 가장 큰 1개를 옮김 -3. 2->1로 n-2개를 옮김 -4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김 -의 반복 - -결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨. -a->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 -함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음. -*/ \ No newline at end of file diff --git "a/build/solutions/level-2/\355\226\211\353\240\254 \355\205\214\353\221\220\353\246\254 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" "b/build/solutions/level-2/\355\226\211\353\240\254 \355\205\214\353\221\220\353\246\254 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" deleted file mode 100644 index 41cd67a..0000000 --- "a/build/solutions/level-2/\355\226\211\353\240\254 \355\205\214\353\221\220\353\246\254 \355\232\214\354\240\204\355\225\230\352\270\260/codeisneverodd.js" +++ /dev/null @@ -1,24 +0,0 @@ -function solution(rows, columns, queries) { - var answer = []; - let matrix = new Array(rows) - for (let i = 0; i < rows; i++) matrix[i] = new Array(columns) - for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1 - for (const query of queries) { - let order = [] - const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1] - //fill order (row1->row2, col1->col2, row2->row2, col2->col1) - for (let i = row1; i <= row2; i++) order.push(matrix[i][col1]) - for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i]) - for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2]) - for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i]) - //rotate clockwise - order.push(order.shift()) - answer.push(Math.min(...order)) - //change value in matrix - for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift() - for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift() - for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift() - for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift() - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" deleted file mode 100644 index c8f5b36..0000000 --- "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/codeisneverodd.js" +++ /dev/null @@ -1,12 +0,0 @@ -function solution(arr1, arr2) { - const [row, col] = [arr1.length, arr2[0].length] - let answer = new Array(row); - for (let i = 0; i < row; i++) answer[i] = new Array(col) - //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값 - for (let i = 0; i < row; i++) { - for (let j = 0; j < col; j++) { - answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0) - } - } - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/prove-ability.js" "b/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/prove-ability.js" deleted file mode 100644 index ab7ace0..0000000 --- "a/build/solutions/level-2/\355\226\211\353\240\254\354\235\230 \352\263\261\354\205\210/prove-ability.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(arr1, arr2) { - var answer = []; - // 행만큼 반복 - for(let i = 0, len = arr1.length; i < len; i++) { - const arr = [] - // 열만큼 반복 - for(let j = 0, len = arr1[i].length; j < len; j++) { - // 각의 배열에서 행을 더해서 arr push - arr.push(arr1[i][j] + arr2[i][j]) - } - // 열 만큼 추가된 arr 를 answer 가 추가 - answer.push(arr) - } - - return answer; -} \ No newline at end of file diff --git "a/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" "b/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" deleted file mode 100644 index a37981f..0000000 --- "a/build/solutions/level-2/\355\233\204\353\263\264\355\202\244/codeisneverodd.js" +++ /dev/null @@ -1,47 +0,0 @@ -function solution(relation) { - //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다. - //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다. - //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다. - const keys = [] - const totalAttrCount = relation[0].length - const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1] - - //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수 - const isUnique = (relation, attrIndexComb) => { - let result = Array.from(Array(relation.length), x => '') - for (const attrIndex of attrIndexComb) { - relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음. - } - return result.length === [...new Set(result)].length - } - - //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다. - const isMinimal = (attrComb) => { - for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false - return true - } - - //가능한 모든 조합을 검사 - for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) { - const combinations = getCombinations(indexList, attrCount) - for (const attrComb of combinations) { - if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb) - } - } - - return keys.length -} - -//Fn for 1. 조합을 반환하는 함수 -const getCombinations = (array, selectNumber) => { - const result = []; - if (selectNumber === 1) { - return array.map((element) => [element]); - } - array.forEach((fixed, index, origin) => { - const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1); - const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]); - result.push(...attached); - }); - return result; -} \ No newline at end of file diff --git "a/build/solutions/level-3/\352\260\200\354\236\245 \353\250\274 \353\205\270\353\223\234/codeisneverodd.js" "b/build/solutions/level-3/\352\260\200\354\236\245 \353\250\274 \353\205\270\353\223\234/codeisneverodd.js" deleted file mode 100644 index 154bb1a..0000000 --- "a/build/solutions/level-3/\352\260\200\354\236\245 \353\250\274 \353\205\270\353\223\234/codeisneverodd.js" +++ /dev/null @@ -1,20 +0,0 @@ -function solution(n, edge) { - const graph = Array.from(Array(n + 1), () => []) - for (const [src, dest] of edge) { - graph[src].push(dest) - graph[dest].push(src) - } - const distance = Array(n + 1).fill(0) - distance[1] = 1 - const toBeSearched = [1] - while (toBeSearched.length > 0) { - const src = toBeSearched.shift() - for (const dest of graph[src]) { - if (distance[dest] === 0) { - distance[dest] = distance[src] + 1 - toBeSearched.push(dest) - } - } - } - return distance.filter(x => x === Math.max(...distance)).length -} \ No newline at end of file diff --git "a/build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" "b/build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" deleted file mode 100644 index 816dae4..0000000 --- "a/build/solutions/level-3/\353\204\244\355\212\270\354\233\214\355\201\254/codeisneverodd.js" +++ /dev/null @@ -1,27 +0,0 @@ -function solution(n, computers) { - let answer = 0 - const visited = new Array(n).fill(false) - const newNetwork = (startComputer) => { - //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다. - const toBeVisited = [startComputer] - while (toBeVisited.length > 0) { - //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다 - const currentComputer = toBeVisited.pop() - visited[currentComputer] = true - for (let nextComputer = 0; nextComputer < n; nextComputer++) { - if (!visited[nextComputer] && computers[currentComputer][nextComputer]) { - toBeVisited.push(nextComputer) - } - } - } - } - - for (let startComputer = 0; startComputer < n; startComputer++) { - if (!visited[startComputer]) { - newNetwork(startComputer) - //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다. - answer++ - } - } - return answer -} \ No newline at end of file diff --git "a/build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" "b/build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" deleted file mode 100644 index 69803dd..0000000 --- "a/build/solutions/level-3/\353\213\250\354\206\215\354\271\264\353\251\224\353\235\274/jaewon1676.js" +++ /dev/null @@ -1,31 +0,0 @@ -function solution(routes) { - let cctv = 1; // cctv의 개수는 최소 1개 - routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬 - // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ] - let out = routes[0][1]; // -15 - // 나간 시점(out)은 첫 차량의 나간시점으로 초기화 - - for(let i = 1; i < routes.length; i++) { - // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치 - if(out < routes[i][0]) { - cctv++; - out = routes[i][1]; // out 시점 업데이트 - } - - // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 - if(out > routes[i][1]) { - out = routes[i][1]; // out 시점 업데이트 - } - } - - return cctv; -} -// 그리디 - -// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다. -// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 -// 나간시점만 검사 해주면 됩니다. - -// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다. -// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면) -// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다. \ No newline at end of file diff --git "a/build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" "b/build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" deleted file mode 100644 index 712c75b..0000000 --- "a/build/solutions/level-3/\353\262\240\354\212\244\355\212\270\354\225\250\353\262\224/codeisneverodd.js" +++ /dev/null @@ -1,20 +0,0 @@ -//Map과 고차함수를 적극적으로 이용한 풀이 -function solution(genres, plays) { - const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]} - genres - .map((genre, id) => [genre, plays[id]]) - .forEach(([genre, play], id) => { - const data = genreMap.get(genre) || {totalPlay: 0, songs: []} - genreMap.set(genre, { - totalPlay: data.totalPlay + play, - songs: [...data.songs, {play: play, id: id}] - .sort((a, b) => b.play - a.play) - .slice(0, 2) - }) - }) - - return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...] - .sort((a, b) => b[1].totalPlay - a[1].totalPlay) - .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs] - .map(song => song.id) -} \ No newline at end of file diff --git "a/build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" "b/build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" deleted file mode 100644 index 64bfb39..0000000 --- "a/build/solutions/level-3/\354\227\254\355\226\211\352\262\275\353\241\234/codeisneverodd.js" +++ /dev/null @@ -1,21 +0,0 @@ -function solution(tickets) { - const routes = [] //최종 가능 루트들을 담을 배열 - const makeRoutes = (currentDepart, remainTickets, currentRoute) => { - //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수 - if (remainTickets.length > 0) { - remainTickets.forEach(([depart, nextDepart], index) => { - if (depart === currentDepart) - //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정 - makeRoutes( - nextDepart, - [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)], - [...currentRoute, currentDepart]) - }) - } else { - //티켓을 모두 사용하면 최종 가능 루트에 포함 - routes.push([...currentRoute, currentDepart]) - } - } - makeRoutes("ICN", tickets, []) - return routes.sort()[0] -} \ No newline at end of file diff --git "a/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" "b/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" deleted file mode 100644 index 9e83447..0000000 --- "a/build/solutions/level-3/\354\235\264\354\244\221\354\232\260\354\204\240\354\210\234\354\234\204\355\201\220/jaewon1676.js" +++ /dev/null @@ -1,31 +0,0 @@ -function solution(operations) { - var answer = []; - for (let i = 0; i < operations.length; i++) { - // 숫자 삽입 - if (operations[i][0] == 'I') { - let m = operations[i].substring(2, operations[i].length); - answer.push(m); - } - // if 최댓값 삭제 - else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) { - answer.pop(); - } - // if 최솟값 삭제 - else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) { - answer.shift(); - } - - answer.sort((a, b) => { - return a - b; - }); - } - if (answer.length == 0) return [0, 0]; - else { - return [parseInt(answer.pop()), parseInt(answer.shift())]; - } -} -/* 풀이 과정 -1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다. -2. answer 배열을 정렬 해준다 -3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다. -*/ \ No newline at end of file diff --git "a/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" "b/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" deleted file mode 100644 index 9fed161..0000000 --- "a/build/solutions/level-3/\354\236\205\352\265\255\354\213\254\354\202\254/codeisneverodd.js" +++ /dev/null @@ -1,16 +0,0 @@ -function solution(n, times) { - //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right - let [left, right] = [1, Math.max(...times) * n]; - while (left <= right) { - const mid = Math.floor((left + right) / 2); - const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0); - //sum은 mid 시간 동안 처리 할 수 있는 사람의 수 - if (sum < n) { - left = mid + 1; - } else { - right = mid - 1; - } - } - // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다. - return left; -} \ No newline at end of file diff --git "a/build/solutions/level-4/\352\260\200\354\202\254 \352\262\200\354\203\211/ryong9rrr.js" "b/build/solutions/level-4/\352\260\200\354\202\254 \352\262\200\354\203\211/ryong9rrr.js" deleted file mode 100644 index a2b8792..0000000 --- "a/build/solutions/level-4/\352\260\200\354\202\254 \352\262\200\354\203\211/ryong9rrr.js" +++ /dev/null @@ -1,70 +0,0 @@ -class Node { - constructor(value = '') { - this.value = value - this.children = new Map() - this.count = 0 - } -} - -class Trie { - constructor() { - this.root = new Node() - } - - insert(string) { - let currentNode = this.root - for (const char of string) { - if (!currentNode.children.has(char)) { - currentNode.children.set(char, new Node(currentNode.value + char)) - } - currentNode = currentNode.children.get(char) - currentNode.count++ - } - } - - startsWithCount(prefix) { - let currentNode = this.root - for (const char of prefix) { - if (!currentNode.children.has(char)) { - return 0 - } - currentNode = currentNode.children.get(char) - } - return currentNode.count - } -} - -function reverseString(string) { - return [...string].reverse().join('') -} - -function solution(words, queries) { - const table = {} - const reverseTable = {} - const counter = {} - - words.forEach((word) => { - const key = word.length - if (!table[key]) table[key] = new Trie() - if (!reverseTable[key]) reverseTable[key] = new Trie() - table[key].insert(word) - reverseTable[key].insert(reverseString(word)) - if (counter[key] === undefined) counter[key] = 0 - counter[key]++ - }) - - return queries.map((query) => { - const key = query.length - if (!table[key]) { - return 0 - } - const tQuery = query.replace(/\?/g, '') - if (!tQuery) { - return counter[key] - } - if (query[query.length - 1] === '?') { - return table[key].startsWithCount(tQuery) - } - return reverseTable[key].startsWithCount(reverseString(tQuery)) - }) -} \ No newline at end of file diff --git "a/build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" "b/build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" deleted file mode 100644 index 3bf026e..0000000 --- "a/build/solutions/level-4/\353\213\250\354\226\264 \355\215\274\354\246\220/codeisneverodd.js" +++ /dev/null @@ -1,28 +0,0 @@ -//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90 -function solution(strs, t) { - const tLength = t.length; //자주 쓰는 값 미리 계산 - //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다. - const minCountToIndex = new Array(tLength).fill(Infinity); - for (let currentIndex = 0; currentIndex < tLength; currentIndex++) { - //내가 검사할 부분은 t의 0~currentIndex 영역 - const currentSlice = t.slice(0, currentIndex + 1); - for (const str of strs) { - //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면 - if (currentSlice.endsWith(str)) { - //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이 - const frontLength = currentIndex - str.length + 1; - if (frontLength === 0) { - //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각 - minCountToIndex[currentIndex] = 1; - } else { - //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값 - minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1); - } - } - } - } - //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴 - return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1]; -} - -//리드미 테스트용 코멘트 \ No newline at end of file diff --git "a/build/solutions/level-4/\353\254\264\354\247\200\354\235\230 \353\250\271\353\260\251 \353\235\274\354\235\264\353\270\214/ryong9rrr.js" "b/build/solutions/level-4/\353\254\264\354\247\200\354\235\230 \353\250\271\353\260\251 \353\235\274\354\235\264\353\270\214/ryong9rrr.js" deleted file mode 100644 index 18081cc..0000000 --- "a/build/solutions/level-4/\353\254\264\354\247\200\354\235\230 \353\250\271\353\260\251 \353\235\274\354\235\264\353\270\214/ryong9rrr.js" +++ /dev/null @@ -1,27 +0,0 @@ -function solution(food_times, k) { - const total = food_times.reduce((a, b) => a + b) - if (total <= k) { - return -1 - } - - // stack으로 풀기 - const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA) - - let prev = 0 - while (stack.length > 0 && k >= 0) { - const [time] = stack[stack.length - 1] - const acc = (time - prev) * stack.length - if (k < acc) { - break - } - stack.pop() - k -= acc - prev = time - } - - const result = stack - .reverse() - .map(([_, order]) => order) - .sort((orderA, orderB) => orderA - orderB) - return result[k % result.length] -} \ No newline at end of file diff --git "a/build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" "b/build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" deleted file mode 100644 index f226dce..0000000 --- "a/build/solutions/level-4/\354\230\254\353\260\224\353\245\270 \352\264\204\355\230\270\354\235\230 \352\260\257\354\210\230/cg10036.js" +++ /dev/null @@ -1,4 +0,0 @@ -function solution(n) { - const fact = n => n ? BigInt(n) * fact(n - 1) : 1n; - return fact(n * 2) / (fact(n) * fact(n + 1)); -} \ No newline at end of file diff --git a/build/utils/db.js b/build/utils/db.js deleted file mode 100644 index 0aae690..0000000 --- a/build/utils/db.js +++ /dev/null @@ -1,41 +0,0 @@ -import { nanoid } from 'nanoid'; -import { makeDir, readFile, writeFile } from './file.js'; -export const getDB = () => JSON.parse(readFile('db/db.json')); -export const writeDB = (db) => writeFile({ - dirName: 'db', - fileName: `db.json`, - content: JSON.stringify(db), -}); -/** Sol 하나를 DB 및 파일에 추가 */ -export const addSol = ({ author, code, probId }) => { - const { probs, sols } = getDB(); - const { level, title } = probs.find((prob) => prob.id === probId); - const addToFiles = () => { - const newDir = `solutions/level-${level}/${title}`; - makeDir(newDir); - writeFile({ - dirName: newDir, - fileName: `${author}.js`, - content: code, - }); - }; - const addToDB = () => { - const newSol = { - id: nanoid(), - author, - code, - probId, - }; - writeDB({ - probs, - sols: [...sols.filter((sol) => !(sol.author === newSol.author && sol.probId === newSol.probId)), newSol], - }); - }; - addToFiles(); - addToDB(); -}; -/** DB 전체를 파일로 변환 */ -export const dbToFile = (db) => { - const { sols } = db; - sols.forEach((sol) => addSol(sol)); -}; diff --git a/build/utils/file.js b/build/utils/file.js deleted file mode 100644 index 1f5ab8f..0000000 --- a/build/utils/file.js +++ /dev/null @@ -1,33 +0,0 @@ -import * as fs from 'fs'; -import path, { dirname } from 'path'; -import { rimrafSync } from 'rimraf'; -import { fileURLToPath } from 'url'; -const __dirname = dirname(fileURLToPath(import.meta.url)); -/** build 폴더 기준 절대경로를 사용하세요 */ -export const makeDir = (_path) => { - if (fs.existsSync(path.join(__dirname, '../', _path))) - return; - fs.mkdirSync(path.join(__dirname, '../', _path), { recursive: true }); -}; -/** build 폴더 기준 절대경로를 사용하세요 */ -export const writeFile = ({ dirName, fileName, content }) => { - const _path = `${dirName}/${fileName}`; - // if (fs.existsSync(path.join(__dirname, _path))) return; - fs.writeFileSync(path.join(__dirname, '../', _path), content); -}; -/** build 폴더 기준 절대경로를 사용하세요 */ -export const readFile = (_path) => { - return fs.readFileSync(path.join(__dirname, '../', _path), { - encoding: 'utf-8', - }); -}; -/** build 폴더 기준 절대경로를 사용하세요 */ -export const readDir = (dirName) => { - return fs.readdirSync(path.join(__dirname, '../', dirName)); -}; -/** build 폴더 기준 절대경로를 사용하세요 */ -export const deleteDir = (dirName) => { - return rimrafSync(path.join(__dirname, '../', dirName), { - preserveRoot: false, - }); -}; diff --git a/build/utils/oldSols.js b/build/utils/oldSols.js deleted file mode 100644 index f343546..0000000 --- a/build/utils/oldSols.js +++ /dev/null @@ -1,33 +0,0 @@ -import { nanoid } from 'nanoid'; -import { readDir, readFile } from './file.js'; -const levels = [0, 1, 2, 3, 4, 5]; -export const oldSolsToDB = () => { - const result = { probs: [], sols: [] }; - levels.forEach((level) => { - const oldDirName = `oldSols/level-${level}`; - const fileNames = readDir(oldDirName); - fileNames.map((fileName) => { - const [title, id] = fileName.replace('?', '?').replaceAll('-', ' ').split('&'); - if (id) - result.probs.push({ id, title: title.replace('?', '?'), level }); - readFile(`${oldDirName}/${fileName}`) - .split(/\/\/[ ]*정답[ ]*\d[^-]*-/) - .slice(1) - .map((content) => { - const [author, ...lines] = content.split('\n'); - return { - author: author.trim(), - code: lines.join('\n').trim(), - }; - }) - .forEach(({ author, code }) => { - if (id) - result.sols.push({ author, code, id: nanoid(), probId: id }); - }); - }); - }); - console.log(result.probs - .sort((a, b) => (a.id < b.id ? -1 : a.id === b.id ? 0 : 1)) - .filter((p, i, arr) => i < arr.length - 1 && p.id === arr[i + 1].id)); - return result; -}; diff --git a/build/utils/solutions.js b/build/utils/solutions.js deleted file mode 100644 index cb0ff5c..0000000 --- a/build/utils/solutions.js +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/data/problems.json b/data/problems.json new file mode 100644 index 0000000..7bbafee --- /dev/null +++ b/data/problems.json @@ -0,0 +1 @@ +[{"title":"택배 배달과 수거하기","id":"150369"},{"title":"이모티콘 할인행사","id":"150368"},{"title":"표 병합","id":"150366"},{"title":"미로 탈출 명령어","id":"150365"},{"title":"표현 가능한 이진트리","id":"150367"},{"title":"개인정보 수집 유효기간","id":"150370"},{"title":"1,2,3 떨어트리기","id":"150364"},{"title":"행렬과 연산","id":"118670"},{"title":"코딩 테스트 공부","id":"118668"},{"title":"등산코스 정하기","id":"118669"},{"title":"성격 유형 검사하기","id":"118666"},{"title":"두 큐 합 같게 만들기","id":"118667"},{"title":"신고 결과 받기","id":"92334"},{"title":"k진수에서 소수 개수 구하기","id":"92335"},{"title":"주차 요금 계산","id":"92341"},{"title":"양궁대회","id":"92342"},{"title":"양과 늑대","id":"92343"},{"title":"파괴되지 않은 건물","id":"92344"},{"title":"사라지는 발판","id":"92345"},{"title":"로또의 최고 순위와 최저 순위","id":"77484"},{"title":"행렬 테두리 회전하기","id":"77485"},{"title":"다단계 칫솔 판매","id":"77486"},{"title":"헤비 유저가 소유한 장소","id":"77487"},{"title":"신규 아이디 추천","id":"72410"},{"title":"메뉴 리뉴얼","id":"72411"},{"title":"순위 검색","id":"72412"},{"title":"합승 택시 요금","id":"72413"},{"title":"광고 삽입","id":"72414"},{"title":"카드 짝 맞추기","id":"72415"},{"title":"매출 하락 최소화","id":"72416"},{"title":"문자열 압축","id":"60057"},{"title":"괄호 변환","id":"60058"},{"title":"자물쇠와 열쇠","id":"60059"},{"title":"가사 검색","id":"60060"},{"title":"기둥과 보 설치","id":"60061"},{"title":"외벽 점검","id":"60062"},{"title":"블록 이동하기","id":"60063"},{"title":"오픈채팅방","id":"42888"},{"title":"실패율","id":"42889"},{"title":"후보키","id":"42890"},{"title":"무지의 먹방 라이브","id":"42891"},{"title":"길 찾기 게임","id":"42892"},{"title":"매칭 점수","id":"42893"},{"title":"블록 게임","id":"42894"},{"title":"[1차] 추석 트래픽","id":"17676"},{"title":"[1차] 뉴스 클러스터링","id":"17677"},{"title":"[1차] 셔틀버스","id":"17678"},{"title":"[1차] 프렌즈4블록","id":"17679"},{"title":"[1차] 캐시","id":"17680"},{"title":"[1차] 비밀지도","id":"17681"},{"title":"[1차] 다트 게임","id":"17682"},{"title":"[3차] 방금그곡","id":"17683"},{"title":"[3차] 압축","id":"17684"},{"title":"[3차] 자동완성","id":"17685"},{"title":"[3차] 파일명 정렬","id":"17686"},{"title":"[3차] n진수 게임","id":"17687"},{"title":"숫자 문자열과 영단어","id":"81301"},{"title":"거리두기 확인하기","id":"81302"},{"title":"표 편집","id":"81303"},{"title":"미로 탈출","id":"81304"},{"title":"시험장 나누기","id":"81305"},{"title":"키패드 누르기","id":"67256"},{"title":"수식 최대화","id":"67257"},{"title":"보석 쇼핑","id":"67258"},{"title":"경주로 건설","id":"67259"},{"title":"동굴 탐험","id":"67260"},{"title":"크레인 인형뽑기 게임","id":"64061"},{"title":"튜플","id":"64065"},{"title":"불량 사용자","id":"64064"},{"title":"호텔 방 배정","id":"64063"},{"title":"징검다리 건너기","id":"64062"},{"title":"카카오프렌즈 컬러링북","id":"1829"},{"title":"브라이언의 고민","id":"1830"},{"title":"4단 고음","id":"1831"},{"title":"보행자 천국","id":"1832"},{"title":"캠핑","id":"1833"},{"title":"신비로운 유적 탐험","id":"1834"},{"title":"단체사진 찍기","id":"1835"},{"title":"리틀 프렌즈 사천성","id":"1836"},{"title":"GPS","id":"1837"},{"title":"몸짱 트레이너 라이언의 고민","id":"1838"},{"title":"튜브의 소개팅","id":"1839"},{"title":"스마트한 프로도","id":"1840"},{"title":"IU와 콘의 보드게임","id":"1841"},{"title":"네오의 귀걸이","id":"1842"},{"title":"없는 숫자 더하기","id":"86051"},{"title":"빛의 경로 사이클","id":"86052"},{"title":"금과 은 운반하기","id":"86053"},{"title":"안티세포","id":"86054"},{"title":"나머지가 1이 되는 수 찾기","id":"87389"},{"title":"n^2 배열 자르기","id":"87390"},{"title":"공 이동 시뮬레이션","id":"87391"},{"title":"쿼리의 모음의 개수","id":"87394"},{"title":"음양 더하기","id":"76501"},{"title":"약수의 개수와 덧셈","id":"77884"},{"title":"괄호 회전하기","id":"76502"},{"title":"2개 이하로 다른 비트","id":"77885"},{"title":"모두 0으로 만들기","id":"76503"},{"title":"110 옮기기","id":"77886"},{"title":"RPG와 쿼리","id":"76504"},{"title":"중력 작용","id":"77887"},{"title":"내적","id":"70128"},{"title":"3진법 뒤집기","id":"68935"},{"title":"두 개 뽑아서 더하기","id":"68644"},{"title":"삼각 달팽이","id":"68645"},{"title":"이진 변환 반복하기","id":"70129"},{"title":"쿼드압축 후 개수 세기","id":"68936"},{"title":"풍선 터트리기","id":"68646"},{"title":"스타 수열","id":"70130"},{"title":"트리 트리오 중간값","id":"68937"},{"title":"짝수 행 세기","id":"68647"},{"title":"문자열의 아름다움","id":"68938"},{"title":"가짜 해밀토니안","id":"70132"},{"title":"멀쩡한 사각형","id":"62048"},{"title":"우유와 요거트가 담긴 장바구니","id":"62284"},{"title":"지형 이동","id":"62050"},{"title":"소수 만들기","id":"12977"},{"title":"예산","id":"12982"},{"title":"배달","id":"12978"},{"title":"영어 끝말잇기","id":"12981"},{"title":"점프와 순간 이동","id":"12980"},{"title":"스킬트리","id":"49993"},{"title":"방문 길이","id":"49994"},{"title":"기지국 설치","id":"12979"},{"title":"숫자 게임","id":"12987"},{"title":"스티커 모으기(2)","id":"12971"},{"title":"지형 편집","id":"12984"},{"title":"쿠키 구입","id":"49995"},{"title":"뒤에 있는 큰 수 찾기","id":"154539"},{"title":"당구 연습","id":"169198"},{"title":"시소 짝꿍","id":"152996"},{"title":"디펜스 게임","id":"142085"},{"title":"연속 펄스 부분 수열의 합","id":"161988"},{"title":"가장 가까운 같은 글자","id":"142086"},{"title":"숫자 카드 나누기","id":"135807"},{"title":"유사 칸토어 비트열","id":"148652"},{"title":"숫자 타자 대회","id":"136797"},{"title":"카드 뭉치","id":"159994"},{"title":"마법의 엘리베이터","id":"148653"},{"title":"콜라 문제","id":"132267"},{"title":"햄버거 만들기","id":"133502"},{"title":"호텔 대실","id":"155651"},{"title":"무인도 여행","id":"154540"},{"title":"숫자 변환하기","id":"154538"},{"title":"등대","id":"133500"},{"title":"점 찍기","id":"140107"},{"title":"쌍둥이 빌딩 숲","id":"140105"},{"title":"미로 탈출","id":"159993"},{"title":"테이블 해시 함수","id":"147354"},{"title":"롤케이크 자르기","id":"132265"},{"title":"크기가 작은 부분 문자열","id":"147355"},{"title":"부대복귀","id":"132266"},{"title":"둘만의 암호","id":"155652"},{"title":"혼자서 하는 틱택토","id":"160585"},{"title":"문자열 나누기","id":"140108"},{"title":"대충 만든 자판","id":"160586"},{"title":"기사단원의 무기","id":"136798"},{"title":"푸드 파이트 대회","id":"134240"},{"title":"옹알이 (2)","id":"133499"},{"title":"과일 장수","id":"135808"},{"title":"명예의 전당 (1)","id":"138477"},{"title":"덧칠하기","id":"161989"},{"title":"귤 고르기","id":"138476"},{"title":"리코쳇 로봇","id":"169199"},{"title":"인사고과","id":"152995"},{"title":"우박수열 정적분","id":"134239"},{"title":"억억단을 외우자","id":"138475"},{"title":"바탕화면 정리","id":"161990"},{"title":"고고학 최고의 발견","id":"131702"},{"title":"삼총사","id":"131705"},{"title":"2차원 동전 뒤집기","id":"131703"},{"title":"택배상자","id":"131704"},{"title":"할인 행사","id":"131127"},{"title":"연속 부분 수열 합의 개수","id":"131701"},{"title":"혼자 놀기의 달인","id":"131130"},{"title":"숫자 짝꿍","id":"131128"},{"title":"카운트 다운","id":"131129"},{"title":"124 나라의 숫자","id":"12899"},{"title":"2 x n 타일링","id":"12900"},{"title":"2016년","id":"12901"},{"title":"3 x n 타일링","id":"12902"},{"title":"가운데 글자 가져오기","id":"12903"},{"title":"가장 긴 팰린드롬","id":"12904"},{"title":"가장 큰 정사각형 찾기","id":"12905"},{"title":"거스름돈","id":"12907"},{"title":"직사각형의 넓이","id":"12974"},{"title":"나누어 떨어지는 숫자 배열","id":"12910"},{"title":"다음 큰 숫자","id":"12911"},{"title":"두 정수 사이의 합","id":"12912"},{"title":"땅따먹기","id":"12913"},{"title":"멀리 뛰기","id":"12914"},{"title":"문자열 내 마음대로 정렬하기","id":"12915"},{"title":"문자열 내 p와 y의 개수","id":"12916"},{"title":"문자열 내림차순으로 배치하기","id":"12917"},{"title":"문자열 다루기 기본","id":"12918"},{"title":"서울에서 김서방 찾기","id":"12919"},{"title":"선입 선출 스케줄링","id":"12920"},{"title":"소수 찾기","id":"12921"},{"title":"수박수박수박수박수박수?","id":"12922"},{"title":"숫자 블록","id":"12923"},{"title":"숫자의 표현","id":"12924"},{"title":"문자열을 정수로 바꾸기","id":"12925"},{"title":"시저 암호","id":"12926"},{"title":"야근 지수","id":"12927"},{"title":"약수의 합","id":"12928"},{"title":"올바른 괄호의 갯수","id":"12929"},{"title":"이상한 문자 만들기","id":"12930"},{"title":"자릿수 더하기","id":"12931"},{"title":"자연수 뒤집어 배열로 만들기","id":"12932"},{"title":"정수 내림차순으로 배치하기","id":"12933"},{"title":"정수 제곱근 판별","id":"12934"},{"title":"제일 작은 수 제거하기","id":"12935"},{"title":"줄 서는 방법","id":"12936"},{"title":"짝수와 홀수","id":"12937"},{"title":"최고의 집합","id":"12938"},{"title":"최댓값과 최솟값","id":"12939"},{"title":"최대공약수와 최소공배수","id":"12940"},{"title":"최솟값 만들기","id":"12941"},{"title":"최적의 행렬 곱셈","id":"12942"},{"title":"콜라츠 추측","id":"12943"},{"title":"평균 구하기","id":"12944"},{"title":"피보나치 수","id":"12945"},{"title":"하노이의 탑","id":"12946"},{"title":"하샤드 수","id":"12947"},{"title":"핸드폰 번호 가리기","id":"12948"},{"title":"행렬의 곱셈","id":"12949"},{"title":"행렬의 덧셈","id":"12950"},{"title":"JadenCase 문자열 만들기","id":"12951"},{"title":"N-Queen","id":"12952"},{"title":"N개의 최소공배수","id":"12953"},{"title":"x만큼 간격이 있는 n개의 숫자","id":"12954"},{"title":"직사각형 별찍기","id":"12969"},{"title":"완주하지 못한 선수","id":"42576"},{"title":"폰켓몬","id":"1845"},{"title":"전화번호 목록","id":"42577"},{"title":"위장","id":"42578"},{"title":"베스트앨범","id":"42579"},{"title":"같은 숫자는 싫어","id":"12906"},{"title":"올바른 괄호","id":"12909"},{"title":"기능개발","id":"42586"},{"title":"프린터","id":"42587"},{"title":"다리를 지나는 트럭","id":"42583"},{"title":"주식가격","id":"42584"},{"title":"더 맵게","id":"42626"},{"title":"디스크 컨트롤러","id":"42627"},{"title":"이중우선순위큐","id":"42628"},{"title":"K번째수","id":"42748"},{"title":"가장 큰 수","id":"42746"},{"title":"H-Index","id":"42747"},{"title":"최소직사각형","id":"86491"},{"title":"모의고사","id":"42840"},{"title":"소수 찾기","id":"42839"},{"title":"카펫","id":"42842"},{"title":"피로도","id":"87946"},{"title":"전력망을 둘로 나누기","id":"86971"},{"title":"모음사전","id":"84512"},{"title":"체육복","id":"42862"},{"title":"조이스틱","id":"42860"},{"title":"큰 수 만들기","id":"42883"},{"title":"구명보트","id":"42885"},{"title":"섬 연결하기","id":"42861"},{"title":"단속카메라","id":"42884"},{"title":"N으로 표현","id":"42895"},{"title":"정수 삼각형","id":"43105"},{"title":"등굣길","id":"42898"},{"title":"사칙연산","id":"1843"},{"title":"도둑질","id":"42897"},{"title":"타겟 넘버","id":"43165"},{"title":"네트워크","id":"43162"},{"title":"게임 맵 최단거리","id":"1844"},{"title":"단어 변환","id":"43163"},{"title":"아이템 줍기","id":"87694"},{"title":"여행경로","id":"43164"},{"title":"퍼즐 조각 채우기","id":"84021"},{"title":"입국심사","id":"43238"},{"title":"징검다리","id":"43236"},{"title":"가장 먼 노드","id":"49189"},{"title":"순위","id":"49191"},{"title":"방의 개수","id":"49190"},{"title":"조건에 부합하는 중고거래 댓글 조회하기","id":"164673"},{"title":"인기있는 아이스크림","id":"133024"},{"title":"3월에 태어난 여성 회원 목록 출력하기","id":"131120"},{"title":"서울에 위치한 식당 목록 출력하기","id":"131118"},{"title":"평균 일일 대여 요금 구하기","id":"151136"},{"title":"강원도에 위치한 생산공장 목록 출력하기","id":"131112"},{"title":"12세 이하인 여자 환자 목록 출력하기","id":"132201"},{"title":"조건에 맞는 도서 리스트 출력하기","id":"144853"},{"title":"흉부외과 또는 일반외과 의사 목록 출력하기","id":"132203"},{"title":"과일로 만든 아이스크림 고르기","id":"133025"},{"title":"모든 레코드 조회하기","id":"59034"},{"title":"재구매가 일어난 상품과 회원 리스트 구하기","id":"131536"},{"title":"오프라인/온라인 판매 데이터 통합하기","id":"131537"},{"title":"역순 정렬하기","id":"59035"},{"title":"아픈 동물 찾기","id":"59036"},{"title":"어린 동물 찾기","id":"59037"},{"title":"동물의 아이디와 이름","id":"59403"},{"title":"여러 기준으로 정렬하기","id":"59404"},{"title":"상위 n개 레코드","id":"59405"},{"title":"조건에 맞는 회원수 구하기","id":"131535"},{"title":"가격이 제일 비싼 식품의 정보 출력하기","id":"131115"},{"title":"가장 비싼 상품 구하기","id":"131697"},{"title":"최댓값 구하기","id":"59415"},{"title":"최솟값 구하기","id":"59038"},{"title":"동물 수 구하기","id":"59406"},{"title":"중복 제거하기","id":"59408"},{"title":"대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기","id":"151139"},{"title":"저자 별 카테고리 별 매출액 집계하기","id":"144856"},{"title":"조건에 맞는 사용자와 총 거래금액 조회하기","id":"164668"},{"title":"자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기","id":"151137"},{"title":"식품분류별 가장 비싼 식품의 정보 조회하기","id":"131116"},{"title":"즐겨찾기가 가장 많은 식당 정보 출력하기","id":"131123"},{"title":"성분으로 구분한 아이스크림 총 주문량","id":"133026"},{"title":"진료과별 총 예약 횟수 출력하기","id":"132202"},{"title":"카테고리 별 도서 판매량 집계하기","id":"144855"},{"title":"자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기","id":"157340"},{"title":"고양이와 개는 몇 마리 있을까","id":"59040"},{"title":"동명 동물 수 찾기","id":"59041"},{"title":"년, 월, 성별 별 상품 구매 회원 수 구하기","id":"131532"},{"title":"입양 시각 구하기(1)","id":"59412"},{"title":"입양 시각 구하기(2)","id":"59413"},{"title":"가격대 별 상품 개수 구하기","id":"131530"},{"title":"경기도에 위치한 식품창고 목록 출력하기","id":"131114"},{"title":"이름이 없는 동물의 아이디","id":"59039"},{"title":"이름이 있는 동물의 아이디","id":"59407"},{"title":"NULL 처리하기","id":"59410"},{"title":"나이 정보가 없는 회원 수 구하기","id":"131528"},{"title":"주문량이 많은 아이스크림들 조회하기","id":"133027"},{"title":"그룹별 조건에 맞는 식당 목록 출력하기","id":"131124"},{"title":"조건에 맞는 도서와 저자 리스트 출력하기","id":"144854"},{"title":"5월 식품들의 총매출 조회하기","id":"131117"},{"title":"특정 기간동안 대여 가능한 자동차들의 대여비용 구하기","id":"157339"},{"title":"없어진 기록 찾기","id":"59042"},{"title":"있었는데요 없었습니다","id":"59043"},{"title":"오랜 기간 보호한 동물(1)","id":"59044"},{"title":"보호소에서 중성화한 동물","id":"59045"},{"title":"상품 별 오프라인 매출 구하기","id":"131533"},{"title":"상품을 구매한 회원 비율 구하기","id":"131534"},{"title":"자동차 대여 기록 별 대여 금액 구하기","id":"151141"},{"title":"조건별로 분류하여 주문상태 출력하기","id":"131113"},{"title":"자동차 대여 기록에서 장기/단기 대여 구분하기","id":"151138"},{"title":"대여 기록이 존재하는 자동차 리스트 구하기","id":"157341"},{"title":"특정 옵션이 포함된 자동차 리스트 구하기","id":"157343"},{"title":"취소되지 않은 진료 예약 조회하기","id":"132204"},{"title":"조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기","id":"164671"},{"title":"조건에 맞는 사용자 정보 조회하기","id":"164670"},{"title":"조건에 부합하는 중고거래 상태 조회하기","id":"164672"},{"title":"자동차 평균 대여 기간 구하기","id":"157342"},{"title":"루시와 엘라 찾기","id":"59046"},{"title":"이름에 el이 들어가는 동물 찾기","id":"59047"},{"title":"중성화 여부 파악하기","id":"59409"},{"title":"오랜 기간 보호한 동물(2)","id":"59411"},{"title":"DATETIME에서 DATE로 형 변환","id":"59414"},{"title":"카테고리 별 상품 개수 구하기","id":"131529"},{"title":"짝지어 제거하기","id":"12973"},{"title":"예상 대진표","id":"12985"},{"title":"단어 퍼즐","id":"12983"},{"title":"교점에 별 만들기","id":"87377"},{"title":"부족한 금액 계산하기","id":"82612"},{"title":"옹알이 (1)","id":"120956"},{"title":"안전지대","id":"120866"},{"title":"삼각형의 완성조건 (2)","id":"120868"},{"title":"외계어 사전","id":"120869"},{"title":"평행","id":"120875"},{"title":"겹치는 선분의 길이","id":"120876"},{"title":"유한소수 판별하기","id":"120878"},{"title":"특이한 정렬","id":"120880"},{"title":"등수 매기기","id":"120882"},{"title":"로그인 성공?","id":"120883"},{"title":"치킨 쿠폰","id":"120884"},{"title":"이진수 더하기","id":"120885"},{"title":"A로 B 만들기","id":"120886"},{"title":"k의 개수","id":"120887"},{"title":"중복된 문자 제거","id":"120888"},{"title":"369게임","id":"120891"},{"title":"삼각형의 완성조건 (1)","id":"120889"},{"title":"가까운 수","id":"120890"},{"title":"암호 해독","id":"120892"},{"title":"대문자와 소문자","id":"120893"},{"title":"영어가 싫어요","id":"120894"},{"title":"약수 구하기","id":"120897"},{"title":"인덱스 바꾸기","id":"120895"},{"title":"한 번만 등장한 문자","id":"120896"},{"title":"편지","id":"120898"},{"title":"가장 큰 수 찾기","id":"120899"},{"title":"7의 개수","id":"120912"},{"title":"문자열 계산하기","id":"120902"},{"title":"배열의 유사도","id":"120903"},{"title":"숫자 찾기","id":"120904"},{"title":"n의 배수 고르기","id":"120905"},{"title":"자릿수 더하기","id":"120906"},{"title":"OX퀴즈","id":"120907"},{"title":"문자열안에 문자열","id":"120908"},{"title":"제곱수 판별하기","id":"120909"},{"title":"세균 증식","id":"120910"},{"title":"문자열 정렬하기 (2)","id":"120911"},{"title":"잘라서 배열로 저장하기","id":"120913"},{"title":"두 수의 나눗셈","id":"120806"},{"title":"피자 나눠 먹기 (3)","id":"120816"},{"title":"분수의 덧셈","id":"120808"},{"title":"소인수분해","id":"120852"},{"title":"중복된 숫자 개수","id":"120583"},{"title":"최댓값 만들기 (2)","id":"120862"},{"title":"숨어있는 숫자의 덧셈 (2)","id":"120864"},{"title":"두 수의 차","id":"120803"},{"title":"두 수의 곱","id":"120804"},{"title":"문자열 밀기","id":"120921"},{"title":"몫 구하기","id":"120805"},{"title":"숫자 비교하기","id":"120807"},{"title":"배열 두 배 만들기","id":"120809"},{"title":"종이 자르기","id":"120922"},{"title":"연속된 수의 합","id":"120923"},{"title":"다음에 올 숫자","id":"120924"},{"title":"각도기","id":"120829"},{"title":"나머지 구하기","id":"120810"},{"title":"중앙값 구하기","id":"120811"},{"title":"배열 자르기","id":"120833"},{"title":"구슬을 나누는 경우의 수","id":"120840"},{"title":"배열 회전시키기","id":"120844"},{"title":"최빈값 구하기","id":"120812"},{"title":"피자 나눠 먹기 (2)","id":"120815"},{"title":"짝수는 싫어요","id":"120813"},{"title":"피자 나눠 먹기 (1)","id":"120814"},{"title":"점의 위치 구하기","id":"120841"},{"title":"배열의 평균값","id":"120817"},{"title":"옷가게 할인 받기","id":"120818"},{"title":"짝수 홀수 개수","id":"120824"},{"title":"아이스 아메리카노","id":"120819"},{"title":"나이 출력","id":"120820"},{"title":"배열 뒤집기","id":"120821"},{"title":"문자열 뒤집기","id":"120822"},{"title":"직각삼각형 출력하기","id":"120823"},{"title":"문자 반복 출력하기","id":"120825"},{"title":"짝수의 합","id":"120831"},{"title":"특정 문자 제거하기","id":"120826"},{"title":"2차원으로 만들기","id":"120842"},{"title":"양꼬치","id":"120830"},{"title":"외계행성의 나이","id":"120834"},{"title":"개미 군단","id":"120837"},{"title":"진료순서 정하기","id":"120835"},{"title":"순서쌍의 개수","id":"120836"},{"title":"모스부호 (1)","id":"120838"},{"title":"가위 바위 보","id":"120839"},{"title":"공 던지기","id":"120843"},{"title":"주사위의 개수","id":"120845"},{"title":"문자열 정렬하기 (1)","id":"120850"},{"title":"합성수 찾기","id":"120846"},{"title":"최댓값 만들기(1)","id":"120847"},{"title":"팩토리얼","id":"120848"},{"title":"배열 원소의 길이","id":"120854"},{"title":"모음 제거","id":"120849"},{"title":"숨어있는 숫자의 덧셈 (1)","id":"120851"},{"title":"컨트롤 제트","id":"120853"},{"title":"머쓱이보다 키 큰 사람","id":"120585"},{"title":"다항식 더하기","id":"120863"},{"title":"캐릭터의 좌표","id":"120861"},{"title":"저주의 숫자 3","id":"120871"},{"title":"직사각형 넓이 구하기","id":"120860"},{"title":"두 수의 합","id":"120802"}] \ No newline at end of file diff --git a/data/solutions.json b/data/solutions.json new file mode 100644 index 0000000..789e64d --- /dev/null +++ b/data/solutions.json @@ -0,0 +1,3554 @@ +[ + { + "id": "xSm8od1xFwgFefxNzkVqa", + "author": "codeisneverodd", + "code": "function solution(num_list, n) {\n let result = [];\n for (let i = 0; i < num_list.length / n; i++) {\n result = [...result, num_list.slice(i * n, i * n + n)];\n }\n return result;\n}", + "probId": "120842", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "K-zJIO4QrSl-S9XOoRs9z", + "author": "codeisneverodd", + "code": "function solution(order) {\n return [...('' + order)].filter(num => num === '3' || num === '6' || num === '9').length;\n}", + "probId": "120891", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "z9tZ9PckhK1H-6ocTeWO2", + "author": "codeisneverodd", + "code": "function solution(array) {\n return [...array.join('')].filter(a => a === '7').length;\n}", + "probId": "120912", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "NNf6s-HTVaGKm78AOPaVw", + "author": "codeisneverodd", + "code": "function solution(before, after) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return sort(before) === sort(after) ? 1 : 0;\n}", + "probId": "120886", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7oXUiFUSQ9uqtT5hYSLIf", + "author": "codeisneverodd", + "code": "function solution(quiz) {\n return quiz.map(q => {\n const [formula, answer] = q.split('=');\n return eval(formula) === +answer ? 'O' : 'X';\n });\n}", + "probId": "120907", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "BYmirH4q1XECD8bMEo29U", + "author": "codeisneverodd", + "code": "function solution(i, j, k) {\n let count = 0;\n for (let num = i; num <= j; num++) {\n count += [...('' + num)].filter(n => +n === k).length;\n }\n return count;\n}", + "probId": "120887", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Fd_1vZ2pAt6rpah2QbEsi", + "author": "codeisneverodd", + "code": "function solution(n, numlist) {\n return numlist.filter(num => num % n === 0);\n}", + "probId": "120905", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "tGL_-zp4MOVhXsFcJcMun", + "author": "codeisneverodd", + "code": "function solution(array, n) {\n const minDiff = Math.min(...array.map(a => Math.abs(a - n)));\n return array.sort((a, b) => a - b).find(a => Math.abs(a - n) === minDiff);\n}", + "probId": "120890", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "nKQO66zONo7540fHrto5P", + "author": "codeisneverodd", + "code": "function solution(rsp) {\n const win = { 0: 5, 2: 0, 5: 2 };\n return [...rsp].map(num => win[num]).join('');\n}", + "probId": "120839", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "m6fBW1kYmz63rvE_9J-j7", + "author": "codeisneverodd", + "code": "function solution(array) {\n const max = Math.max(...array);\n return [max, array.indexOf(max)];\n}", + "probId": "120899", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "CqKrSPtMSN3R0qbXB3uaj", + "author": "codeisneverodd", + "code": "function solution(angle) {\n if (angle === 180) return 4;\n if (angle > 90) return 3;\n if (angle === 90) return 2;\n return 1;\n}", + "probId": "120829", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "O7PoiGypXs92Zf0CtGSFq", + "author": "codeisneverodd", + "code": "function solution(hp) {\n const first = Math.floor(hp / 5);\n const second = Math.floor((hp - first * 5) / 3);\n const third = hp - first * 5 - second * 3;\n return first + second + third;\n}", + "probId": "120837", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "eQLxLoyizYAtnKZ2NvI7K", + "author": "codeisneverodd", + "code": "function solution(lines) {\n const visited = lines.reduce((a, [x, y]) => {\n for (let i = Math.min(x, y) + 1; i <= Math.max(x, y); i++) a[i] = a[i] ? a[i] + 1 : 1;\n return a;\n }, {});\n\n return Object.values(visited).filter(v => v > 1).length;\n}", + "probId": "120876", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rKj4MpytQxyf3pHUEsJdP", + "author": "codeisneverodd", + "code": "function solution(numbers, k) {\n const goNext = current => (current + 2) % numbers.length;\n let current = 0;\n for (let i = 0; i < k - 1; i++) current = goNext(current);\n return numbers[current];\n}", + "probId": "120843", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "HCLioSAvzxRnHX8mjtUWU", + "author": "codeisneverodd", + "code": "function solution(balls, share) {\n const [n, m] = [balls, share];\n const fact = [BigInt(1), BigInt(1)];\n\n for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i);\n\n return Number(fact[n] / (fact[n - m] * fact[m]));\n}", + "probId": "120840", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "FPUJpgh0XMsggme9iIl50", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 % num2;\n}", + "probId": "120810", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "mk4qvXkinyqMf5XPVCHdj", + "author": "codeisneverodd", + "code": "function solution(age) {\n return 2022 - age + 1;\n}", + "probId": "120820", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "18S-4SEbVwFndDpxz2ciT", + "author": "codeisneverodd", + "code": "function solution(common) {\n const isAP = arr => arr[2] - arr[1] === arr[1] - arr[0];\n return isAP(common)\n ? common[common.length - 1] + common[1] - common[0]\n : common[common.length - 1] * (common[1] / common[0]);\n}", + "probId": "120924", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "kVuyEQ3KiqW-p8BTxdFgS", + "author": "codeisneverodd", + "code": "function solution(polynomial) {\n const countX = x => {\n const count = x.replaceAll('x', '');\n return count === '' ? 1 : +count;\n };\n\n const count = polynomial\n .split(' + ')\n .reduce((a, c) => (c.includes('x') ? { ...a, x: a.x + countX(c) } : { ...a, num: a.num + +c }), {\n x: 0,\n num: 0,\n });\n\n const x = count.x > 0 ? `${count.x > 1 ? count.x : ''}x` : '';\n const num = count.num > 0 ? '' + count.num : '';\n const plus = x !== '' && num !== '' ? ' + ' : '';\n\n return x + plus + num;\n}", + "probId": "120863", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "XsKuARaEONvRaODN2AM0x", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...my_string].map(char => (char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase())).join('');\n}", + "probId": "120893", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "qQWDAJ0NE_d14Se_xpJlf", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 * num2;\n}", + "probId": "120804", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8kX9ALQ_W9RpcWuaA8orB", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return Math.floor((num1 / num2) * 1000);\n}", + "probId": "120806", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "yQwy5c7WXcwqM2jDGreyj", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 - num2;\n}", + "probId": "120803", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "flq5YSiss1nLA5LYkvWI2", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 + num2\n}", + "probId": "120802", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "_JQtvPHPiTHkpMg6dBdYV", + "author": "codeisneverodd", + "code": "function solution(score) {\n const avgs = score.map(([a, b]) => (a + b) / 2);\n const avgRank = [...avgs]\n .sort((a, b) => b - a)\n .map((avg, i) => ({ avg, rank: i + 1 }))\n .map((a, i, arr) => (i > 0 && a.avg === arr[i - 1].avg ? { ...a, rank: arr[i - 1].rank } : a));\n\n return avgs.map(_avg => avgRank.find(({ avg }) => _avg === avg).rank);\n}", + "probId": "120882", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "bEBMTcBreInF2HUsI8Srb", + "author": "codeisneverodd", + "code": "function solution(id_pw, db) {\n const [id, pw] = id_pw;\n if (!db.find(([_id]) => _id === id)) return 'fail';\n return db.find(([_id, _pw]) => _id === id && _pw === pw) ? 'login' : 'wrong pw';\n}", + "probId": "120883", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "e9hMhyRpgd_yQEIsJosu9", + "author": "codeisneverodd", + "code": "function solution(array, height) {\n return array.filter(a => a > height).length;\n}", + "probId": "120585", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "A-b2Wsfa0T54J6VWMLuu9", + "author": "codeisneverodd", + "code": "function solution(letter) {\n const morse = { \n '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',\n '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',\n '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',\n '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',\n '-.--':'y','--..':'z'\n }\n return letter\n .split(' ')\n .map(l => morse[l])\n .join('');\n}", + "probId": "120838", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "tBLnLwhR8r9zfQcOfHxsx", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return my_string.replace(/[aeiou]/g, '');\n}", + "probId": "120849", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8tUQNdlKqJGZVvFP8pfQb", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return Math.floor(num1 / num2);\n}", + "probId": "120805", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wkUGsvxZ3z-W5vTvPExjc", + "author": "codeisneverodd", + "code": "function solution(my_string, n) {\n return [...my_string].map(char => char.repeat(n)).join('');\n}", + "probId": "120825", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "UVfLDE0kUq5-Mb2qiIT-Q", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return eval(my_string);\n}", + "probId": "120902", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "YMoDlo5dmBhdtuG9F-uqQ", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...my_string].reverse().join('');\n}", + "probId": "120822", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "6Y-EoZ6LOvILJ7Lel6NSI", + "author": "codeisneverodd", + "code": "function solution(A, B) {\n const pushRight = str => [str[str.length - 1], ...str.slice(0, str.length - 1)].join('');\n for (let i = 0; i <= A.length; i++) {\n if (A === B) return i;\n A = pushRight(A);\n }\n\n return -1;\n}", + "probId": "120921", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "cI4OhwYtuVREl6zRScqAI", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return my_string\n .match(/[0-9]/g)\n .map(str => +str)\n .sort((a, b) => a - b);\n}", + "probId": "120850", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "BxMASisim4qdys6KJBmev", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...my_string]\n .map(char => char.toLowerCase())\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}", + "probId": "120911", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "uBNgRHK5Itek6vZj_b2ZF", + "author": "codeisneverodd", + "code": "function solution(str1, str2) {\n return str1.includes(str2) ? 1 : 2;\n}", + "probId": "120908", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "i6QAPFUAt3dpKN9EEHkOB", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n return numbers.map(n => n * 2);\n}", + "probId": "120809", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "yyezriEKHxGA4903NHu-p", + "author": "codeisneverodd", + "code": "function solution(num_list) {\n return num_list.reverse();\n}", + "probId": "120821", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8KAzdEaoD--V3usRyB810", + "author": "codeisneverodd", + "code": "function solution(strlist) {\n return strlist.map(s => s.length);\n}", + "probId": "120854", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "4lUPXxJ7YT1dtYeZ-wb5Z", + "author": "codeisneverodd", + "code": "function solution(numbers, num1, num2) {\n return numbers.slice(num1, num2 + 1);\n}", + "probId": "120833", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "xynsg91juTSBA6n0gTGqD", + "author": "codeisneverodd", + "code": "function solution(numbers, direction) {\n return direction === 'right'\n ? [numbers[numbers.length - 1], ...numbers.slice(0, numbers.length - 1)]\n : [...numbers.slice(1), numbers[0]];\n}", + "probId": "120844", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Sc60jxZax2HO-tpUSEC1f", + "author": "codeisneverodd", + "code": "function solution(s1, s2) {\n return s1.filter(s => s2.includes(s)).length;\n}", + "probId": "120903", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "FyRd_EPVRwYpZS9u07dkp", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n return numbers.reduce((a, c) => a + c, 0) / numbers.length;\n}", + "probId": "120817", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "roh_q2oY0XpKwnNsBnP0s", + "author": "codeisneverodd", + "code": "function solution(denum1, num1, denum2, num2) {\n const denum = denum2 * num1 + denum1 * num2;\n const num = num1 * num2;\n const getGCD = (a, b) => (b === 0 ? a : getGCD(b, a % b));\n const gcd = getGCD(denum, num);\n return [denum / gcd, num / gcd];\n}", + "probId": "120808", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "iP7JW645q8rySEb5VCr6t", + "author": "codeisneverodd", + "code": "function solution(sides) {\n const max = Math.max(...sides);\n return max < sides.reduce((a, c) => a + c, 0) - max ? 1 : 2;\n}", + "probId": "120889", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "3XMMT8OfEfX0OAUf5cNuc", + "author": "codeisneverodd", + "code": "function solution(sides) {\n return Math.min(...sides) * 2 - 1;\n}", + "probId": "120868", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "q237y8p-W2-NymFreJNK2", + "author": "codeisneverodd", + "code": "function solution(n, t) {\n return n * 2 ** t;\n}", + "probId": "120910", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "aE4vSAa7PBamLUB4tsrEQ", + "author": "codeisneverodd", + "code": "function solution(n) {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(n); i++) {\n while (n % i === 0) {\n pFactors = [...pFactors, i];\n n /= i;\n }\n }\n if (n >= 2) pFactors = [...pFactors, n];\n return [...new Set(pFactors)].sort((a, b) => a - b);\n}\n\nconst funcB = () => {\n return new Promise(resolve => {\n setTimeout(resolve('guys'), 1000);\n });\n};\n\nconst funcC = async () => {\n const m = 1;\n const res = await funcB();\n return res;\n};\nwindow.addEventListener('DOMContentLoaded', async () => {\n console.log(await funcC());\n});", + "probId": "120852", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "W1Ha5iyhI7K7os4oVnTqK", + "author": "codeisneverodd", + "code": "function solution(n) {\n let count = 0;\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) count += 2;\n }\n if (n % Math.sqrt(n) === 0) count += 1;\n return count;\n}", + "probId": "120836", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "kmOkg2WIkUP1Cm-OJ-MeQ", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return my_string.match(/[0-9]/g).reduce((a, c) => a + +c, 0);\n}", + "probId": "120851", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "uVccwTQARnsGW96AVykfD", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n const nums = my_string.match(/[0-9]+/g);\n return nums ? nums.map(num => +num).reduce((a, c) => a + c, 0) : 0;\n}", + "probId": "120864", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-Os7P_tCHgkNkR4DrJ0PN", + "author": "codeisneverodd", + "code": "function solution(num1, num2) {\n return num1 === num2 ? 1 : -1;\n}", + "probId": "120807", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "zSDOYDjSmsATo2fbfxxWm", + "author": "codeisneverodd", + "code": "function solution(num, k) {\n const index = [...('' + num)].findIndex(n => +n === k);\n return index === -1 ? -1 : index + 1;\n}", + "probId": "120904", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "fLHyXayI4FyOCt255le-1", + "author": "codeisneverodd", + "code": "function solution(money) {\n return [Math.floor(money / 5500), money % 5500];\n}", + "probId": "120819", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "KkTti4G5XKJq39sAvcgUH", + "author": "codeisneverodd", + "code": "function solution(board) {\n const isBombNearby = (r, c) => {\n const nearby = [\n [-1, -1],\n [-1, 0],\n [-1, 1],\n [0, -1],\n [0, 1],\n [1, -1],\n [1, 0],\n [1, 1],\n ];\n\n const isInBoard = (r, c) => r >= 0 && r < board.length && c >= 0 && c < board.length;\n\n return nearby.some(([dR, dC]) => isInBoard(r + dR, c + dC) && board[r + dR][c + dC] === 1);\n };\n\n let count = 0;\n\n for (let r = 0; r < board.length; r++) {\n for (let c = 0; c < board.length; c++) {\n if (board[r][c] !== 1 && !isBombNearby(r, c)) count += 1;\n }\n }\n return count;\n}", + "probId": "120866", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "E6dyRuBWZAnVUJA4Du6ev", + "author": "codeisneverodd", + "code": "function solution(cipher, code) {\n return [...cipher].reduce((a, c, i) => ((i + 1) % code === 0 ? a + c : a), '');\n}", + "probId": "120892", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "VC4tCj0840HRGp-z1Q4qE", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = [];\n for (let i = 1; i < Math.sqrt(n); i++) {\n if (n % i === 0) answer = [...answer, i, n / i];\n }\n if (Number.isInteger(Math.sqrt(n))) answer = [...answer, Math.sqrt(n)];\n return answer.sort((a, b) => a - b);\n}", + "probId": "120897", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7sOJt_9XaqOJvghXbf_kC", + "author": "codeisneverodd", + "code": "function solution(n, k) {\n return n * 12000 + (k - Math.floor(n / 10)) * 2000;\n}", + "probId": "120830", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "3BTyE9pEztLOFSaUde2h7", + "author": "codeisneverodd", + "code": "function solution(num, total) {\n const numArr = Array.from({ length: num }, (_, i) => i);\n const sum = numArr.reduce((a, c) => a + c);\n return numArr.map(n => n - (sum - total) / num);\n}", + "probId": "120923", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "EIIrUFaAS0V5x6_bEJexe", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const nums = { zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9 };\n const regex = new RegExp(Object.keys(nums).join('|'), 'g');\n return +numbers.replace(regex, key => nums[key]);\n}", + "probId": "120894", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "jllBcdS7x6TpR19h4i3mW", + "author": "codeisneverodd", + "code": "function solution(price) {\n if (price >= 500000) return Math.floor(price * 0.8);\n if (price >= 300000) return Math.floor(price * 0.9);\n if (price >= 100000) return Math.floor(price * 0.95);\n return price;\n}", + "probId": "120818", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "k6ifMbSEXrkZxfNsJob9s", + "author": "codeisneverodd", + "code": "function solution(babbling) {\n const convertPWordsToNum = word => {\n const pWords = ['aya', 'ye', 'woo', 'ma'];\n return pWords.reduce((result, pWord, i) => result.replaceAll(pWord, i), word);\n };\n const canPronounce = word => {\n const result = convertPWordsToNum(word);\n return !/[^\\d]/.test(result) && [...result].every((num, i) => i + 1 > result.length || num !== result[i + 1]);\n };\n\n return babbling.filter(b => canPronounce(b)).length;\n}", + "probId": "120956", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "k1QZofbDT5yfaiJexD24k", + "author": "codeisneverodd", + "code": "function solution(spell, dic) {\n const sort = str => [...str].sort((a, b) => (a < b ? -1 : a !== b ? 1 : 0)).join('');\n return dic.find(dic => sort(dic) === sort(spell.join(''))) ? 1 : 2;\n}", + "probId": "120869", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "omKQmjAADJvBbGzzgMH-k", + "author": "codeisneverodd", + "code": "function solution(age) {\n return [...('' + age)].map(num => String.fromCharCode('a'.charCodeAt(0) + +num)).join('');\n}", + "probId": "120834", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "jOpezmOte2FKGRKxMqOws", + "author": "codeisneverodd", + "code": "function solution(a, b) {\n const getGCD = (a, b) => {\n let gcd = 1;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if (a % i === 0 && b % i === 0) gcd = i;\n }\n return gcd;\n };\n\n const getPrimeFactors = num => {\n let pFactors = [];\n for (let i = 2; i <= Math.sqrt(num); i++) {\n while (num % i === 0) {\n pFactors = [...pFactors, i];\n num /= i;\n }\n }\n if (num > 2) pFactors = [...pFactors, num];\n return pFactors;\n };\n\n return getPrimeFactors(b / getGCD(a, b)).find(n => n !== 2 && n !== 5) ? 2 : 1;\n}", + "probId": "120878", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LMVzWcSFfwsYtSgO6hNXc", + "author": "codeisneverodd", + "code": "function solution(bin1, bin2) {\n return (parseInt(bin1, 2) + parseInt(bin2, 2)).toString(2);\n}", + "probId": "120885", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gtQGO4DvoU1oLUddtt-LZ", + "author": "codeisneverodd", + "code": "function solution(my_string, num1, num2) {\n const str = [...my_string];\n\n [str[num1], str[num2]] = [str[num2], str[num1]];\n\n return str.join('');\n}", + "probId": "120895", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "0VONCnZmY7f3yd625hIpr", + "author": "codeisneverodd", + "code": "function solution(n) {\n return [...('' + n)].map(num => +num).reduce((a, c) => a + c, 0);\n}", + "probId": "120906", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "GlYKS6KBtGmPGmladvL0U", + "author": "codeisneverodd", + "code": "function solution(my_str, n) {\n let result = [];\n for (let i = 0; i < my_str.length / n; i++) result = [...result, my_str.slice(i * n, i * n + n)];\n return result;\n}", + "probId": "120913", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "j3E7UTIvK9SivBYv-QN_b", + "author": "codeisneverodd", + "code": "function solution(n) {\n let num = 0;\n let count = 0;\n\n while (count < n) {\n num += 1;\n if (!('' + num).includes('3') && num % 3 !== 0) count += 1;\n }\n\n return num;\n}", + "probId": "120871", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "zuKW6v0J6alpgcDtzf58X", + "author": "codeisneverodd", + "code": "function solution(dot) {\n const [x, y] = dot;\n if (y > 0) return x > 0 ? 1 : 2;\n return x < 0 ? 3 : 4;\n}", + "probId": "120841", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Vhp-_gTRlWlIK9bwC20Bs", + "author": "codeisneverodd", + "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? 1 : 2;\n}", + "probId": "120909", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "0Rbwoi8hQYeh8KnDJ7Pjw", + "author": "codeisneverodd", + "code": "function solution(M, N) {\n return M * N - 1;\n}", + "probId": "120922", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ZXHZe-XilNybP5cTIZClP", + "author": "codeisneverodd", + "code": "function solution(box, n) {\n return Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);\n}", + "probId": "120845", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LrS3JXzlAzv78oxs0JRvP", + "author": "codeisneverodd", + "code": "function solution(my_string) {\n return [...new Set(my_string)].join('');\n}", + "probId": "120888", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "kJJRY9GgLy98mK7jGPdK3", + "author": "codeisneverodd", + "code": "function solution(array, n) {\n return array.filter(a => a === n).length;\n}", + "probId": "120583", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "5UBJ9ldIXAeNjpp0JIkfB", + "author": "codeisneverodd", + "code": "function solution(array) {\n return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];\n}", + "probId": "120811", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "SiUS7rs55Tz70IpM2SQzb", + "author": "codeisneverodd", + "code": "const readline = require('readline');\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet input = [];\n\nrl.on('line', function (line) {\n input = line.split(' ');\n}).on('close', function () {\n for (let i = 1; i <= +input[0]; i++) console.log('*'.repeat(i));\n});", + "probId": "120823", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "2SCINAyIX_7A8LruK1A1V", + "author": "codeisneverodd", + "code": "function solution(dots) {\n const xDots = dots.flatMap(([x, y]) => x);\n const yDots = dots.flatMap(([x, y]) => y);\n const width = Math.max(...xDots) - Math.min(...xDots);\n const height = Math.max(...yDots) - Math.min(...yDots);\n return width * height;\n}", + "probId": "120860", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "jouig9uSYkIg_D-tsM4Zu", + "author": "codeisneverodd", + "code": "function solution(emergency) {\n const sorted = [...emergency].sort((a, b) => b - a);\n return emergency.map(e => sorted.findIndex(s => s === e) + 1);\n}", + "probId": "120835", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "mPD29Z9lQ_cxKrDHC__oI", + "author": "codeisneverodd", + "code": "function solution(num_list) {\n const evenLength = num_list.filter(n => n % 2 === 0).length;\n return [evenLength, num_list.length - evenLength];\n}", + "probId": "120824", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "zy6mk4AvXF9xztiXRS8-4", + "author": "codeisneverodd", + "code": "function solution(n) {\n let nums = [];\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 1) nums = [...nums, i];\n }\n return nums;\n}", + "probId": "120813", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "kHlGOVzrZIqpqvNmbWow6", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = 0;\n for (let i = 0; i <= n; i++) {\n if (i % 2 === 0) answer += i;\n }\n return answer;\n}", + "probId": "120831", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "JQpPiPuxh73c7kO5a7Nzh", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const [first, second, ...rest] = numbers.sort((a, b) => b - a);\n return first * second;\n}", + "probId": "120847", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "k8E_n2JN9JYI6PrLnGzfX", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const sorted = numbers.sort((a, b) => a - b);\n return Math.max(sorted[0] * sorted[1], sorted[sorted.length - 1] * sorted[sorted.length - 2]);\n}", + "probId": "120862", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "czion0YKw_J-4kluumzhK", + "author": "codeisneverodd", + "code": "function solution(array) {\n const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n const max = Math.max(...Object.values(counts));\n const modes = Object.keys(counts).filter(key => counts[key] === max);\n return modes.length === 1 ? +modes[0] : -1;\n}", + "probId": "120812", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "JWQH6EyirigybzhegY5ST", + "author": "codeisneverodd", + "code": "function solution(chicken) {\n const order = coupons => {\n if (coupons < 10) return 0;\n const service = Math.floor(coupons / 10);\n return service + order(service + (coupons % 10));\n };\n return order(chicken);\n}", + "probId": "120884", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "CDR9AYzvMSjY8652CVTQN", + "author": "codeisneverodd", + "code": "//명령형\nfunction solution(keyinput, board) {\n const moves = {\n up: [0, 1],\n down: [0, -1],\n left: [-1, 0],\n right: [1, 0],\n };\n const [rangeX, rangeY] = [Math.floor(board[0] / 2), Math.floor(board[1] / 2)];\n\n let pos = [0, 0];\n\n keyinput\n .map(key => moves[key])\n .forEach(move => {\n if (Math.abs(move[0] + pos[0]) > rangeX || Math.abs(move[1] + pos[1]) > rangeY) return;\n pos[0] += move[0];\n pos[1] += move[1];\n });\n\n return pos;\n}", + "probId": "120861", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "L0AgXguklH1kXTw0yykGl", + "author": "codeisneverodd", + "code": "function solution(s) {\n const arr = s.split(' ');\n while (arr.includes('Z')) arr.splice(arr.indexOf('Z') - 1, 2);\n return arr.map(n => +n).reduce((a, c) => a + c, 0);\n}", + "probId": "120853", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8Fs11e7oBekuxNjpAstT3", + "author": "codeisneverodd", + "code": "function solution(numlist, n) {\n return numlist.sort((a, b) => {\n const [aDiff, bDiff] = [Math.abs(a - n), Math.abs(b - n)];\n if (aDiff === bDiff) return b - a;\n return aDiff - bDiff;\n });\n}", + "probId": "120880", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "vdwvjmlu0CVowMKz2vTZD", + "author": "codeisneverodd", + "code": "function solution(my_string, letter) {\n return my_string.replaceAll(letter, '');\n}", + "probId": "120826", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "hbxjMqfAUJmkubGtkiuZf", + "author": "codeisneverodd", + "code": "function solution(n) {\n let factorial = [1, 1];\n for (let i = 2; n > factorial[i - 1]; i++) factorial[i] = factorial[i - 1] * i;\n\n return factorial[factorial.length - 1] === n ? factorial.length - 1 : factorial.length - 2;\n}", + "probId": "120848", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "uT6FMY9QYKdJW8t9cY7Lk", + "author": "codeisneverodd", + "code": "function solution(message) {\n return message.length * 2;\n}", + "probId": "120898", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "orCSuHScIqur0ogDwynkK", + "author": "codeisneverodd", + "code": "function solution(dots) {\n const getInclination = ([[x1, y1], [x2, y2]]) => (x2 !== x1 ? (y2 - y1) / (x2 - x1) : Infinity);\n const isParallel = (line1, line2) => getInclination(line1) === getInclination(line2);\n\n return dots.some(dot => {\n const line1 = [dots[0], dot];\n const line2 = dots.filter(dot => !line1.includes(dot));\n return isParallel(line1, line2);\n })\n ? 1\n : 0;\n}", + "probId": "120875", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "PLZGvoLrsqLBgJXgDXUwd", + "author": "codeisneverodd", + "code": "function solution(n) {\n return Math.floor((n - 1) / 7) + 1;\n}", + "probId": "120814", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "H_H5U2fZK_cMpSSW8A_Rg", + "author": "codeisneverodd", + "code": "function solution(n) {\n const getLCM = (a, b) => {\n let lcm = 1;\n while ((lcm % a !== 0 || lcm % b !== 0) && lcm < a * b) lcm += 1;\n return lcm;\n };\n\n return getLCM(n, 6) / 6;\n}", + "probId": "120815", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "UF4EuA0Zbky3u50b1ay54", + "author": "codeisneverodd", + "code": "function solution(slice, n) {\n return Math.floor((n - 1) / slice) + 1;\n}", + "probId": "120816", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "44CkOTIiD_oxexcg_TZIK", + "author": "codeisneverodd", + "code": "function solution(s) {\n const count = [...s].reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});\n return Object.keys(count)\n .filter(key => count[key] === 1)\n .sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))\n .join('');\n}", + "probId": "120896", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Ude8dWJ0veL-IkVuADF1k", + "author": "codeisneverodd", + "code": "function solution(n) {\n const isPrime = num => {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return true;\n }\n return false;\n };\n\n let count = 0;\n\n for (let i = 1; i <= n; i++) {\n if (isPrime(i)) count += 1;\n }\n \n return count;\n}", + "probId": "120846", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "AEcVZmiBojNk8Oboba6mD", + "author": "codeisneverodd", + "code": "function solution(a, b) {\n let count = 0;\n const day = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const month = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n for (let i = 1; i < a; i++) count += month[i];\n count += b;\n return day[(count + 4) % 7]; // 금요일 부터 1일 이므로\n}", + "probId": "12901", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "S22YSfhqRPUc6UHmqWtTT", + "author": "yongchanson", + "code": "function solution(a, b) {\n const month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n const week = [\"THU\", \"FRI\", \"SAT\", \"SUN\", \"MON\", \"TUE\", \"WED\"];\n\n let sum = b;\n for (\n let i = 0;\n i < a - 1;\n i++ //ex)5월인 경우 1~4월까지 더해준다.\n )\n sum += month[i];\n\n return week[sum % 7]; //1일이 금요일이므로, 0이면 목요일이 출력되어야 한다.\n}", + "probId": "12901", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LjTnxDHrI117NKRnU7Zqy", + "author": "chaerin-dev", + "code": "function solution(a, b) {\n let arr = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n let week = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n // 1월 1일부터 a월 b일까지 며칠 차이인지 저장할 변수\n let passedDays = 0;\n // a달 전까지의 모든 달에 대해 각 달의 날짜 수 더해줌\n for (let i = 1; i < a; i++) passedDays += arr[i];\n // b일 더해주고 1월 0일이 아닌 1월 1일부터 시작하므로 1 빼줌\n passedDays += b - 1;\n return week[(5 + passedDays) % 7];\n}", + "probId": "12901", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "1kHjxIv6xoYdMdmdvQlAg", + "author": "prove-ability", + "code": "function solution(a, b) {\n var answer = \"\";\n // 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요?\n const days = [\"SUN\", \"MON\", \"TUE\", \"WED\", \"THU\", \"FRI\", \"SAT\"];\n const daysOfMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n // 2016년 1월 1일은 금요일로 4를 더해준다\n let totalDays = 4;\n // a 이전 모든 달의 일 수를 더한다\n for (let i = 0, len = a - 1; i < len; i++) {\n totalDays += daysOfMonth[i];\n }\n // totalDays 와 해당 일을 더해주고 7로 나눈 나머지\n const dayIndex = (totalDays + b) % 7;\n return days[dayIndex];\n}", + "probId": "12901", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "czN4T6LuWlCohCBZEFVSf", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = 0;\n const ternaryReversed = decimalToTernaryReversed(n);\n answer = parseInt(ternaryReversed, 3);\n return answer;\n}\n\nconst decimalToTernaryReversed = (num) => {\n let ternary = \"\";\n while (num >= 3) {\n ternary += (num % 3).toString();\n num = Math.floor(num / 3);\n }\n ternary += num.toString();\n return ternary;\n};", + "probId": "68935", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "bQuOLguok3JdvtEXbswhY", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = n.toString(3).split(\"\").reverse().join(\"\");\n\n return parseInt(answer, 3);\n}", + "probId": "68935", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "M3fIPh7bjuq-s72EiNRB_", + "author": "prove-ability", + "code": "function solution(n) {\n return parseInt(n.toString(3).split(\"\").reverse().join(\"\"), 3)\n}", + "probId": "68935", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "w731dCWjCy4oHDfK9usEH", + "author": "codeisneverodd", + "code": "function solution(array, commands) {\n return commands.map((cmd) => {\n const arrCmd = array.slice(cmd[0] - 1, cmd[1]).sort((a, b) => a - b);\n return arrCmd[cmd[2] - 1];\n });\n}", + "probId": "42748", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "JCbzIgZhJ3YjVlXbIT-z9", + "author": "jaewon1676", + "code": "function solution(array, commands) {\n var result = [];\n var temp = [];\n for (var i = 0; i < commands.length; i++) {\n temp = array.slice(commands[i][0] - 1, commands[i][1]).sort((a, b) => {\n return a - b;\n });\n console.log(temp);\n result.push(temp[commands[i][2] - 1]);\n }\n return result;\n}", + "probId": "42748", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "JF0TOt-JJ6h1O8Krb60Ke", + "author": "prove-ability", + "code": "function solution(array, commands) {\n var answer = [];\n commands.forEach(([i, j, k]) => {\n const su = array.slice(i - 1, j).sort((a, b) => a - b)[k - 1];\n answer.push(su);\n });\n return answer;\n}", + "probId": "42748", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "45jjvhNysFJA-M7MRfbX2", + "author": "createhb21", + "code": "function solution(array, commands) {\n let answer = [];\n for (let i = 0; i < commands.length; i++) {\n let eachCommand = commands[i];\n let slice = array.slice(eachCommand[0] - 1, eachCommand[1]);\n answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1]);\n }\n return answer;\n}", + "probId": "42748", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "KeoN162P78OTI7INZNqDO", + "author": "chaerin-dev", + "code": "function solution(array, commands) {\n let t = commands.length;\n let answer = [];\n while (t--) {\n let command = commands.shift();\n answer.push(\n array.slice(command[0] - 1, command[1]).sort((a, b) => a - b)[\n command[2] - 1\n ]\n );\n }\n return answer;\n}", + "probId": "42748", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wsEkfxo9XV-p77hkbekXa", + "author": "codeisneverodd", + "code": "function solution(dartResult) {\n const regex = /\\d{1,2}[SDT]{1}[*|#]?/g;\n let result = [];\n for (const dart of dartResult.match(regex)) {\n const game = [...dart.split(/([SDT]{1})/)];\n const score = game[0];\n let bonus = 1;\n let option = 1;\n if (game[1] === \"S\") bonus = 1;\n if (game[1] === \"D\") bonus = 2;\n if (game[1] === \"T\") bonus = 3;\n\n if (game[2] === \"*\") {\n if (result.length !== 0) result[result.length - 1] *= 2;\n option = 2;\n }\n if (game[2] === \"#\") option = -1;\n\n result.push(score ** bonus * option);\n }\n\n return result.reduce((a, b) => a + b);\n}", + "probId": "17682", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "irR2UXQX-A5XSGaRc1Hae", + "author": "jaewon1676", + "code": "function solution(dartResult) {\n var answer = 0;\n let score = 0;\n let cnt = [];\n\n for (let i = 0; i < dartResult.length; i++) {\n //점수가 주어질때\n if (!isNaN(dartResult[i])) {\n // i가 1인 경우는 10점, 그외에는 점수\n score = Number(dartResult[i - 1]) === 1 ? 10 : Number(dartResult[i]);\n //보너스 S일때\n } else if (dartResult[i] === \"S\") {\n cnt.push(score);\n //보너스 D일때\n } else if (dartResult[i] === \"D\") {\n cnt.push(Math.pow(score, 2));\n //보너스 T일때\n } else if (dartResult[i] === \"T\") {\n cnt.push(Math.pow(score, 3));\n //옵션 *일떄\n } else if (dartResult[i] === \"*\") {\n cnt[cnt.length - 2] = cnt[cnt.length - 2] * 2;\n cnt[cnt.length - 1] = cnt[cnt.length - 1] * 2;\n //옵션 #일때\n } else if (dartResult[i] === \"#\") {\n cnt[cnt.length - 1] = -1 * cnt[cnt.length - 1];\n }\n }\n //3개의 점수 합산\n answer = cnt.reduce((acc, cur) => acc + cur, 0);\n return answer;\n}", + "probId": "17682", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "VFnKIAMHH4Xt05M7jCGR8", + "author": "codeisneverodd", + "code": "function solution(n, arr1, arr2) {\n var answer = [];\n let mapA = [];\n let mapB = [];\n for (let i = 0; i < n; i++) {\n let rowArrA = arr1[i].toString(2).split(\"\");\n let rowArrB = arr2[i].toString(2).split(\"\");\n for (let j = 0, len = rowArrA.length; j < n - len; j++)\n rowArrA.unshift(\"0\");\n for (let j = 0, len = rowArrB.length; j < n - len; j++)\n rowArrB.unshift(\"0\");\n mapA.push(rowArrA);\n mapB.push(rowArrB);\n }\n let answer2D = mapA.slice();\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n answer2D[i][j] = mapA[i][j] === \"0\" && mapB[i][j] === \"0\" ? \" \" : \"#\";\n }\n }\n answer = answer2D.map((row) => row.join(\"\"));\n return answer;\n}", + "probId": "17681", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "5SiIjKY4OzuKQ5AL87KS3", + "author": "jaewon1676", + "code": "function solution(n, arr1, arr2) {\n let answer = [];\n for (let i = 0; i < n; i++) {\n let temp = (arr1[i] | arr2[i]).toString(2);\n let line = []; // 한 행의 모든 2진수 보관\n\n for (let j = temp.length - n; j < temp.length; j++) {\n if (temp[j] == 1) {\n line.push(\"#\");\n } else {\n line.push(\" \");\n }\n }\n answer.push(line.join(\"\"));\n }\n return answer;\n}\n\n/* 풀이 과정\n1. 배열 arr1, arr2 을 2진수로 변한한다. 이 때, 하나라도 1일 시에는 1로 변환하고, 그렇지 않으면 0을 반환한다.\n2. 9번의 반복문을 행의 길이만큼 돌려 1이면 #, 그렇지 않으면 띄어쓰기를 push 해준다.\n3. 행의 배열의 원소를 join 메서드를 사용하여 문자열로 합친다.*/", + "probId": "17681", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "YpoSpGPJGAlrqUgsohv5i", + "author": "codeisneverodd", + "code": "function solution(x, n) {\n return Array.from(Array(n), (_, index) => x * (index + 1));\n}", + "probId": "12954", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Cvkcn0ZBRI8ZT6VViEajm", + "author": "chaerin-dev", + "code": "function solution(x, n) {\n var answer = [];\n let add_gap = x;\n // n번 반복\n for (let i = 0; i < n; i++) {\n answer.push(x); // 처음 배열에 넣을 x\n x += add_gap; // x를 배열에 넣은 후 x값을 add_gap만큼 증가\n }\n return answer;\n}", + "probId": "12954", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "3qn2IflJ7P5F_tKB6XC7f", + "author": "jaewon1676", + "code": "function solution(n) {\n let str = \"\";\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + \"수\") : (str = str + \"박\");\n }\n return str;\n}", + "probId": "12954", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "m0z2ecvCUempXfOB6GMMY", + "author": "prove-ability", + "code": "function solution(x, n) {\n var answer = [];\n let i = 1;\n // n개 지니는 리스트를 리턴해야 합니다\n while (answer.length !== n) {\n // x부터 시작해 x씩 증가하는 숫자\n answer.push(x * i);\n i++;\n }\n return answer;\n}", + "probId": "12954", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "dxeSx_ZVdGgq2z1QHa6Cw", + "author": "codeisneverodd", + "code": "function solution(s) {\n return s.length % 2 !== 0\n ? s[Math.floor(s.length / 2)]\n : s.slice(s.length / 2 - 1, s.length / 2 + 1);\n}", + "probId": "12903", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "r-rwFERI9-Lah5UA83Maq", + "author": "yongchanson", + "code": "function solution(s) {\n var answer = \"\";\n let L2 = s.length / 2;\n\n answer =\n s.length % 2 == 0 ? s[L2 - 1] + s[L2] : (answer = s[Math.ceil(L2 - 1)]);\n\n return answer;\n}", + "probId": "12903", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-qN4d-WX14-j50bZByLaG", + "author": "prove-ability", + "code": "function solution(s) {\n var answer = '';\n // 중간 지점 찾기\n const point = Math.floor(s.length / 2);\n // 짝수인 경우 - (중간지점 - 1) + 중간지점 \n if(s.length % 2 ===0) answer = s[point - 1] + s[point];\n // 홀수인 경우 - 중간지점\n else answer = s[point];\n return answer;\n}", + "probId": "12903", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "70_67tohf_a1hLYU_krte", + "author": "chaerin-dev", + "code": "function solution(s) {\n return s.length % 2\n ? s[parseInt(s.length / 2)]\n : s[s.length / 2 - 1] + s[s.length / 2];\n}", + "probId": "12903", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "oxWHg53i3iT665f8hozdE", + "author": "jaewon1676", + "code": "function solution(s) {\n var answer = '';\n \n if (s.length % 2 == 0 ) { // 짝수일 경우,\n answer = s[s.length / 2 - 1] + s[s.length / 2];\n } else {\n answer = s[parseInt(s.length / 2)]; // 홀수일 경우\n }\n return answer;\n}", + "probId": "12903", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "tplZVPK_PKF-XuBUl5Eq-", + "author": "codeisneverodd", + "code": "function solution(arr) {\n var answer = [arr[0]];\n for (let i = 1; i < arr.length; i++) {\n //arr를 수정하면(shift해서 사용하면) 효율성 테스트에서 미통과됩니다.\n answer[answer.length - 1] !== arr[i] ? answer.push(arr[i]) : null;\n }\n return answer;\n}", + "probId": "12906", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "GzhFem1SEpbyrlwaIwQkw", + "author": "chaerin-dev", + "code": "function solution(arr) {\n // 콜백함수의 조건을 만족하는 '모든' 값을 배열로 반환하고,\n // 조건을 만족하는 값이 없으면 빈 배열을 반환하는 filter 메서드 활용\n // 첫 번째 요소의 경우 undefined와 비교\n return arr.filter((item, index) => item !== arr[index - 1]);\n}", + "probId": "12906", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "sSuxksrH_HTsCFC99QbVD", + "author": "prove-ability", + "code": "function solution(arr) {\n let answer = [];\n // 이중 배열을 사용해서 포인터?를 두 개를 사용한다\n for (let i = 0, len = arr.length - 1; i < len; i++) {\n // i 의 다음수를 비교하기 위해 j = (i + 1)\n for (let j = i + 1, len = arr.length; j < len; j++) {\n // i 와 j 번째 값이 같이 않다면\n if (arr[i] !== arr[j]) {\n answer.push(arr[i]);\n i = j - 1;\n break;\n }\n }\n }\n answer.push(arr[arr.length - 1]);\n return answer;\n}", + "probId": "12906", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Apl4xThs1U943jNGofenj", + "author": "codeisneverodd", + "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((element) => {\n element % divisor === 0 ? answer.push(element) : null;\n });\n answer.length === 0 ? answer.push(-1) : null;\n answer.sort((a, b) => a - b);\n return answer;\n}", + "probId": "12910", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wQ0wLhdnBhT5nV-HrUOG6", + "author": "dev", + "code": "function solution(arr, divisor) {\n let answer = [];\n arr.forEach((e) => {\n if (e % divisor === 0) answer.push(e);\n });\n return answer.length ? answer.sort((a, b) => a - b) : [-1];\n}", + "probId": "12910", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9gBj_SQybGqNPFUgPgwAL", + "author": "prove-ailbity", + "code": "function solution(arr, divisor) {\n var answer = [];\n arr.forEach((v) => v % divisor === 0 && answer.push(v))\n return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);\n}", + "probId": "12910", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wBB0LgxWB13kFvcb7a0bn", + "author": "codeisneverodd", + "code": "function solution(n) {\n\n let answer = 0;\n for (let divisor = n - 1; divisor >= 2; divisor--) {\n if (n % divisor === 1) answer = divisor;\n }\n return answer;\n}", + "probId": "87389", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-3DC0G3b7HQlRUoXI1xS4", + "author": "prove-ability", + "code": "function solution(n) {\n var answer = 0;\n let i = 0;\n while(true) {\n if(n % i === 1) {\n answer = i;\n break;\n }\n i++;\n }\n return answer;\n}", + "probId": "87389", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "eNmzI_I9Cm2Zosmx6ry0u", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = 0;\n for (let i=1; i x + y * b[i], 0);\n}", + "probId": "70128", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "3TpNIAgLL-5u6NTCVTVPt", + "author": "yongchanson", + "code": "function solution(a, b) {\n var answer = 0;\n\n for (i = 0; i < a.length; i++) {\n answer += a[i] * b[i];\n }\n return answer;\n}", + "probId": "70128", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7FaF84IBRAP5M6el6xMzE", + "author": "prove-ability", + "code": "function solution(a, b) {\n var answer = 0;\n\n for (let i = 0, len = a.length; i < len; i++) {\n answer += a[i] * b[i];\n }\n\n return answer;\n}", + "probId": "70128", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "H1wPpp1YCjQYNFtS4N5p6", + "author": "jaewon1676", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i=0; i acc + e * b[i], 0);\n}", + "probId": "70128", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "u1LRslWaD35sQvv9sq4Ix", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n const answer = [];\n for (let i = 0; i < numbers.length; i++) {\n for (let j = i + 1; j < numbers.length; j++) {\n answer.push(numbers[i] + numbers[j]);\n }\n }\n return [...new Set(answer)].sort((a, b) => a - b);\n}", + "probId": "68644", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ddHM-zBFEziRa-cT5KCbU", + "author": "prove-ability", + "code": "function solution(numbers) {\n const answer = [];\n \n for(let i = 0, len = numbers.length; i < len; i++) {\n for(let j = i + 1, len = numbers.length; j < len; j++) {\n if(!answer.includes(numbers[i] + numbers[j])) answer.push(numbers[i] + numbers[j])\n }\n }\n \n return answer.sort((a, b) => a - b);\n}", + "probId": "68644", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "cH427BdoJegcnYsf3edFD", + "author": "codeisneverodd", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}", + "probId": "12912", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rnopZ1is74uXF9AaqtqaK", + "author": "chaerin-dev", + "code": "function solution(a, b) {\n let answer = 0;\n for (let i = Math.min(a, b); i <= Math.max(a, b); i++) {\n answer += i;\n }\n return answer;\n}", + "probId": "12912", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "nESVaMUpCWlxN7XdDjjjE", + "author": "prove-ability", + "code": "function solution(a, b) {\n return Array.from({length: Math.max(a, b) - Math.min(a, b) + 1}, (_, i) => i + Math.min(a, b)).reduce((a, b) => a + b, 0);\n}", + "probId": "12912", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "bV_2v8ALJkaaeWq2X27Py", + "author": "jaewon1676", + "code": "function solution(a, b) {\n if (b < a){ // b가 a보다 큰 수가 되도록 해준다.\n let c = b\n b = a\n a = c\n }\n let sum = 0; // 합을 구할 변수\n for (let i=a; i<=b; i++){\n sum += i\n }\n return sum;\n}", + "probId": "12912", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "vefgEjNOZgxFWk82k8HSb", + "author": "codeisneverodd", + "code": "function solution(lottos, win_nums) {\n // 0이 없는 경우 > 최저 순위 == 최고 순위\n // 0이 있는 경우 > 모두 0인경우 > 1위\n // > 0이 아닌 수가 있는 경우 > 최저 순위 - (0의 개수) = 최고순위\n // 0이 있는 경우 0만 중복이 가능하므로, 0의 개수를 (배열 길이 - 집합 길이 + 1)를 통해 구함.\n // 순위는 7 - hit\n // 최종적으로 7위인 경우 6위로 변경\n var answer = [];\n if (lottos.indexOf(0) === -1) {\n answer[0] = answer[1] = 7 - hit(lottos, win_nums);\n } else {\n const zeroCount = lottos.length - [...new Set(lottos)].length + 1;\n answer[1] = 7 - hit(lottos, win_nums);\n zeroCount === 6 ? (answer[0] = 1) : (answer[0] = answer[1] - zeroCount);\n }\n for (let i = 0; i < 2; i++) {\n answer[i] >= 7 ? (answer[i] = 6) : null;\n }\n return answer;\n}\n\nfunction hit(lottos, win_nums) {\n let result = 0;\n lottos.forEach((element) => {\n win_nums.indexOf(element) === -1 ? null : (result += 1);\n });\n return result;\n}", + "probId": "77484", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9dpy1EpfSz9k1iArBgumY", + "author": "jaewon1676", + "code": "function solution(lottos, win_nums) {\n var answer = [];\n let max = 7;\n let min = 7;\n console.log(lottos);\n console.log(win_nums);\n for (let i = 0; i < 6; i++) {\n if (lottos.includes(win_nums[i])) {\n max--;\n }\n }\n min = max;\n for (let i = 0; i < 6; i++) {\n if (lottos[i] == 0) min--;\n }\n if (max == 7) max = 6;\n if (min == 7) min = 6;\n answer = [min, max];\n return answer;\n}", + "probId": "77484", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "vxbGIckHl0SSCwsKi5pe1", + "author": "yongchanson", + "code": "function solution(lottos, win_nums) {\n //최고당첨개수 : maxPoint + basicPoint\n //최저당첨개수 : basicPoint\n\n let basicPoint = 0;\n let maxPoint = 0;\n let answer = [];\n\n lottos.forEach(function (lottos_item) {\n win_nums.forEach(function (win_nums_item) {\n if (lottos_item == win_nums_item) {\n basicPoint++;\n }\n });\n });\n\n lottos.forEach(function (item) {\n if (item == 0) {\n maxPoint++;\n }\n });\n\n maxPoint + basicPoint >= 2\n ? answer.push(7 - maxPoint - basicPoint)\n : answer.push(6);\n basicPoint >= 2 ? answer.push(7 - basicPoint) : answer.push(6);\n\n return answer;\n}", + "probId": "77484", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "EyheSzDORX6Wu8Bei-nL0", + "author": "prove-ability", + "code": "function solution(lottos, win_nums) {\n // 맞춘 수와 0의 갯수 활용할 변수 0으로 초기화\n let winCount = 0;\n let zeroCount = 0;\n // 내 로또 번호 하니씩 접근\n lottos.forEach((num) => {\n // 번호가 0이 아니고 당첨 번호라면\n if (num !== 0 && win_nums.includes(num)) {\n winCount++;\n // 번호가 0이라면\n } else if (num === 0) {\n zeroCount++;\n }\n });\n // 일치한 수와 등수는 반비례하기 때문에 빼기 7\n // 이때 등수를 벗어나면 낙첨(6) 으로 고정\n let max = 7 - (winCount + zeroCount);\n if (max > 5) max = 6;\n let min = 7 - winCount;\n if (min > 5) min = 6;\n\n return [max, min];\n}", + "probId": "77484", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "qjNmmEmjC9keh1q2piy0p", + "author": "chaerin-dev", + "code": "function solution(lottos, win_nums) {\n let zeroCount = 0;\n let winCount = 0;\n lottos.forEach((item) => {\n if (item === 0) zeroCount++;\n else if (win_nums.includes(item)) winCount++;\n });\n let maxRank = Math.min(7 - (winCount + zeroCount), 6);\n let minRank = Math.min(7 - winCount, 6);\n return [maxRank, minRank];\n}", + "probId": "77484", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "jtXAf9CXgcBR0eVal_VcX", + "author": "codeisneverodd", + "code": "function solution(answers) {\n const answer = [];\n const firstPattern = [1, 2, 3, 4, 5];\n const firstPLength = firstPattern.length;\n const secondPattern = [2, 1, 2, 3, 2, 4, 2, 5];\n const secondPLength = secondPattern.length;\n const thirdPattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n const thirdLength = thirdPattern.length;\n let correctCount = [0, 0, 0];\n\n for (let i = 0, len = answers.length; i < len; i++) {\n if (answers[i] === firstPattern[i % firstPLength]) correctCount[0] += 1;\n if (answers[i] === secondPattern[i % secondPLength]) correctCount[1] += 1;\n if (answers[i] === thirdPattern[i % thirdLength]) correctCount[2] += 1;\n }\n\n const maxScore = Math.max(...correctCount);\n for (let i = 0; i < 3; i++) {\n if (correctCount[i] === maxScore) answer.push(i + 1);\n }\n\n return answer;\n}\n\n// 완벽한 정답이 아닙니다.", + "probId": "42840", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "hUEeeo5yGROmIsN_jAgdO", + "author": "prove-ability", + "code": "function solution(answers) {\n let result = [];\n\n let players = {\n 1: {\n pattern: [1, 2, 3, 4, 5],\n count: 0,\n },\n 2: {\n pattern: [2, 1, 2, 3, 2, 4, 2, 5],\n count: 0,\n },\n 3: {\n pattern: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],\n count: 0,\n },\n };\n let max = 0;\n answers.forEach((answer, index) => {\n for (let [key, { pattern }] of Object.entries(players)) {\n // 조정된 index 의 값과 답이 맞다면 해당 플레이어 count 증가\n if (pattern[index % pattern.length] === answer) {\n players[key].count++;\n // 제일 높은 count 구하기\n if (max < players[key].count) max = players[key].count;\n }\n }\n });\n // players 중에 count 가 max 와 값이 같다면 result 추가\n for (let [key, { count }] of Object.entries(players)) {\n if (count === max) result.push(parseInt(key, 10));\n }\n\n return result;\n}", + "probId": "42840", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7ocFw-Mfowyrv60oOyoRL", + "author": "yongchanson", + "code": "function solution(answers) {\n let score = [];\n let answer = [];\n let a1 = [1, 2, 3, 4, 5];\n let a2 = [2, 1, 2, 3, 2, 4, 2, 5];\n let a3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];\n\n score.push(answers.filter((a, i) => a === a1[i % a1.length]).length);\n score.push(answers.filter((a, i) => a === a2[i % a2.length]).length);\n score.push(answers.filter((a, i) => a === a3[i % a3.length]).length);\n\n for (let i = 0; i < score.length; i++) {\n const max = Math.max(...score);\n if (score[i] === max) {\n answer.push(i + 1);\n }\n }\n\n return answer;\n}", + "probId": "42840", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "DsDsHG8XG_QE_c8oxKz0q", + "author": "jaewon1676", + "code": "function solution(answers) {\n let arr1 = [1,2,3,4,5]\n let arr2 = [2,1,2,3,2,4,2,5]\n let arr3 = [3,3,1,1,2,2,4,4,5,5]\n \n let score = [0, 0, 0]\n for (let i=0; i {\n for (let j = 0; j < pattern.length; j++) {\n const patternLength = pattern[j].length;\n if (answer === pattern[j][i % patternLength]) scores[j]++;\n }\n });\n\n const answer = [];\n const maxScore = Math.max(...scores);\n scores.forEach((score, i) => {\n if (score === maxScore) answer.push(i + 1);\n });\n return answer;\n}", + "probId": "42840", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "6Xvm3DRqhWlMmXu7pxkMi", + "author": "codeisneverodd", + "code": "function solution(s) {\n const countP = [...s.matchAll(/p/gi)].length;\n const countY = [...s.matchAll(/y/gi)].length;\n return countP === countY;\n}", + "probId": "12916", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gbuN_FBdxM9d3v0pl7f72", + "author": "yongchanson", + "code": "function solution(s) {\n p = s.toLowerCase().split(\"p\").length;\n y = s.toLowerCase().split(\"y\").length;\n\n return p == y ? true : false;\n}", + "probId": "12916", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Wj5GvftUtCNvjbDPeRwyW", + "author": "chaerin-dev", + "code": "function solution(s) {\n let pCount = s.split(/p/i).length - 1;\n let yCount = s.split(/y/i).length - 1;\n return pCount === yCount;\n}\n// 문자열에서 특정 문자의 개수를 구하려면 split을 사용하면 된다.\n// Ex. \"ababb\".split(\"a\") 의 결과는 [\"\", \"b\", \"bb\"]\n// => 즉, \"a\"의 갯수는 3에서 1을 뺀 2", + "probId": "12916", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "2lh7YnCfgFLvYbiPaXMPY", + "author": "prove-ability", + "code": "function solution(s){\n // 배열로 변환 \n s = s.split(\"\");\n // filter 를 사용해 갯수 추출\n const pCount = s.filter((v) => v === \"p\" || v === \"P\").length;\n const yCount = s.filter((v) => v === \"y\" || v === \"Y\").length;\n return pCount === yCount;\n}", + "probId": "12916", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "SuH9zb3QseKwsBlIUvbeb", + "author": "codeisneverodd", + "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n if (a[n] < b[n]) return -1;\n if (a[n] > b[n]) return 1;\n if (a[n] === b[n]) return a < b ? -1 : 1;\n return 0;\n });\n}", + "probId": "12915", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "p0UrQpOrzjxTbpCrToefp", + "author": "chaerin-dev", + "code": "function solution(strings, n) {\n return strings.sort((a, b) => {\n // 인덱스 n번째 글자를 기준으로 오름차순 정렬\n if (a[n] > b[n]) return 1;\n else if (a[n] < b[n]) return -1;\n // 인덱스 n번째 글자가 같으면 사전순 정렬\n else return a > b ? 1 : -1;\n });\n}", + "probId": "12915", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "CZtoJ5hGw6yD6qmcOAxAh", + "author": "prove-ability", + "code": "function solution(strings, n) {\n // 정렬\n strings.sort((a, b) => {\n // n번째 클자가 같다면 사전순\n if(a[n].charCodeAt() === b[n].charCodeAt()) {\n return a > b ? 1 : -1;\n } else return a[n].charCodeAt() - b[n].charCodeAt();\n });\n \n return strings;\n}", + "probId": "12915", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "6PBSwqM-7Lxp2uzW3y5Rm", + "author": "codeisneverodd", + "code": "function solution(s) {\n return s\n .split(\"\")\n .sort((a, b) => {\n if (a < b) return 1;\n if (a > b) return -1;\n return 0;\n })\n .join(\"\");\n}", + "probId": "12917", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "POlRT_d81WKoMvkOpZLwE", + "author": "chaerin-dev", + "code": "function solution(s) {\n return s.split(\"\").sort((a, b) => (a < b ? 1 : -1)).join(\"\");\n}", + "probId": "12917", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Iht2iJ1-uF8rNDkfvgqA5", + "author": "prove-ability", + "code": "function solution(s) {\n return s.split(\"\").sort().reverse().join(\"\")\n}", + "probId": "12917", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "cVAON9iE8SNoeIa0AicHr", + "author": "jaewon1676", + "code": "function solution(s) {\n return s.split('').sort().reverse().join('')\n}\n// split('')은 문자열을 하나씩 쪼개주면서 타입을 배열로 변환시켜줍니다.\n// 그러면 문자열 타입이 배열이 되므로 정렬을 할 수 있습니다.\n// sort()는 오름차순이기때문에 다시 뒤집어서 합쳐줍니다.", + "probId": "12917", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wOdMGpOtd-sWso4N0zJgS", + "author": "codeisneverodd", + "code": "function solution(s) {\n return s.search(/\\D/g) < 0 && (s.length === 4 || s.length === 6);\n}", + "probId": "12918", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "BC2iVdtTid2DmUfOWJ_Wx", + "author": "yongchanson", + "code": "function solution(s) {\n let parseInts = parseInt(s);\n if (s.length == 6 || s.length == 4) {\n if (s == parseInts) {\n return true;\n }\n }\n\n return false;\n}", + "probId": "12918", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "BLMS81Kd_3ESK6sJRDBv6", + "author": "prove-ability", + "code": "function solution(s) {\n var answer = true;\n // 문자열 s의 길이가 4 혹은 6이고\n if (s.length === 4 || s.length === 6) {\n for (let i = 0, len = s.length; i < len; i++) {\n // 숫자로만 구성돼있는지 확인\n if (!Number.isInteger(parseInt(s[i], 10))) return false;\n }\n // 문자열 s의 길이가 4 혹은 6 가 아니라면 false\n } else return false;\n\n return answer;\n}", + "probId": "12918", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "KdFwqPsbkbeC2sry1YlLP", + "author": "chaerin-dev", + "code": "function solution(s) {\n // 길이가 4 혹은 6이 아니면 false 반환\n if (s.length !== 4 && s.length !== 6) return false;\n // 각 자리중에 숫자가 아닌 것이 하나라도 있으면 false 반환\n for (let i = 0; i < s.length; i++) {\n if (isNaN(Number(s[i]))) return false;\n }\n // 위의 모든 조건에 포함되지 않으면\n // (길이가 4 혹은 6이고, 숫자로만 구성되어 있으면) true 반환\n return true;\n}", + "probId": "12918", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8bAMLCGHJsEdyy4w-3wqv", + "author": "soulhn", + "code": "function solution(s) {\n if (s.length !== 4 && s.length !== 6) return false;\n return !s.split(\"\").some((i) => isNaN(parseInt(i, 10))); \n //early return 제외사항 먼저 처리\n //.split 문자열 배열로 변환, .some을 이용하여 isNaN인지 판별, ! 사용하여 문제 조건에 맞게 반환\n}", + "probId": "12918", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-D40QnsIG0MSdP2ddCzTM", + "author": "codeisneverodd", + "code": "function solution(s) {\n return parseInt(s);\n}", + "probId": "12925", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "M_pnjlqwOE1iXMlP8Sana", + "author": "chaerin-dev", + "code": "function solution(s) {\n return Number(s);\n}", + "probId": "12925", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "dcT3fiZrYG9B2fTtKBoYS", + "author": "prove-ability", + "code": "function solution(s) {\n return parseInt(s, 10);\n}", + "probId": "12925", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "CUOqDr4YB132Z2jleOMM3", + "author": "jaewon1676", + "code": "function solution(s) {\n return parseInt(s);\n}", + "probId": "12925", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "YkiXJ0xsbRd1Coc5zUSFB", + "author": "codeisneverodd", + "code": "function solution(price, money, count) {\n let totalCost = 0;\n for (let i = 1; i <= count; i++) totalCost += price * i;\n return totalCost <= money ? 0 : totalCost - money;\n}", + "probId": "82612", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "uezZoEz0m8hdOIR3BleHq", + "author": "yongchanson", + "code": "function solution(price, money, count) {\n var answer = 0;\n let sum = price;\n\n for (i = 2; i <= count; i++) {\n sum += price * i;\n }\n\n if (sum <= money) {\n answer = 0;\n } else {\n answer = sum - money;\n }\n return answer;\n}", + "probId": "82612", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "jPwA0bbofjNFRXr-RZahv", + "author": "jaewon1676", + "code": "function solution(price, money, count) {\n let sum_price = 0; // 놀이기구의 이용료의 합\n for (let i = 1; i <= count; i++) {\n sum_price += i * price; // 이용료의 N배 만큼 곱해서 더해준다.\n }\n if (sum_price <= money) {\n return 0;\n }\n return sum_price - money;\n}", + "probId": "82612", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wgyHIm0C7_YgaxjJ_BNSm", + "author": "prove-ability", + "code": "function solution(price, money, count) {\n let sum = 0;\n for(let i = 1; i <= count; i++) {\n sum += (i * price)\n }\n \n return sum < money ? 0 : sum - money;\n}", + "probId": "82612", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "15io-kgHZyB9UaD1R45X3", + "author": "chaerin-dev", + "code": "function solution(price, money, count) {\n let totalPrice = 0;\n for(let i=1; i<=count; i++){\n totalPrice += i * price;\n }\n return money > totalPrice ? 0 : totalPrice-money;\n}", + "probId": "82612", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "MAqIJ3oD3esA37-hZPA7q", + "author": "codeisneverodd", + "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}", + "probId": "12919", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "1P_8CD3TNq6Oyz3OfshfI", + "author": "chaerin-dev", + "code": "function solution(seoul) {\n return `김서방은 ${seoul.indexOf(\"Kim\")}에 있다`;\n}", + "probId": "12919", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "iPAbSgoCkYxzQbOgEYUbE", + "author": "prove-ability", + "code": "function solution(seoul) {\n return `김서방은 ${seoul.findIndex(v => v === \"Kim\")}에 있다`;\n}", + "probId": "12919", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9gGGQN_CRMDg_SQ5OviA1", + "author": "jaewon1676", + "code": "function solution(seoul) {\n var answer = '';\n for (let i=0; i<1000; i++){\n if (seoul[i] === 'Kim') return '김서방은 ' + i + '에 있다';\n }\n return 1;\n}", + "probId": "12919", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8NK6j6prhKmavr0TqA-Hz", + "author": "ssi02014", + "code": "function solution(survey, choices) {\n const points = [3, 2, 1, 0, 1, 2, 3];\n const pointBoard = {\n R: 0,\n T: 0,\n C: 0,\n F: 0,\n J: 0,\n M: 0,\n A: 0,\n N: 0,\n };\n let result = \"\";\n\n // 카테고리 별 점수 추가\n for (let i = 0; i < survey.length; i++) {\n const categories = survey[i];\n\n if (choices[i] < 4) {\n pointBoard[categories[0]] += points[choices[i] - 1];\n } else if (choices[i] > 4) {\n pointBoard[categories[1]] += points[choices[i] - 1];\n }\n }\n\n const pointBoardEntries = Object.entries(pointBoard);\n\n // 지표에 맞게 결과 값 도출\n for (let i = 0; i < pointBoardEntries.length; i += 2) {\n const [curCategory, curValue] = pointBoardEntries[i];\n const [nextCategory, nextValue] = pointBoardEntries[i + 1];\n\n if (curValue < nextValue) {\n result += nextCategory;\n } else {\n result += curCategory;\n }\n }\n\n return result;\n}", + "probId": "118666", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gdUf_Jv4tbVVoSAxLASPS", + "author": "codeisneverodd", + "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = types.reduce((a, key) => ({ ...a, [key]: 0 }), {});\n survey.forEach((key, i) => {\n const point = points[choices[i] - 1];\n Object.keys(pointBoard).includes(key) ? (pointBoard[key] += point) : (pointBoard[key[1] + key[0]] -= point);\n });\n return types.map(type => (pointBoard[type] <= 0 ? type[0] : type[1])).join('');\n}", + "probId": "118666", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "SNdoQ8Qv9dEeLfLK-anbF", + "author": "codisneverodd", + "code": "function solution(survey, choices) {\n const points = [-3, -2, -1, 0, 1, 2, 3];\n const types = ['RT', 'CF', 'JM', 'AN'];\n const pointBoard = survey.reduce((a, key, i) => {\n if (types.includes(key)) {\n a[key] = (a[key] || 0) + points[choices[i] - 1];\n return a;\n }\n const rKey = key[1] + key[0];\n a[rKey] = (a[rKey] || 0) - points[choices[i] - 1];\n return a;\n }, {});\n return types.map(type => (pointBoard[type] <= 0 || !pointBoard[type] ? type[0] : type[1])).join('');\n}", + "probId": "118666", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "XyOCnoh_VlUDGSpg85iyg", + "author": "codeisneverodd", + "code": "function solution(nums) {\n let answer = 0;\n const length = nums.length;\n for (let i = 0; i < length; i++) {\n for (let j = i + 1; j < length; j++) {\n for (let k = j + 1; k < length; k++) {\n const sum = nums[i] + nums[j] + nums[k];\n if (isPrime(sum)) answer += 1;\n }\n }\n }\n\n return answer;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}", + "probId": "12977", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "0Y_IqC7PEiVWAJcr2duZH", + "author": "jaewon1676", + "code": "// https://programmers.co.kr/learn/courses/30/lessons/12977?language=javascript\n\nfunction solution(nums) {\n let len = nums.length, answer = 0;\n\n for (let i = 0; i < len - 2; i++) {\n for (let j = i + 1; j < len - 1; j++) {\n for (let k = j + 1; k < len; k++) {\n if (isPrime(nums[i] + nums[j] + nums[k])) {\n answer++;\n }\n }\n }\n }\n return answer;\n}\n\nconst isPrime = (n) => {\n for (let i = 2; i <= Math.sqrt(n); i++) { //n의 제곱근까지 순회\n if (n % i === 0) { // 나머지가 0이 나오면 소수가 아니다.\n return false;\n }\n }\n return true;\n}\n// 세개의 수를 더해야 하기때문에 수 for문 하나당 수 하나를 넣어서 순회하였다.", + "probId": "12977", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "AZXA7k-ElkZZLut4wG3KN", + "author": "chaerin-dev", + "code": "// arr배열에서 selectNumber개의 요소를 뽑는 모든 경우를 배열로 반환하는 함수\nconst getCombinations = function (arr, selectNumber) {\n const results = [];\n if (selectNumber === 1) return arr.map((el) => [el]);\n arr.forEach((fixed, index, origin) => {\n const rest = origin.slice(index + 1);\n const combinations = getCombinations(rest, selectNumber - 1);\n const attached = combinations.map((el) => [fixed, ...el]);\n results.push(...attached);\n });\n return results;\n};\n\n// num이 소수인지 여부를 반환하는 함수\nfunction isPrime(num) {\n if (num === 1) return false;\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(nums) {\n const combinationResult = getCombinations(nums, 3);\n let answer = 0;\n combinationResult.forEach((e) => {\n const sum = e[0] + e[1] + e[2];\n if (isPrime(sum)) answer++;\n });\n return answer;\n}", + "probId": "12977", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "WdPutYJKYWwobpw3iHgTs", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n let answer = 0;\n const numArr = numbers.split(\"\");\n const permutationAll = [];\n for (let r = 1; r <= numbers.length; r++) {\n const permutationR = Permutation(numArr, r).map((arr) =>\n parseInt(arr.join(\"\"))\n );\n for (let i = 0; i < permutationR.length; i++)\n permutationAll.push(permutationR[i]);\n }\n const permutationSet = [...new Set(permutationAll)];\n for (const number of permutationSet) {\n if (isPrime(number)) answer += 1;\n }\n return answer;\n}\n\nfunction Permutation(arr, r) {\n const result = [];\n if (r === 1) return arr.map((num) => [num]);\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)];\n const permutation = Permutation(rest, r - 1);\n const attached = permutation.map((numbers) => [fixed, ...numbers]);\n result.push(...attached);\n });\n return result;\n}\n\nfunction isPrime(num) {\n for (let i = 2; i <= Math.sqrt(num); i++) {\n if (num % i === 0) return false;\n }\n return num >= 2;\n}", + "probId": "42839", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "OLNhvIEzDa8VDxOEZYrAe", + "author": "chaerin-dev", + "code": "// 소수인지 판별하는 함수\nfunction isPrime(x) {\n for (let i = 2; i <= Math.sqrt(x); i++) {\n if (x % i === 0) return false;\n }\n return true;\n}\nfunction solution(n) {\n // 소수의 개수를 저장할 변수\n let answer = 0;\n // 1은 소수가 아니므로 2부터 n까지 모든 수에 대해\n for (let i = 2; i <= n; i++) {\n // 소수이면 소수의 개수에 1 추가\n if (isPrime(i)) answer++;\n }\n return answer;\n}", + "probId": "42839", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "GjmTbgvxQwThs5ZSSlu57", + "author": "prove-ability", + "code": "// 소수 판별 로직\nfunction isPrime(n) {\n // n 제곱근 후 올림\n for (let i = 2, len = Math.ceil(Math.sqrt(n)); i <= len; i++) {\n if (n % i === 0) return false;\n }\n return true;\n}\n\nfunction solution(n) {\n let count = 0;\n // 1부터 n까지 반복적으로 접근 - i\n for(let i = 1; i <= n; i++) {\n // i 가 소수인지 확인 후 count++\n if(isPrime(i)) count++;\n }\n \n return count;\n}", + "probId": "42839", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Q1xifF9kpxsX8VQ9MO2tf", + "author": "jaewon1676", + "code": "function solution(n) {\n let arr = [];\n \n // 0과 1을 제외한 2부터 n까지 배열에 담아줍니다.\n for(let i=2; i<=n; i++) {\n arr[i] = i;\n }\n for(let i=2; i<=n; i++) { // 인덱스 2부터 반복문 돌면서 0이면 다시 다음 반복문을 돕니다.\n if (arr[i] === 0) continue;\n \n for(let j=i*2; j<=n; j+=i) { // 각 인덱스(i)의 배수들을 0으로 지정해줍니다.\n arr[j] = 0;\n }\n }\n \n // filter를 이용해 0이아닌 수들의 개수를 return합니다.\n return arr.filter(v => v!==0).length;\n}", + "probId": "42839", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "QOF52m3MtLWnpsPMNKXFq", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = '';\n for (let i = 0; i < n; i++) {\n answer += i % 2 === 0 ? '수' : '박';\n }\n return answer;\n}", + "probId": "12922", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "xOlxwtmGiP8gpAtX9Pmib", + "author": "chaerin-dev", + "code": "function solution(n) {\n // \"수박\"을 n번 반복한 문자열의 0번 인덱스부터 n만큼 추출해서 반환\n return '수박'.repeat(n).substr(0, n);\n}", + "probId": "12922", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9vmmj9sEOyC5yP6s7Zlmy", + "author": "jaewon1676", + "code": "function solution(n) {\n let str = '';\n for (let i = 0; i < n; i++) {\n // 삼항 연산자와 +로 문자열을 붙여주어 추가.\n i % 2 == 0 ? (str = str + '수') : (str = str + '박');\n }\n return str;\n}", + "probId": "12922", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "A09IQBDRCEQUKyJ8CzA5B", + "author": "prove-ability", + "code": "function solution(n) {\n let answer = '';\n answer = '수박'.repeat(n / 2);\n if (n % 2 !== 0) answer += '수';\n return answer;\n}", + "probId": "12922", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LoyVegy_UkD2gDWIgfKpp", + "author": "yongchanson", + "code": "function solution(n) {\n return '수박'.repeat(n / 2) + '수'.repeat(n % 2);\n}", + "probId": "12922", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "BoOyjfNuDV4C8MS9ly_nQ", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = 0;\n let answerString = s;\n const stringToNum = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n for (let i = 0; i < 10; i++) {\n const regex = new RegExp(stringToNum[i], \"g\");\n answerString = answerString.replace(regex, i);\n }\n answer = Number(answerString);\n return answer;\n}", + "probId": "81301", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Vy5CLKCPikelKFvcoMVIR", + "author": "jaewon1676", + "code": "function solution(s) {\n let answer = 0;\n\n s = s.replace(/zero/g, 0);\n s = s.replace(/one/g, 1);\n s = s.replace(/two/g, 2);\n s = s.replace(/three/g, 3);\n s = s.replace(/four/g, 4);\n s = s.replace(/five/g, 5);\n s = s.replace(/six/g, 6);\n s = s.replace(/seven/g, 7);\n s = s.replace(/eight/g, 8);\n s = s.replace(/nine/g, 9);\n\n answer = Number(s);\n return answer;\n}", + "probId": "81301", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "5LyTD1YgWMMQWNwVetWEz", + "author": "chaerin-dev", + "code": "function solution(s) {\n s = s\n .replace(/zero/g, 0)\n .replace(/one/g, 1)\n .replace(/two/g, 2)\n .replace(/three/g, 3)\n .replace(/four/g, 4)\n .replace(/five/g, 5)\n .replace(/six/g, 6)\n .replace(/seven/g, 7)\n .replace(/eight/g, 8)\n .replace(/nine/g, 9);\n return parseInt(s);\n}", + "probId": "81301", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ESsEfG25v4htTMfsWv6GX", + "author": "yongchanson", + "code": "function solution(s) {\n let en = [\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n ];\n\n for (let i = 0; i < s.length * 2; i++) {\n let p = i % en.length;\n s = s.replace(en[p], p);\n }\n return Number(s);\n}", + "probId": "81301", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Qz0Q4RxbD0ag_v-SZSnam", + "author": "ssi02014", + "code": "/**\n * X, Y의 길이가 굉장히 길어서 공통 숫자를 뽑아낼 때 객체를 이용해 연산 횟수 최적화\n * X, Y를 배열로 변환 후에 배열 메서드를 사용해도 되지만, for of문보다 효율성 떨어짐 \n * (테스트 케이스 11 ~ 15 100ms~200ms 차이)\n */\nfunction solution(X, Y) {\n const commons = [];\n const obj = {};\n\n for (const el of X) {\n obj[el] = (obj[el] || 0) + 1;\n }\n\n for (const el of Y) {\n if (obj[el]) {\n commons.push(el);\n obj[el]--;\n }\n }\n\n commons.sort((a, b) => b - a);\n\n if (!commons.length) return \"-1\";\n else if (commons[0] === \"0\") return \"0\";\n return commons.join(\"\");\n}", + "probId": "131128", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "BDzXjTTuWa38KvnMviYyT", + "author": "codeisneverodd", + "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((element) => {\n if (element === \" \") return \" \";\n const code = element.charCodeAt(0);\n if ((code + n > 90 && code <= 90) || code + n > 122) {\n return String.fromCharCode(code + n - 26);\n } else {\n return String.fromCharCode(code + n);\n }\n })\n .join(\"\");\n}", + "probId": "12926", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-oLnMXLaSmkk5goDvoMio", + "author": "jaewon1676", + "code": "function solution(s, n) {\n return s\n .split(\"\")\n .map((el) => {\n if (el == \" \") return el;\n let tmp = el.charCodeAt();\n return el.toLowerCase().charCodeAt() + n > 122\n ? String.fromCharCode(tmp + n - 26)\n : String.fromCharCode(tmp + n);\n })\n .join(\"\");\n}\n\n/* 문자열 -> 아스키코드 : s.charCodeAt()\n아스키코드 -> 문자열 : String.fromCharCode() \n풀이과정 \n1. 배열을 문자열로 쪼개서 map 메서드로 하나씩 순회한다., 문자열이 비어있으면 리턴한다.\n2. 알파벳을 통일 하기 위해 소문자 아스키코드로 변환한다. \n 대문자 아스키코드는 65가 A, 90이 Z이다.\n 소문자 아스키코드는 97이 a, 122가 z이다.\n3. 변환한 아스키코드 + n이 122이상이면 알파벳 단어 길이 25 + 알파벳 앞으로 이동 1만큼 뺴준고\n 그렇지 않으면 그대로 더한 후 해당 아스키코드의 알파벳으로 변환해준다.\n*/", + "probId": "12926", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "aAt0_J8gPPDdzILK3hinK", + "author": "chaerin-dev", + "code": "function solution(s, n) {\n let result = \"\";\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") result += \" \";\n else {\n let charCode = s.charCodeAt(i);\n // 원래 대문자였는데\n if (charCode <= 90) {\n charCode += n;\n // 변경 후 아스키코드값이 90보다 크다면\n if (charCode > 90) charCode -= 26;\n }\n // 원래 소문자였는데\n else {\n charCode += n;\n // 변경 후 아스키코드값이 122보다 크다면\n if (charCode > 122) charCode -= 26;\n }\n result += String.fromCharCode(charCode);\n }\n }\n return result;\n}", + "probId": "12926", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "42ZMqrfDapgsuTtfl5Cwk", + "author": "prove-ability", + "code": "function solution(s, n) {\n var answer = '';\n for(let i = 0, len = s.length; i < len; i++) {\n if(s[i] === \" \") {\n answer += \" \";\n continue;\n }\n let index = s[i].charCodeAt();\n // 65 - 90\n // 97 - 122\n if(index <= 90 && index + n > 90) index -= 26; \n else if (index + n > 122) index -= 26;\n \n answer += String.fromCharCode(index + n)\n }\n return answer;\n}", + "probId": "12926", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "_yXWsJOpZC1ik98YSVuJn", + "author": "jaewon1676", + "code": "function solution(id_list, report, k) {\n let answer = new Array(id_list.length).fill(0);\n let report_list = {}; // 신고당한 ID\n\n // key, value 형식의 report_list 객체를 만든다.\n id_list.map(user => {\n report_list[user] = []; //key = userid , value = 빈 배열을 가지는 객체\n });\n // report_list { muzi: [], frodo: [], apeach: [], neo: [] }\n\n // 유저가 신고한 ID를 report_list 객체에 넣어주기 위해 순회한다.\n report.map(user => {\n const [user_id, report_id] = user.split(' ');\n // report 값에서 띄어쓰기로 구분된 문자열을 자르고 user_id, report_id로 각각 넣어준다.\n if (!report_list[report_id].includes(user_id)) {\n report_list[report_id].push(user_id);\n // 배열에 포함하는지 여부를 확인하여 포함하지 않을때 신고자의 이름을 추가하였다.\n }\n });\n for (const key in report_list) {\n // report_list의 index 순회\n if (report_list[key].length >= k) {\n report_list[key].map(user => {\n answer[id_list.indexOf(user)] += 1;\n });\n }\n }\n return answer;\n}", + "probId": "92334", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "lhGPDTCRYBPDF1CqjNwlA", + "author": "prove-ability", + "code": "function solution(id_list, report, k) {\n // 사원 리스트 0으로 초기화 - 받은 메일 숫자 세기\n var answer = Array.from({ length: id_list.length }).fill(0);\n // 신고 내용 객체 초기화 - 신고된 내용 정리\n const reportObj = {};\n // 신고건 반복문으로 하나씩 접근\n for (let i = 0, len = report.length; i < len; i++) {\n const [userId, reportUserId] = report[i].split(' ');\n // 신고 내용 객체에 신고당한 사람이 있고 이전에 신고하지 않았다면 추가\n if (reportObj[reportUserId]) {\n if (!reportObj[reportUserId].includes(userId)) {\n reportObj[reportUserId] = [...reportObj[reportUserId], userId];\n }\n // 신고 내용 객체에 신고당한 사람이 없다면 추가\n } else reportObj[reportUserId] = [userId];\n }\n // 만들어진 신고 내용 객체로 반복적으로 접근\n for (const item of Object.values(reportObj)\n .filter(v => v.length >= k)\n .flatMap(v => v)) {\n // 인덱스로 접근해 메일 카운트 증가\n const index = id_list.findIndex(v => v === item);\n answer[index]++;\n }\n\n return answer;\n}", + "probId": "92334", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "XsnehvD59CuxJGJpkkWCv", + "author": "chaerin-dev", + "code": "function solution(id_list, report, k) {\n // 한 유저가 같은 유저를 여러 번 신고한 경우는 신고 횟수 1회로 처리\n let set = new Set(report);\n report = Array.from(set);\n\n // 1. report를 2차원배열로 변형\n // 2. 각 유저가 신고당한 횟수 cnt에 저장\n // 3. 각 유저를 신고한 유저 who에 저장\n let cnt = Array.from({ length: id_list.length }, i => 0);\n let who = Array.from({ length: id_list.length }, i => []);\n for (let i = 0; i < report.length; i++) {\n report[i] = report[i].split(' ');\n cnt[id_list.indexOf(report[i][1])]++;\n who[id_list.indexOf(report[i][1])].push(report[i][0]);\n }\n\n // k회 이상 신고당한 유저 확인 및 각 유저가 받은 메일 개수 mail에 저장\n let mail = Array.from({ length: id_list.length }, i => 0);\n for (let i = 0; i < cnt.length; i++) {\n if (cnt[i] < k) continue;\n for (let j = 0; j < who[i].length; j++) {\n mail[id_list.indexOf(who[i][j])]++;\n }\n }\n return mail;\n}", + "probId": "92334", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "knELcZfUST9z1eYKpIttU", + "author": "codeisneverodd", + "code": "function solution(id_list, report, k) {\n //report를 set을 이용하여 중복제거, 각 id 당 신고당한 횟수 reportedCount에 저장,\n //각 id를 신고한 사람 array를 reportedBy에 저장,\n //k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장\n //answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장.\n const reportSet = new Set(report);\n const reportedCount = {}; //{\"id\": Number(count)}\n const reportedBy = {}; //{\"id\":[]}\n const mailCount = {}; //{\"id\":Number(count)}\n\n id_list.forEach(element => {\n reportedCount[element] = 0;\n mailCount[element] = 0;\n reportedBy[element] = [];\n });\n\n reportSet.forEach(element => {\n const [id, reported] = element.split(' ');\n reportedCount[reported] += 1;\n reportedBy[reported].push(id);\n });\n\n for (const reportedId in reportedCount) {\n if (reportedCount[reportedId] >= k) {\n reportedBy[reportedId].forEach(reporter => {\n mailCount[reporter] += 1;\n });\n }\n }\n return id_list.map(id => mailCount[id]);\n}", + "probId": "92334", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "_SiX4wl7bHj68YYVp_Phb", + "author": "jaewon1676", + "code": "function solution(new_id) {\n // 1 소문자로 치환\n let answer = new_id\n .toLowerCase()\n\n // 2 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 문자 제거.\n .replace(/[^a-z0-9-_.]/gi, '')\n\n // 3 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환\n .replace(/[.]{2,}/gi, '.')\n\n // 4 마침표(.)가 처음이나 끝에 위치하면 제거\n .replace(/^[.]|[.]$/gi, '');\n\n // 5 빈 문자열이면 a 대입\n if (answer === '') answer = 'a';\n\n // 6 length > 15이면 그 뒤의 문자들은 제거\n if (answer.length > 15) {\n answer = answer.substring(0, 15);\n // 마침표(.)가 끝에 위치하면 마침표(.)제거\n answer = answer.replace(/[.]$/gi, '');\n }\n\n // 7 length < 3이면 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임\n while (answer.length < 3) {\n answer += answer[answer.length - 1];\n }\n return answer;\n}", + "probId": "72410", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "AMOMEz2Bz_Pt5jgvmesYA", + "author": "chaerin-dev", + "code": "function solution(new_id) {\n // 1단계: 모든 대문자를 소문자로\n new_id = new_id.toLowerCase();\n\n // 2단계: 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자 제거\n new_id = new_id.replace(/[^\\w\\-\\.]/g, '');\n\n // 3단계: 연속되는 마침표는 마침표 하나로\n new_id = new_id.replace(/\\.{2,}/g, '.');\n\n // 4단계: 처음이나 끝에 마침표가 있으면 제거\n new_id = new_id.replace(/^\\.|\\.$/, '');\n\n // 5단계: new_id가 빈 문자열이면 \"a\" 대입\n if (new_id.length === 0) new_id = 'a';\n\n // 6단계: new_id의 길이가 16자 이상이면,\n // new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거\n // 제거 후 끝에 마침표가 있으면 제거\n if (new_id.length >= 16) new_id = new_id.slice(0, 15);\n new_id = new_id.replace(/\\.$/, '');\n\n // 7단계: new_id의 길이가 2자 이하이면,\n // new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 이어붙임\n let len = new_id.length;\n if (len <= 2) new_id = new_id + new_id[len - 1].repeat(3 - len);\n\n return new_id;\n}", + "probId": "72410", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "jegWLXnzaexxLDEtxqlR-", + "author": "codeisneverodd", + "code": "function solution(new_id) {\n let answer = new_id\n .toLowerCase() //step 1\n .replace(/[^0-9a-z._-]/g, '') // step 2\n .replace(/\\.+/g, '.') //step 3\n .replace(/^\\.|\\.$/g, '') //step 4\n .replace(/^$/, 'a') //step 5\n .slice(0, 15)\n .replace(/\\.$/, ''); //step 6\n // step7\n if (answer.length === 1) answer = answer[0].repeat(3);\n if (answer.length === 2) answer = answer + answer[1];\n\n return answer;\n}", + "probId": "72410", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "VboAgE1t6rbLqLDBcavKA", + "author": "codeisneverodd", + "code": "function solution(N, stages) {\n var answer = [];\n let failRate = new Array(N + 2).fill(0);\n let playerChallenging = new Array(N + 2).fill(0);\n let playerReached = new Array(N + 2).fill(0);\n\n for (const stage of stages) {\n for (let i = 1; i <= stage; i++) playerReached[i] += 1;\n playerChallenging[stage] += 1;\n }\n for (let i = 1; i <= N + 1; i++)\n failRate[i] =\n playerReached[i] === 0 ? 0 : playerChallenging[i] / playerReached[i];\n const rateNIndex = failRate\n .slice(1, N + 1)\n .map((rate, stage) => [rate, stage + 1]);\n const sortedRate = rateNIndex.sort((a, b) => b[0] - a[0]);\n answer = sortedRate.map((stage) => stage[1]);\n return answer;\n}", + "probId": "42889", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "3u-cQ1Lt_RmNzog8GKI8O", + "author": "jaewon1676", + "code": "function solution(N, stages) {\n let map = Array.from(Array(N), () => Array(2).fill(0));\n let answer = Array(N).fill(0, 0, N); // 스테이지별 탈락자 수\n let rate = Array(N).fill(0, 0, N); // 스테이지별 실패율\n let count = 0;\n\n stages.sort(function (a, b) {\n return a - b;\n }); // 난이도 오름차순 정렬\n for (let i = 1; i <= N; i++) {\n while (1) {\n // i 스테이지의 실패율 계산\n if (stages[0] == i) {\n answer[i - 1] += 1;\n count += 1;\n stages.shift();\n } else break;\n }\n rate[i - 1] += answer[i - 1] / (stages.length + count); // 실패율 계산\n\n count = 0;\n\n map[i - 1][0] = i;\n map[i - 1][1] = rate[i - 1];\n }\n map.sort((a, b) => b[1] - a[1]); // value값(실패율) 기준 내림차순정렬\n let stack = []; // 답\n for (let i = 0; i < map.length; i++) {\n stack.push(map[i][0]);\n }\n\n return stack;\n}\n\n/* 풀이 과정\n1. 스테이지를 정렬 후 난이도 N과 같은 스테이지가 맨 앞에 있는지 찾아 찾으면 shift, 찾지 못하면 다음 난이도로 넘어간다.\n2. 실패율을 계산해주기 위해, 스테이지별 탈락자 수,스테이지별 실패율 배열을 생성하여 각각, 계산해준다.\n3. 계산 해준 값들을 2차원 배열 map 객체에 넣어준다. 2차원으로 한 이유는 index값과, 실패율 값을 같이 넣어 정렬 시에도 index값을 유지 하기 위해서.\n4. 실패율을 내림차순(같으면 스테이지가 낮은거부터 오름차순)으로 정렬하여 출력해준다.\n*/", + "probId": "42889", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Av6X7HBEZTken-98C8aB2", + "author": "codeisneverodd", + "code": "function solution(left, right) {\n var answer = 0;\n for (let num = left; num <= right; num++) {\n divisorCounter(num) % 2 === 0 ? (answer += num) : (answer -= num);\n }\n return answer;\n}\n\nconst divisorCounter = (num) => {\n let count = 0;\n const sqrt = Math.sqrt(num);\n for (let i = 1; i <= sqrt; i++) if (num % i === 0) count += 1;\n return Number.isInteger(sqrt) ? (count - 1) * 2 + 1 : count * 2;\n};", + "probId": "77884", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "GI7q65ilfJZ8ur-KW253Z", + "author": "jaewon1676", + "code": "function solution(left, right) {\n var answer = 0;\n\n for (left; left <= right; left++) {\n // left의 제곱근이 정수면 약수의 개수는 홀수\n if (Number.isInteger(Math.sqrt(left))) {\n answer -= left;\n } else {\n answer += left;\n }\n }\n return answer;\n}", + "probId": "77884", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "WuWuhvRMVKJvMcnEbwQ8_", + "author": "prove-bility", + "code": "function getDivisorCount(i) {\n let count = 0;\n for(let j = 1; j <= i; j++) {\n if(i % j === 0) count++;\n }\n return count;\n}\n\nfunction solution(left, right) {\n let answer = 0;\n for(let i = left; i <= right; i++) {\n let count = getDivisorCount(i);\n if(count % 2 === 0) answer += i;\n else answer -= i;\n }\n return answer;\n}", + "probId": "77884", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "yObJuA3KwklreVRYLDiiu", + "author": "codeisneverodd", + "code": "function solution(n) {\n let answer = 0;\n for (let divisor = 1; divisor <= n; divisor++) {\n if (n % divisor === 0) answer += divisor;\n }\n return answer;\n}", + "probId": "12928", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9z7gNX26mVynww375frEd", + "author": "yongchanson", + "code": "function solution(n) {\n var answer = 0;\n let i;\n for (i = 1; i <= Math.sqrt(n); i++) {\n if (n % i == 0) {\n if (i * i == n) {\n //i의 제곱이 n인경우 처리\n answer += i;\n } else {\n answer += i;\n answer += n / i;\n }\n }\n }\n\n return answer;\n}", + "probId": "12928", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Kb-Ud8hRFj3VntSJaRD_k", + "author": "chaerin-dev", + "code": "function solution(n) {\n let result = 0;\n let sqrtN = Math.sqrt(n);\n // 효율성을 위해 1부터 n의 제곱근-1까지만 순회\n for (let i = 1; i < sqrtN; i++) {\n if (n % i === 0) result += i + n / i;\n }\n // n의 제곱근이 정수인 경우 n의 제곱근도 더해줌\n if (Number.isInteger(sqrtN)) result += sqrtN;\n return result;\n}", + "probId": "12928", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "2hHCkl2LHLmbNCTMwzQvw", + "author": "jaewon1676", + "code": "function solution(n) {\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n if (n % i == 0) {\n // n으로 i를 나눴을 때, 나머지가 0이면 약수이다.\n answer += i;\n }\n }\n return answer;\n}\n\n// 약수란 어떤 수를 나누었을 때 나머지 없이 나누어 떨어지게 하는 그 수입니다.\n// 10을 예로 들면, 10은 1, 2, 5, 10 이 나누었을 때 나머지가 없으므로 약수입니다.\n// 3, 4, 6, 7, 8, 9 는 나누었을 때 나머지가 남기때문에 약수가 아닙니다.", + "probId": "12928", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Wzs2YemubD5fFV8975Cl3", + "author": "prove-ability", + "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n if(n % i === 0) answer += i;\n }\n return answer;\n}", + "probId": "12928", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "qQLomQYYyEENnJPItTH7h", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n var answer = 0;\n for (let i = 0; i < 10; i++) {\n answer += numbers.includes(i) ? 0 : i;\n }\n return answer;\n}", + "probId": "86051", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "abMRRy_N5Od0L1J1Fk2cH", + "author": "yongchanson", + "code": "function solution(numbers) {\n var answer = -1;\n\n let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n let arr_sum = 0;\n let numbers_sum = 0;\n\n for (i = 0; i < arr.length / 2; i++) {\n if (arr[i] == arr[arr.length - 1 - i]) {\n arr_sum += arr[i];\n } else {\n arr_sum += arr[i] + arr[arr.length - 1 - i];\n }\n }\n\n for (i = 0; i < numbers.length; i++) {\n numbers_sum += numbers[i];\n }\n\n answer = arr_sum - numbers_sum;\n return answer;\n}", + "probId": "86051", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7PooMLPnF3FELewxRVqp9", + "author": "prove-ability", + "code": "function solution(numbers) {\n var answer = 0;\n\n for (let i = 0; i < 10; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n\n return answer;\n}", + "probId": "86051", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "yMhu_QGJsXeqlaCo1qG5K", + "author": "chaerin-dev", + "code": "function solution(numbers) {\n let answer = 0;\n for (let i = 0; i <= 9; i++) {\n if (!numbers.includes(i)) answer += i;\n }\n return answer;\n}", + "probId": "86051", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "lVSmCdDTM8cUCindwlS8g", + "author": "codeisneverodd", + "code": "function solution(d, budget) {\n let answer = 0;\n d.sort((a, b) => a - b);\n for (const department of d) {\n if (budget < department) break;\n answer += 1;\n budget -= department;\n }\n return answer;\n}", + "probId": "12982", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "qXusM8NX60lzwocrZm8pZ", + "author": "prove-ability", + "code": "function solution(d, budget) {\n let sum = 0;\n let count = 0;\n // 오름차순 정렬\n d.sort((a, b) => a - b);\n for(let i = 0, len = d.length; i < len; i++) {\n // 작은 수 부터 하나씩 더해준다\n sum += d[i];\n // 더한 수가 정해진 예산과 같다면 이전까지 센 카운트 반환\n if(sum > budget) return count;\n count++;\n }\n \n return count;\n}", + "probId": "12982", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wGoMl70jO-ZfwphOxu9il", + "author": "jaewon1676", + "code": "function solution(d, budget) {\n let count = 0; // 최대 물품 지원 할 수 있는 부서 수 \n d.sort((a, b) => a - b) // 오름차순 정렬\n for (let i=0; i (v === participant[i] ? a + 1 : a),\n 0\n );\n // 해당 값이 참가자 그룹 내 2명 이상이고 이전 최대 동명이인 참가자보다 많다면\n // 해당 로직을 반복하면 제일 많은 동명이인을 알 수 있다\n if (count > 1 && max < count) {\n answer = participant[i];\n // 조건에 맞는 동명이인 수 저장\n max = count;\n }\n }\n return answer;\n}\n\n//완벽한 정답이 아닙니다.", + "probId": "42576", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "iYWX53fSR9dGhM_f2iKhP", + "author": "chaerin-dev", + "code": "function solution(participant, completion) {\n var answer = \"\";\n // 두 배열을 정렬한다!\n participant.sort();\n completion.sort();\n // 앞에서부터 차례로 비교하다가 값이 다를 때 participant의 요소가 완주하지 못한 선수!!\n // if (participant[i] != completion[i] || i == participant.length - 1) 이런 식으로\n // 완주하지 못한 선수의 이름이 마지막에 있을 경우도 고려해야 하나..? 라고 생각했지만\n // 그 때는 completion[i]의 값이 undefined가 되므로 괜찮음!\n for (let i = 0; i < participant.length; i++) {\n if (participant[i] != completion[i]) {\n answer = participant[i];\n break;\n }\n }\n return answer;\n}", + "probId": "42576", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "mK5dnWttxK4bzZaDoen7x", + "author": "codeisneverodd", + "code": "function solution(absolutes, signs) {\n return absolutes.reduce(\n (acc, curr, i) => acc + curr * (signs[i] ? 1 : -1),\n 0\n );\n}", + "probId": "76501", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "oafF4T4y5vl4OcYBuzMlM", + "author": "codeisneverod", + "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (let i = 0; i < absolutes.length; i++) {\n answer += signs[i] ? absolutes[i] : -1 * absolutes[i];\n }\n return answer;\n}", + "probId": "76501", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "PHxsJEC41hkuqLR9jZfLB", + "author": "jaewon1676", + "code": "function solution(absolutes, signs) {\n var answer = 0;\n for (var i = 0; i < absolutes.length; i++) {\n if (signs[i] === false) {\n answer = answer - absolutes[i];\n } else {\n answer = answer + absolutes[i];\n }\n }\n\n return answer;\n}", + "probId": "76501", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "VavYZ0Yo3L_kfJjz4Imum", + "author": "prove-ability", + "code": "function solution(absolutes, signs) {\n let answer = 0;\n absolutes.forEach((absolute, i) => {\n if(!signs[i]) absolute *= -1;\n answer += absolute;\n })\n return answer;\n}", + "probId": "76501", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "xoDbdrm9SYhSQjb_f4FPY", + "author": "chaerin-dev", + "code": "function solution(absolutes, signs) {\n // 연산 결과를 저장할 변수\n let result = 0;\n // signs의 각 요소에 대해\n signs.forEach((e, i) => {\n // 요소가 true이면 result값에 같은 인덱스의 absolutes 요소를 더해줌\n if (e) result += absolutes[i];\n // 요소가 false이면 result값에 같은 인덱스의 absolutes 요소를 빼줌\n else result -= absolutes[i];\n });\n // result 반환\n return result;\n}", + "probId": "76501", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "klP9xJHjOoo88wPJGPL_U", + "author": "codeisneverodd", + "code": "function solution(s) {\n return s\n .split(\" \")\n .map((word) =>\n word\n .split(\"\")\n .map((char, index) =>\n index % 2 === 0\n ? word[index].toUpperCase()\n : word[index].toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}", + "probId": "12930", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ghWDHDJDoQyhuF6qDhi7i", + "author": "chaerin-dev", + "code": "// 원래 문자가 모두 소문자여야 할 이유는 없다는 사실, 공백이 하나 이상일 수 있다는 사실을 빠뜨려서 조금 오래 생각한 문제..!\nfunction solution(s) {\n let result = \"\";\n let flag = true;\n for (let i = 0; i < s.length; i++) {\n if (s[i] === \" \") {\n flag = false;\n result += s[i];\n } else if (flag) {\n result += s[i].toUpperCase();\n } else {\n result += s[i].toLowerCase();\n }\n flag = !flag;\n }\n return result;\n}", + "probId": "12930", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "l3wUBAT9KqGlEv-l3000E", + "author": "jaewon1676", + "code": "function solution(s) {\n return s\n .split(\" \")\n .map((el) =>\n el\n .split(\"\")\n .map((el, index) =>\n index % 2 == 0 ? el.toUpperCase() : el.toLowerCase()\n )\n .join(\"\")\n )\n .join(\" \");\n}\n\n/* s.split(' ') // 띄어쓰기를 기준으로 나눕니다. [ 'try', 'hello', 'world' ]\n \n.map(el => el.split('')) 나눈것을 기준으로 요소 하나 하나씩 나눠줍니다 \n[[ 't', 'r', 'y' ], [ 'h', 'e', 'l', 'l', 'o' ], [ 'w', 'o', 'r', 'l', 'd' ]]\n \n.map((el, index) => index % 2 == 0 ? el.toUpperCase() : el.toLowerCase())\n//map에서 첫번째는 앞에서 가져온 요소, 두번째는 index를 반환 합니다!\n//map의 index를 기준으로 짝수인지 홀수인지 판별하여 대문자, 소문자로 변환 해줍니다.\n[[ 'T', 'r', 'Y' ], [ 'H', 'e', 'L', 'l', 'O' ], [ 'W', 'o', 'R', 'l', 'D' ]]\n \n.join('') 작은 배열들을 합쳐줍니다.\n['TrY', 'HeLlO', 'WoRlD']\n \n.join(' ') 큰 배열들을 합쳐줍니다.\n\"TrY HeLlO WoRlD\"\n\n대, 소문자 변환, split, reverse, join, map 등등을 활용 해야 하므로 \n문자열을 연습하는데 좋은 문제입니다.\n*/", + "probId": "12930", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7pKivSXqs3zO0lOkISP4s", + "author": "prove-ability", + "code": "function solution(s) {\n let answer = '';\n s.split(\" \").forEach((word) => {\n for(let i = 0, len = word.length; i < len; i++) {\n if(i % 2 === 0) answer+=word[i].toUpperCase();\n else answer+=word[i].toLowerCase();\n }\n answer += \" \";\n })\n answer = answer.slice(0, answer.length - 1)\n return answer;\n}", + "probId": "12930", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "KsHkHFSHZ5_q5H0lT4TCm", + "author": "codeisneverodd", + "code": "function solution(n) {\n return n\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr, 0);\n}", + "probId": "12931", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rcCmcnK9rWAurCQbV9EBf", + "author": "chaerin-dev", + "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 10;\n n = Math.floor(n / 10);\n }\n return result;\n}", + "probId": "12931", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "OMq9nGAGm11PY-z4EsQ4s", + "author": "prove-ability", + "code": "function solution(n) {\n var answer = 0;\n n.toString()\n .split(\"\")\n .forEach((v) => {\n answer += parseInt(v);\n });\n return answer;\n}", + "probId": "12931", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "lsVTnwM-8e4pB_oCBzF0q", + "author": "codeisneverodd", + "code": "function solution(n) {\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((x) => parseInt(x));\n}", + "probId": "12932", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8RRpcAtRB1unJ874JhZuI", + "author": "chaerin-dev", + "code": "function solution(n) {\n // 숫자 -> 문자열 -> 배열 -> 뒤집기 -> 모든 원소에 대해 자연수로 형 변환\n return String(n)\n .split(\"\")\n .reverse()\n .map((item) => parseInt(item));\n}", + "probId": "12932", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "U6O8TExlKPNEPgeSKe6g9", + "author": "jaewon1676", + "code": "function solution(n) {\n return (n = n\n .toString()\n .split(\"\")\n .reverse()\n .map((o) => (o = parseInt(o))));\n}", + "probId": "12932", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LUf4Zhl2TFK5I7HJzrOH8", + "author": "prove-ability", + "code": "function solution(n) {\n // 1. 문자열 변환\n // 2. 배열로 변환\n // 3. 배열 반전\n // 4. 정수로 변환\n return n\n .toString()\n .split(\"\")\n .reverse()\n .map((v) => parseInt(v));\n}", + "probId": "12932", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "DeTwAbPzJQTYHfFSYeyQo", + "author": "yongchanson", + "code": "function solution(n) {\n let answer = [];\n let string = n.toString();\n for (let i = string.length - 1; i >= 0; i--) {\n let slice = string.substr(i, 1) * 1;\n answer.push(slice);\n }\n return answer;\n}", + "probId": "12932", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "AaKhktbCwYIvuLdqtVkNd", + "author": "codeisneverodd", + "code": "function solution(n) {\n return parseInt(\n n\n .toString()\n .split(\"\")\n .sort((a, b) => b - a)\n .join(\"\")\n );\n}", + "probId": "12933", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Dv63J0O2GNbleNOxMz2Xt", + "author": "chaerin-dev", + "code": "function solution(n) {\n // 정수 -> 문자열 -> 배열\n let arrN = String(n).split(\"\");\n // 배열 내림차순 정렬\n arrN.sort((a, b) => b - a);\n // 배열 -> 문자열 -> 정수\n return parseInt(arrN.join(\"\"));\n}", + "probId": "12933", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "qfpLTD851pQJuKNfQzp2t", + "author": "prove-ability", + "code": "function solution(n) {\n return parseInt(n.toString().split(\"\").sort((a, b) => b - a).join(\"\"), 10);\n}", + "probId": "12933", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "6QJtzbbAPWi0dYskBUOY5", + "author": "codeisneverodd", + "code": "function solution(n) {\n return Number.isInteger(Math.sqrt(n)) ? (Math.sqrt(n) + 1) ** 2 : -1;\n}", + "probId": "12934", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "60u_rYRNkIfmgaN_kHfcK", + "author": "chaerin-dev", + "code": "function solution(n) {\n // n의 제곱근값을 x에 저장\n let x = Math.sqrt(n);\n // x가 정수이면 x+1의 제곱 반환, x가 정수가 아니면 -1 반환\n return Number.isInteger(x) ? Math.pow(x + 1, 2) : -1;\n}", + "probId": "12934", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "xcml0sXpJFts_rH6YPv9T", + "author": "prove-ability", + "code": "function solution(n) {\n // n의 제곱근을 x 초기화\n const x = Math.sqrt(n);\n // 양의 정수라면 x + 1 제곱 반환\n if(Number.isInteger(x)) return Math.pow(x + 1, 2)\n // 아니라면 -1 반환\n return -1;\n}", + "probId": "12934", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "RW2uCQ6hMfNMAoXTJZkEB", + "author": "jaewon1676", + "code": "function solution(n) {\n let s = parseInt(Math.sqrt(n)) // n의 제곱근을 확인\n if (s ** 2 === n) return ((s+1) ** 2)\n \n return -1;\n}", + "probId": "12934", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LdOofECKfNCcPD_77jFrO", + "author": "yongchanson", + "code": "function solution(n) {\n const sqrt = Math.sqrt(n);\n //sqrt % 1 == 0 이면 양의정수, -0이면 음의정수\n return sqrt % 1 == 0 ? (sqrt + 1) ** 2 : -1;\n}", + "probId": "12934", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "B9slrixZJciwmd952NdVz", + "author": "codeisneverodd", + "code": "function solution(arr) {\n const index = arr.indexOf(Math.min(...arr));\n arr.splice(index, 1);\n return arr.length === 0 ? [-1] : arr;\n}", + "probId": "12935", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LoSHgCe7ylxHusDVr2-zX", + "author": "jaewon1676", + "code": "function solution(arr) {\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n if (arr.length < 1) return [-1];\n return arr;\n}\n\n/* 풀이과정 arr [4,3,2,1] 일경우\nMath.min(...arr)은 1\narr.indexOf(1), 1이 있는 index가 3이므로 3 반환.\narr.splice(3, 1) arr의 3번째 index만 제거 해준다.\narr의 크기가 1보다 작으면 -1, 그렇지 않으면 그대로 반환. */", + "probId": "12935", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "iaE7QvR9yOJqvB5MoSqiw", + "author": "chaerin-dev", + "code": "function solution(arr) {\n // arr에서 가장 최솟값의 위치를 찾아 해당 위치의 값을 삭제\n arr.splice(arr.indexOf(Math.min(...arr)), 1);\n // arr가 빈 배열이 아니면 arr를 반환, arr가 빈 배열이면 [-1]반환\n return arr.length ? arr : [-1];\n}", + "probId": "12935", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Fo72LEa6RrJ9yvfb4xd_j", + "author": "prove-ability", + "code": "function solution(arr) {\n // 최솟값 찾기\n const min = Math.min(...arr);\n // arr 중 min 과 같은 요소의 인덱스 제거\n arr.splice(\n arr.findIndex((num) => num === min),\n 1\n );\n // 만약 arr 가 비어있다면 [-1] 반환\n if (arr.length === 0) return [-1];\n return arr;\n}", + "probId": "12935", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "LjNarjFhD8SKHsKs3UTF2", + "author": "chaerin-dev", + "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n // 정답을 저장할 문자열 answer\n answer = \"\";\n // 세로 길이만큼 아래의 과정(가로 길이만큼 별 더해주고 줄 바꾸기) 반복\n for (let i = 0; i < b; i++) {\n // 가로 길이만큼 문자열에 별 더해주기\n for (let j = 0; j < a; j++) answer += \"*\";\n // 가로 길이만큼 별을 다 더해줬으면 줄 바꾸기\n answer += \"\\n\";\n }\n // 정답 출력\n console.log(answer);\n});", + "probId": "12969", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "6EejGKp__RPMVZw1Jg5Lh", + "author": "prove-ability", + "code": "process.stdin.setEncoding('utf8');\nprocess.stdin.on('data', data => {\n const nums = data.split(\" \");\n const n = Number(nums[0]), m = Number(nums[1]);\n \n let result = \"\";\n // 2차원으로 접근\n // 세로 길이만큼 반복\n for(let i = 0; i < m; i++) {\n // 가로 길이만큼 별 더하기\n for(let j = 0; j < n; j++) {\n result += \"*\";\n }\n // 가로가 끝나면 줄내림\n result += \"\\n\";\n }\n console.log(result)\n});", + "probId": "12969", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "24VCY_CYJhFP96mVIvqwh", + "author": "yongchanson", + "code": "process.stdin.setEncoding(\"utf8\");\nprocess.stdin.on(\"data\", (data) => {\n const n = data.split(\" \");\n const a = Number(n[0]),\n b = Number(n[1]);\n console.log((\"*\".repeat(a) + `\\n`).repeat(b));\n});\n/*\n<풀이과정>\nrepeat() 메서드는 문자열을 주어진 횟수만큼 반복해 붙인 새로운 문자열을 반환한다. ex) str.repeat(count);\n'*'.repeat(a) : *를 a만큼 반복한다.\n*/", + "probId": "12969", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Wv-MBFA5NHmUW8uTwXrei", + "author": "codeisneverodd", + "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}", + "probId": "12937", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "27S6lHdgIBoq9T6OqNMSt", + "author": "chaerin-dev", + "code": "function solution(num) {\n return num % 2 == 0 ? \"Even\" : \"Odd\";\n}", + "probId": "12937", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "iP9qldlsLGaQ6zSbDN0f5", + "author": "jaewon1676", + "code": "function solution(num) {\n let answer;\n num % 2 == 0 ? (answer = \"Even\") : (answer = \"Odd\");\n // 삼항 연산자를 사용하여 참일경우 Even, 거짓일 경우 Odd를 반환.\n return answer;\n}", + "probId": "12937", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "U726lfDR_pckQ93HTvQTL", + "author": "prove-ability", + "code": "function solution(num) {\n return num % 2 === 0 ? \"Even\" : \"Odd\";\n}", + "probId": "12937", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "NCUk0-GHkrAvIwcvfBjRX", + "author": "yongchanson", + "code": "function solution(num) {\n return num % 2 ? \"Odd\" : \"Even\";\n}", + "probId": "12937", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "A-7EsySAVrBLbzbRxj41q", + "author": "codeisneverodd", + "code": "function solution(n, lost, reserve) {\n let answer = 0;\n let studentClothes = new Array(n + 2).fill(1);\n for (const student of reserve) studentClothes[student] += 1;\n for (const student of lost) studentClothes[student] -= 1;\n for (let i = 1; i < n + 1; i++) {\n if (studentClothes[i] === 0) {\n if (studentClothes[i - 1] === 2 || studentClothes[i + 1] === 2) {\n if (studentClothes[i - 1] === 2) {\n studentClothes[i - 1] -= 1;\n studentClothes[i] += 1;\n } else {\n studentClothes[i + 1] -= 1;\n studentClothes[i] += 1;\n }\n }\n }\n }\n for (const student of studentClothes) {\n answer += student > 0 ? 1 : 0;\n }\n answer -= 2;\n return answer;\n}", + "probId": "42862", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Jp_bARhodqdiX76BskYEU", + "author": "prove-ability", + "code": "function solution(n, lost, reserve) {\n // students 초기화 - 학생들은 체육복 개수 1로 초기화\n let students = Array.from({ length: n }).fill(1);\n\n // 읽어버린 학생 개수 반영\n lost.forEach((target) => {\n students[target - 1]--;\n });\n\n // 여별 체육복 개수 반영\n reserve.forEach((target) => {\n students[target - 1]++;\n });\n\n // 학생들 순차적으로 접근\n for (let i = 0, len = students.length; i < len; i++) {\n // 체육복 0 | 1 을 가진 학생들을 대여 불가능이기 때문에 continue\n if (students[i] === 0 || students[i] === 1) continue;\n // 이전 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (i !== 0 && students[i - 1] === 0) {\n // 이전 학생 증가\n students[i - 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n // 인덱스 학생이 1개 초과한 체육을 가지고 다음 번호의 학생이 있고 그 학생이 0개의 체육복을 가졌다면\n if (students[i] > 1 && i + 1 !== len && students[i + 1] === 0) {\n // 다음 학생 증가\n students[i + 1]++;\n // 자신은 대여해줬으니 감소\n students[i]--;\n }\n }\n // 체육복 1개 이상을 가진 학생들의 수 반환\n return students.filter((v) => v >= 1).length;\n}", + "probId": "42862", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rBOyp_uZuvqujFMkrXKh8", + "author": "jaewon1676", + "code": "function solution(n, lost, reserve) {\n let answer = Array(n).fill(1) // n만큼의 배열을 만들어서 1을 만들어줍니다\n let cnt = 0;\n for(let i = 0; i < reserve.length; i++){ // reserve 를 순회하며 체육복\n answer[reserve[i]-1] += 1\n }\n for(let i = 0; i < lost.length; i++){ // lost 를 순회하며 체육복 수를 -1\n answer[lost[i]-1] -= 1\n }\n for(let i = 0; i < n; i++){ // n을 순회하며 앞사람과 뒷사람의 체육복 수를 비교한다.\n if (answer[i] == 2 && answer[i+1] == 0 || answer[i+1] == 2 && answer[i] == 0){\n answer[i] = 1\n answer[i+1] = 1\n }\n }\n for(let i = 0; i < answer.length; i++){\n (answer[i] >= 1 ? cnt += 1 : null)\n }\n return cnt\n }\n //그리디\n // lost 배열과 reserve 배열을 순회하여 체육복을 추가, 제거 해줍니다.\n // 그 후에 최종적으로 i부터 n까지 for문을 순회하며 i번쨰 학생과 i+1번째의 학생이 가진 체육복 수를 비교하여 빌려 줄 수 있는지, 빌려줄 수 없는지 확인 합니다.", + "probId": "42862", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "4mh35T96w0o_dN-4qMn3P", + "author": "chaerin-dev", + "code": "function solution(n, lost, reserve) {\n // 학생들의 체육복 개수를 저장할 배열 students\n // 학생의 index가 1번부터 시작하므로 배열의 길이를 n+1로 설정\n // 0번 학생은 실제로는 없지만 초기값을 1로 설정하면 이후 연산에 영향을 미치지 않음\n const students = Array.from({ length: n + 1 }, () => 1);\n\n // 체육복 분실/여분 정보 students 배열에 반영\n lost.forEach((lostStudent) => students[lostStudent]--);\n reserve.forEach((reserveStudent) => students[reserveStudent]++);\n\n // 체육복이 없어 체육 수업을 들을 수 없는 학생 수를 저장할 변수 cnt\n let cnt = 0;\n students.forEach((student, i) => {\n // 현재 인덱스의 학생이 체육복이 없다면\n if (student === 0) {\n // 바로 앞 학생이 체육복 여분이 있다면\n if (students[i - 1] === 2) {\n // 바로 앞 학생에게 체육복 빌리기\n students[i - 1]--;\n student++;\n }\n // 바로 앞 학생에게 체육복을 빌리지 못했고, 바로 뒤 학생이 체육복 여분이 있다면\n else if (students[i + 1] === 2) {\n // 바로 뒤 학생에게 체육복 빌리기\n students[i + 1]--;\n student++;\n }\n // 바로 앞 학생과 바로 뒤 학생 모두에게 체육복을 빌리지 못했다면 체육 수업을 들을 수 없음\n else cnt++;\n }\n });\n\n // 체육 수업을 들을 수 있는 학생 수 = 전체 학생 수 - 체육 수업을 들을 수 없는 학생 수\n return n - cnt;\n}", + "probId": "42862", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9Q0lkYcedv8SgcgtzudB0", + "author": "codeisneverodd", + "code": "function solution(n, m) {\n const gcd = greatestCommonDivisor(n, m);\n return [gcd, (n * m) / gcd];\n}\n\nconst greatestCommonDivisor = (a, b) => {\n if (b === 0) return a;\n else return greatestCommonDivisor(b, a % b);\n};", + "probId": "12940", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ewsZ9r3rqM2clbYhxTpQY", + "author": "chaerin-dev", + "code": "function solution(n, m) {\n // 최대공약수 구하기\n let gcd = (n, m) => (n % m === 0 ? m : gcd(m, n % m));\n // 최소공배수 구하기\n let lcm = (n, m) => (n * m) / gcd(n, m);\n // 결과 출력\n return [gcd(n, m), lcm(n, m)];\n}", + "probId": "12940", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Jr7B5dlwFDqEXbETHep2j", + "author": "yongchanson", + "code": "function solution(a, b) {\n let gcd = 0;\n for (let i = 1; i <= Math.min(a, b); i++) {\n if ((a % i) + (b % i) === 0) {\n gcd = i;\n }\n }\n return [gcd, (a / gcd) * b];\n}", + "probId": "12940", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "MXwkymbFd1kz6TIgqL_fK", + "author": "prove-ability", + "code": "function solution(sizes) {\n // 가로, 세로 중 큰 값을 가로 길이로 변경(스압)\n sizes.forEach(([width, height], index) => {\n if (sizes[index][0] < sizes[index][1]) [sizes[index][0], sizes[index][1]] = [sizes[index][1], sizes[index][0]];\n });\n\n // 가로, 세로 각각 큰 값 추출\n const widthMax = Math.max(...sizes.map(v => v[0]));\n const widthHeight = Math.max(...sizes.map(v => v[1]));\n\n return widthMax * widthHeight;\n}", + "probId": "86491", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "zTwUH1w_o_TSBqvU8Ui72", + "author": "codeisneverodd", + "code": "function solution(sizes) {\n for (let card of sizes) {\n if (card[0] < card[1]) [card[0], card[1]] = [card[1], card[0]];\n }\n\n const maxWidth = Math.max(...sizes.map(card => card[0]));\n const maxHeight = Math.max(...sizes.map(card => card[1]));\n return maxWidth * maxHeight;\n}", + "probId": "86491", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "94qlDqEmbjX9Yz8rrbh1O", + "author": "codeisneverodd", + "code": "function solution(num) {\n let answer = 0;\n while (answer <= 500) {\n if (num === 1) return answer;\n num = num % 2 === 0 ? num / 2 : num * 3 + 1;\n answer += 1;\n }\n return -1;\n}", + "probId": "12943", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Dm96pBci7mCGP2WUd4bXY", + "author": "chaerin-dev", + "code": "function solution(num) {\n // 작업을 반복한 횟수를 저장할 변수\n let cnt = 0;\n // num이 1이 되면 반복 종료\n while (num > 1) {\n // 작업을 500번 반복해도 1이 되지 않으면 -1 반환\n if (cnt == 500) return -1;\n // 작업 반복 횟수 증가\n cnt++;\n // 입력된 수가 짝수이면 2로 나누기\n if (num % 2 == 0) num /= 2;\n // 입력된 수가 홀수이면 3을 곱하고 1을 더하기\n else {\n num *= 3;\n num++;\n }\n }\n // 작업을 반복한 횟수 반환\n return cnt;\n}", + "probId": "12943", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "6Pz55YxSqwfiwool34rmC", + "author": "jaewon1676", + "code": "function solution(num) {\n var answer = 0;\n // num이 1이 아니고, answer이 500이 아니면 진행.\n // 두 가지 조건중 하나라도 맞지 않으면 while문 종료.\n while (num != 1 && answer != 500) {\n //짝수면, 2로 나눠주고 홀수면 3을 곱하고 1을 더해준다.\n num % 2 == 0 ? (num = num / 2) : (num = num * 3 + 1);\n answer++;\n }\n return num == 1 ? answer : -1;\n}", + "probId": "12943", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "UzH0LHREY5CZkFDEx6SnK", + "author": "prove-ability", + "code": "function solution(num) {\n let count = 0;\n\n // 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.\n while (num !== 1) {\n // 입력된 수가 짝수라면 2로 나눕니다.\n if (num % 2 === 0) num /= 2;\n // 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.\n else num = num * 3 + 1;\n count++;\n // 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요\n if (count > 500) return -1;\n }\n\n return count;\n}", + "probId": "12943", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7hfenXvttHxJdStgWjkFM", + "author": "yongchanson", + "code": "function solution(num) {\n let count = 0;\n while (num !== 1) {\n if (count++ === 500) return -1;\n num = num % 2 ? num * 3 + 1 : num / 2;\n }\n return count;\n}", + "probId": "12943", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "iPMEN0ayXeCq9KiQBcBKJ", + "author": "codeisneverodd", + "code": "function solution(board, moves) {\n let answer = 0;\n const length = board.length\n let basket = []\n moves.forEach(move => {\n for (let i = 0; i < length; i++) {\n const item = board[i][move - 1]\n if (item !== 0) {\n if (basket[basket.length - 1] !== item) {\n basket.push(item)\n } else {\n basket.pop()\n answer += 2\n }\n board[i][move - 1] = 0\n break\n }\n }\n })\n\n return answer;\n}", + "probId": "64061", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "S52gfdXl4Vf3G1iqQsGZk", + "author": "jaewon1676", + "code": "function solution(board, moves) {\n var answer = 0; // 인형을 터뜨린 횟수\n let basket = []; // 바구니\n let crane = 0; // 크레인의 행의 위치\n for (let i = 0; i < moves.length; i++) {\n crane = moves[i] - 1; // crane = 0\n for (let j = 0; j < board.length; j++) {\n if (board[j][crane] == 0)\n else if (board[j][crane] != 0) {\n basket.push(board[j][crane])\n board[j][crane] = 0\n if (basket[basket.length - 1] == basket[basket.length - 2]) {\n basket.pop();\n basket.pop();\n answer += 2;\n }\n break;\n }\n }\n }\n\n return answer;\n}\n\n/* 풀이 과정\n1. 입력받은 moves의 length만큼 for문을 돌린다.\n2. 크레인에 찾고자 하는 행을 저장하여 제일 윗부분부터 탐색한다., 제일 윗부분이 비어있으면 다음 행으로 넘어가면서 탐색 한다.\n3. 값이 들어있으면 해당 값을 바구니에 push 해주고, 비워준다.\n4. 바구니 배열의 끝부분에 같은 인형 값이 연속되어있으면 연속 된 인형들을 pop 해주고, answer에 인형이 터진 횟수인 2를 더해준다. */", + "probId": "64061", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "pfHtfsZVkkHiayrYTOHoG", + "author": "chaerin-dev", + "code": "function solution(board, moves) {\n let n = board.length;\n\n // 격자의 세로줄이 하나의 배열이 되도록 2차원 배열 방향 변경\n board = board.flat();\n let rotatedBoard = Array.from({ length: n }, (i) => []);\n for (let i = 0; i < board.length; i++) {\n if (board[i]) rotatedBoard[i % n].push(board[i]);\n }\n\n // moves 배열 순회하며 인형 꺼내서 stack에 집어넣기\n let stack = [];\n let cnt = 0;\n for (let move of moves) {\n let doll = rotatedBoard[move - 1].shift();\n if (doll === undefined) continue;\n if (stack[stack.length - 1] === doll) {\n stack.pop();\n cnt += 2;\n } else {\n stack.push(doll);\n }\n }\n\n return cnt;\n}", + "probId": "64061", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ZCxqB6BbJUzqxD9zJ5HfP", + "author": "chaerin-dev", + "code": "function solution(numbers, hand) {\n // 키패드를 4행 3열의 이차원 배열이라고 생각\n\n // leftRow, leftCol: 왼손의 현재 위치\n let [leftRow, leftCol] = [3, 0];\n // rightRow, rightCol: 오른손의 현재 위치\n let [rightRow, rightCol] = [3, 2];\n // 각 번호를 누른 엄지손가락이 어느 손인지 저장할 문자열\n let result = '';\n\n // 눌러야할 각 번호가\n numbers.forEach(e => {\n // 1/4/7이면 왼손으로 눌러야하므로\n if (e === 1 || e === 4 || e === 7) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [Math.floor((e - 1) / 3), 0];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 3/6/9이면 오른손으로 눌러야하므로\n else if (e === 3 || e === 6 || e === 9) {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [Math.floor((e - 1) / 3), 2];\n // result 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n\n // 2/5/8/0이면\n else {\n // 번호 위치 계산의 편의를 위해 눌러야 할 번호가 0일 경우 11로 바꿔줌\n if (e === 0) e = 11;\n\n // leftRow, leftCol: 다음에 눌러야 할 번호의 위치\n let [nextRow, nextCol] = [Math.floor((e - 1) / 3), 1];\n // leftDistance: 현재 왼손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let leftDistance = Math.abs(leftRow - nextRow) + Math.abs(leftCol - nextCol);\n // rightDistance: 현재 오른손의 위치와 다음에 눌러야 할 번호의 위치 사이의 거리\n let rightDistance = Math.abs(rightRow - nextRow) + Math.abs(rightCol - nextCol);\n\n // 왼손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 왼손잡이라면 왼손으로 눌러야하므로\n if (leftDistance < rightDistance || (leftDistance == rightDistance && hand === 'left')) {\n // 왼손의 위치 업데이트\n [leftRow, leftCol] = [nextRow, nextCol];\n // result 문자열에 \"L\" 이어붙여줌\n result += 'L';\n }\n\n // 오른손이 다음에 눌러야 할 번호의 위치와 더 가깝거나, 두 손의 거리가 같으면서 오른손잡이라며 오른손으로 눌러야하므로\n else {\n // 오른손의 위치 업데이트\n [rightRow, rightCol] = [nextRow, nextCol];\n // reuslt 문자열에 \"R\" 이어붙여줌\n result += 'R';\n }\n }\n });\n\n // result 문자열 반환\n return result;\n}", + "probId": "67256", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "68jNGoyytzcOlAS5SyGFJ", + "author": "codeisneverodd", + "code": "function solution(numbers, hand) {\n let leftNum = 10;\n let rightNum = 12;\n return numbers\n .map(num => {\n if (num === 0) {\n num = 11;\n }\n if (num % 3 === 1) {\n return leftTo(num);\n } else if (num % 3 === 0) {\n return rightTo(num);\n } else {\n const numLocation = numToLocation(num);\n const leftDistance = distanceBtwLocation(numToLocation(leftNum), numLocation);\n const rightDistance = distanceBtwLocation(numToLocation(rightNum), numLocation);\n if (leftDistance === rightDistance) {\n return hand === 'left' ? leftTo(num) : rightTo(num);\n } else if (leftDistance < rightDistance) {\n return leftTo(num);\n } else {\n return rightTo(num);\n }\n }\n })\n .join('');\n\n function leftTo(num) {\n leftNum = num;\n return 'L';\n }\n\n function rightTo(num) {\n rightNum = num;\n return 'R';\n }\n}", + "probId": "67256", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "4MhQup3fXXKL9MmSX8T8n", + "author": "codeisneverodd", + "code": "function solution(arr) {\n return arr.reduce((acc, curr) => acc + curr) / arr.length;\n}", + "probId": "12944", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "hj6e3dHd8OFlm9FdM7EjK", + "author": "jaewon1676", + "code": "function solution(arr) {\n var answer = 0;\n for (var i = 0; i < arr.length; i++) {\n answer += arr[i];\n }\n return answer / arr.length;\n}", + "probId": "12944", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "HAOzveHmR3uEuIw0sngUX", + "author": "chaerin-dev", + "code": "function solution(arr) {\n // arr의 모든 요소를 sum에 더힘\n let sum = arr.reduce((sum, e) => sum + e);\n // sum을 arr의 요소의 갯수로 나눈 후 반환\n return sum / arr.length;\n}", + "probId": "12944", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gm7pLWLd9DyjvgskAV2FJ", + "author": "prove-ability", + "code": "function solution(arr) {\n var answer = 0;\n arr.forEach((num) => {\n answer += num;\n });\n return answer / arr.length;\n}", + "probId": "12944", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "MmmrvwJ7lrAf31EdIDPfg", + "author": "codeisneverodd", + "code": "function solution(nums) {\n const numLen = nums.length;\n const setLen = [...new Set(nums)].length;\n return numLen / 2 >= setLen ? setLen : numLen / 2;\n}", + "probId": "1845", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "yhtVkzIR36dqONCwB25S2", + "author": "jaewon1676", + "code": "function solution(nums) {\n let max = nums.length / 2; // N / 2\n let set = [...new Set(nums)]; // 중복을 없앤다.\n return set.length > max ? max : set.length;\n}\n\n/* 풀이 과정\n1. 많은 종류의 폰켓몬을 포함해서 N/2마리 선택해야한다.\n2. 같은 숫자는 같은 종류이므로 set을 활용해 중복을 없애고 진행한다.\n3. 최대로 고를 수 있는 폰켓몬 수는 N / 2마리가 set의 길이보다 크냐 작냐에 따라 \n 두가지 경우의 수로 좁혀진다. */", + "probId": "1845", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "4TV8GYuTck0WnYo6CflGw", + "author": "prove-ability", + "code": "function solution(nums) {\n var answer = 0;\n // set 을 사용해 중복 제거\n const set = new Set();\n nums.forEach((num) => {\n set.add(num);\n });\n // set 의 사이즈가 N/2 보다 크다면 N/2 반환\n // 그렇지 않다면 set size 반환\n if (set.size > nums.length / 2) answer = nums.length / 2;\n else answer = set.size;\n\n return answer;\n}", + "probId": "1845", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "mYSk3xSypHHsW1bV15ymJ", + "author": "yongchanson", + "code": "function solution(nums) {\n const unique = nums.filter((element, index) => {\n return nums.indexOf(element) === index;\n });\n\n return unique.length > nums.length / 2 ? nums.length / 2 : unique.length;\n}", + "probId": "1845", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "1buPydN5hvSMYxiJWJhWk", + "author": "chaerin-dev", + "code": "function solution(nums) {\n // 가질 수 있는 폰켓몬의 수\n const getCnt = nums.length / 2;\n // 폰켓몬 종류의 수\n const setSize = new Set(nums).size;\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 많으면\n // -> 모두 다른 종류의 폰켓몬을 하나씩 가질 수 있음\n // 내가 가질 수 있는 폰켓몬의 수보다 폰켓몬 종류의 수가 더 적으면\n // -> 최대한 다양한 종류의 폰켓몬을 가지려고 해도 원래 있던 폰켓몬 종류의 수가 최대로 가질 수 있는 폰켓몬 종류의 수\n return setSize > getCnt ? getCnt : setSize;\n}", + "probId": "1845", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "1gdqtkUhXrhHbYE9Duzvi", + "author": "codeisneverodd", + "code": "function solution(x) {\n const sum = x\n .toString()\n .split(\"\")\n .map((x) => parseInt(x))\n .reduce((acc, curr) => acc + curr);\n return x % sum === 0;\n}", + "probId": "12947", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "KzMzxIkslLO020nqk83NZ", + "author": "chaerin-dev", + "code": "function solution(x) {\n // x의 각 자리에 접근하기 위해 x를 문자열로 변환\n let x_str = x.toString();\n // 각 자릿수의 합을 저장할 변수\n let sum_of_digits = 0;\n // x_str의 각 문자를 숫자로 바꿔 sum_of_digits에 더해줌\n for (let i = 0; i < x_str.length; i++) {\n sum_of_digits += Number(x_str[i]);\n }\n // x가 각 자릿수의 합으로 나누어떨어지는지 여부 반환\n return x % sum_of_digits == 0;\n}", + "probId": "12947", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "wofD5Hv4OpVm-o9uHmILl", + "author": "jaewon1676", + "code": "function solution(x) {\n let sum = 0;\n let arr = String(x).split(\"\"); // 숫자를 하나씩 분리한다.\n\n for (var i = 0; i < arr.length; i++) {\n sum += Number(arr[i]); // 각 숫자를 더해준다.\n }\n\n return x % sum == 0 ? true : false; // 자릿수의 합으로 x가 나누어지면 하샤드 수\n}", + "probId": "12947", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "DyuxxksmPktyA4cq5Lqum", + "author": "prove-ability", + "code": "function solution(x) {\n var answer = true;\n // 모든 자릿수의 합을 구한다\n const sum = x\n .toString()\n .split(\"\")\n .reduce((acc, cur) => acc + parseInt(cur, 10), 0);\n // x가 자릿수의 합으로 나누어떨어지지 않는다면 false 반환\n if (x % sum !== 0) return false;\n return answer;\n}", + "probId": "12947", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Y5u7p4htZYqblMzR79zHj", + "author": "codeisneverodd", + "code": "function solution(phone_number) {\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}", + "probId": "12948", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "RegkLLoeWx_PnVUz6Qs1L", + "author": "chaerin-dev", + "code": "function solution(phone_number) {\n // \"*\"을 phone_number의 길이에서 4만큼 뺀 횟수만큼 반복한 문자열과\n // phone_number의 -4인덱스부터 끝까지 추출한 문자열을\n // 이어붙인 후 반환\n return \"*\".repeat(phone_number.length - 4) + phone_number.slice(-4);\n}", + "probId": "12948", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "2-xaBZIgoE2krNO-WwgBd", + "author": "prove-ability", + "code": "function solution(phone_number) {\n var answer = \"\";\n answer += \"*\".repeat(phone_number.length - 4);\n answer += phone_number.slice(phone_number.length - 4, phone_number.length);\n return answer;\n}", + "probId": "12948", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "6h5JI_CTavzPJH7MtISGv", + "author": "codeisneverodd", + "code": "function solution(arr1, arr2) {\n var answer = new Array(arr1.length);\n for (let i = 0; i < arr1.length; i++) {\n answer[i] = new Array(arr1[0].length);\n }\n for (let row = 0; row < answer.length; row++) {\n for (let col = 0; col < answer[0].length; col++) {\n answer[row][col] = arr1[row][col] + arr2[row][col];\n }\n }\n return answer;\n}", + "probId": "12950", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "TWduPWGleuME_CJQCTSPk", + "author": "chaerin-dev", + "code": "function solution(arr1, arr2) {\n var answer = [];\n for (let i = 0; i < arr1.length; i++) {\n let ans_row = [];\n for (let j = 0; j < arr1[0].length; j++) {\n ans_row.push(arr1[i][j] + arr2[i][j]);\n }\n answer.push(ans_row);\n }\n return answer;\n}", + "probId": "12950", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "QC1oG84-d4QJwG15v-Ti7", + "author": "yongchanson", + "code": "function solution(A, B) {\n let answer = [];\n\n for (let i = 0; i < A.length; i++) {\n answer[i] = [];\n for (let j = 0; j < A[0].length; j++) {\n answer[i][j] = A[i][j] + B[i][j];\n }\n }\n return answer;\n}", + "probId": "12950", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "VjakovEpxyPzA5dcN2rzZ", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = '';\n const oneTwoFour = ['4', '1', '2']\n while (n > 0) {\n const remainder = n % 3\n answer = oneTwoFour[remainder] + answer;\n if (remainder === 0) {\n n = Math.floor((n - 1) / 3)\n } else {\n n = Math.floor(n / 3)\n }\n }\n return answer;\n}", + "probId": "12899", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7LgMYX1DApNTOR0a8CSTp", + "author": "jaewon1676", + "code": "function solution(n) {\n const number = [ 4, 1, 2];\n let answer = \"\";\n \n while(n){ // \n answer = number[n%3] + answer;\n n = (n%3 == 0)? n/3 - 1 : Math.floor(n/3);\n }\n\n return answer\n}", + "probId": "12899", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9W6tETWU0iM4iM27P11Mr", + "author": "RyanDeclan", + "code": "// 3진법 풀이를 바탕으로 풀음 0,1,2 대신 1,2,3을 활용\n// 1,2,4 나라지만 임시적으로 1,2,3 나라를 운영하고 마지막에 replace로 3을 전부 4로 바꾸는 코드\nlet result = \"\";\nfunction solution(n) {\n let remainder = n % 3;\n let quotient = Math.floor(n / 3)\n if(!remainder){\n quotient = Math.floor(n / 3) - 1;\n remainder = 3\n }\n result += remainder;\n if( quotient <= 3){\n if(quotient)result += quotient\n result = result.replace(/[\"3\"]/g,\"4\")\n return result.split(\"\").reverse().join(\"\")\n } \n return solution(quotient);\n}", + "probId": "12899", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "nKaTjadaguUkLwT6umotE", + "author": "jaewon1676", + "code": "function solution(n) {\n let dp = [0, 1, 2] // n이 1, 2일때는 바로 답을 출력,\n if (n>2){ // n이 3 이상이면 필요한 만큼의 수 까지만 수를 만들어준다.\n for (let i=3; i<=n; i++){\n dp.push((dp[i-1] + dp[i-2]) % 1000000007);\n }\n }\n return dp[n]\n}\n/* \nn이 1일땐 1, 2일땐 2, 3일땐 3, 4일땐 5 . . 의 식이 보인다.\nn = (n - 1) + (n - 2)의 식으로 구할 수 있고,\n제한 사항을 주의해서 풀어보자. */", + "probId": "12900", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "AOPsrD2ijP3-40z3nFgW1", + "author": "le2sky", + "code": "function solution(numbers) {\n const answer = [];\n numbers.forEach((num) => {\n if (num % 2 == 0) answer.push(num + 1);\n else {\n let binary = [\"0\", ...num.toString(2)];\n let last = binary.lastIndexOf(\"0\");\n binary[last] = \"1\";\n binary[last + 1] = \"0\";\n answer.push(parseInt(binary.join(\"\"), 2));\n }\n });\n return answer;\n}", + "probId": "77885", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "zlZcsNzLVWdMwgVIPU8I2", + "author": "codeisneverodd", + "code": "function solution(n) {\n if (n % 2 !== 0) return 0;\n\n const getCount = n => {\n const k = n / 2;\n const count = [3, 11, ...Array(k - 2)];\n const divider = 1000000007;\n for (let i = 2; i < k; i++) {\n count[i] = (4 * count[i - 1] - count[i - 2] + divider) % divider;\n }\n return count[count.length - 1];\n };\n\n return getCount(n);\n}", + "probId": "12902", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "28P5BaMjEWq4UWKkmwqQz", + "author": "codeisneverodd", + "code": "function solution(citations) {\n var answer = 0;\n let h = 0\n let length = 0\n while (length >= h) {\n h++\n length = citations.filter(citation => citation >= h).length\n }\n answer = h - 1\n return answer;\n}", + "probId": "42747", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "07_VeueyKdEDFDyNjPTao", + "author": "jaewon1676", + "code": "function solution(citations) {\n var answer = 0;\n citations.sort((a,b)=>(b-a))\n\n for(var i=0; i word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ')\n //word[0]은 빈 문자열을 만나면 undefined를, word.charAt(0)은 빈 문자열을 만나면 빈 문자열을 반환한다.\n return answer;\n}", + "probId": "12951", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "zJu4dHtoKmaZoeqGvYxO6", + "author": "jaewon1676", + "code": "function solution(s) {\n s = s.split(' ').map(el => el.split('').map((el, index) => \n index == 0 ? el.toUpperCase() : el.toLowerCase()).join('')).join(' ')\n return s;\n}\n// 문자열을 연습하기에 좋은 문제입니다.\n \n// s.split(' ') // 띄어쓰기를 기준으로 나눕니다.\n// .map(el => el.split('')) 나눈 덩어리를 다시 요소 하나 하나씩 나눠줍니다 \n// .map((el, index) => index == 0 ? el.toUpperCase() : el.toLowerCase())\n// 덩어리의 요소가 첫번째이면 대문자, 그렇지 않으면 소문자로 변환 해줍니다. \n// .join('') 작은 배열들을 합쳐줍니다.\n// .join(' ') 큰 배열들을 합쳐줍니다.", + "probId": "12951", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "hK9f9ndQDE1sXaUinfKAe", + "author": "yongchanson", + "code": "function solution(s) {\n let answer = [];\n s = s.split(\" \");\n\n for (let i = 0; i < s.length; i++) {\n answer.push(\n s[i].substring(0, 1).toUpperCase() + s[i].substring(1).toLowerCase()\n );\n }\n return answer.join(\" \");\n}", + "probId": "12951", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "sPlDt5aiENmQJgvlQmebU", + "author": "RyanDeclan", + "code": "function solution(s) {\n return s.toLowerCase().split(\" \").map(x=>x[0] ? x[0].toUpperCase() + x.substring(1) : \"\").join(\" \");\n}\n\n// 이 문제에서 제일 핵심은 \"공백문자가 연속해서 나올 수 있습니다.\" 입니다. 이 부분을 꼭 고려하셔야합니다. \n// 왜냐하면 공백이 연속으로 있으면 split할때 공백이 포함되기에 그 공백이 마침 x[0]이 되어버리면 undefined.toUpperCase()가 되기에 런타임에러가 뜹니다.\n// 따라서 저는 풀때 당시 몰랐지만 chartAt()을 사용하는 것도 좋은 방법중 하나라고 생각합니다. \n//그게 아니라 이 코드로 한다면 꼭 undefined인 경우를 처리하는 코드를 추가해줘야합니다.", + "probId": "12951", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "TBwaxd9mZyrzb-Durxs46", + "author": "codeisneverodd", + "code": "function solution(n) {\n /*\n 1. 0번째 행에 0번째 queen을 놓는다.\n 2. 그 다음 행의 퀸은 이전 퀸들의 범위와 겹치지 않는 곳에 놓는다. 퀸은 한 행에 반드시 하나 두어야한다.\n 3. 마지막 열까지 도달하면 성공으로 간주하고 answer에 1을 더한다.\n 4. 0번째 queen의 위치를 바꿔가며 모두 시도한다.\n 4. 단, 체스판은 일차원 배열로 선언하고 index = 행, 값 = 열 로 생각한다.\n */\n let answer = 0;\n const canBePlacedOn = (chess, currentRow) => {\n //해당 행에 둔 queen이 유효한지\n for (let prevRow = 0; prevRow < currentRow; prevRow++) {\n const onDiagonal = currentRow - prevRow === Math.abs(chess[currentRow] - chess[prevRow])\n const onStraight = chess[prevRow] === chess[currentRow]\n if (onDiagonal || onStraight) return false\n }\n return true\n }\n const placeQueen = (chess, currentRow) => {\n //queen을 배치하다가 끝 행에 도착하면 1을 리턴, 도착하지 못하면 0을 리턴하여, 재귀적으로 모든 경우를 합하여 리턴\n let count = 0\n if (currentRow === chess.length) return 1\n for (let currentQueen = 0; currentQueen < n; currentQueen++) {\n //queen을 우선 배치한 후 가능한지 살펴본다.\n chess[currentRow] = currentQueen\n if (canBePlacedOn(chess, currentRow)) count += placeQueen(chess, currentRow + 1)\n }\n return count\n }\n for (let firstQueen = 0; firstQueen < n; firstQueen++) {\n const chess = new Array(n).fill(-1)\n chess[0] = firstQueen\n answer += placeQueen(chess, 1)\n }\n return answer;\n}", + "probId": "12952", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "JL6PQjS1Ye6tolU8A_E6R", + "author": "codeisneverodd", + "code": "function solution(arr) {\n var answer = 0;\n answer = arr.reduce((a, b) => leastCommonMultiple(a, b), 1)\n return answer;\n}\n\nfunction leastCommonMultiple(a, b) {\n return a * b / greatestCommonDivisor(a, b)\n}\n\nfunction greatestCommonDivisor(a, b) {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", + "probId": "12953", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "i8sYJBOLUeicvCcuIG3se", + "author": "codeisneverodd", + "code": "function solution(str1, str2) {\n var answer = 0;\n let compare1 = verifiedSlices(str1), compare2 = verifiedSlices(str2)\n const union = new Set([...compare1, ...compare2])\n let multiIntersectionLen = 0, multiUnionLen = 0\n for (const slice of union) {\n const compare1Count = compare1.filter(x => x === slice).length,\n compare2Count = compare2.filter(x => x === slice).length\n multiIntersectionLen += Math.min(compare1Count, compare2Count)\n multiUnionLen += Math.max(compare1Count, compare2Count)\n }\n answer = multiUnionLen === 0 ? 65536 : Math.floor(multiIntersectionLen / multiUnionLen * 65536)\n return answer;\n}\n\nfunction verifiedSlices(str) {\n const onlyAlphabet = /[a-zA-Z]{2}/\n let result = []\n for (let i = 0; i < str.length - 1; i++) {\n const slice = str.slice(i, i + 2)\n if (onlyAlphabet.test(slice)) result.push(slice.toLowerCase())\n }\n return result\n}", + "probId": "17677", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "RBflJhaKTzyHXGsgMh8Tp", + "author": "jaewon1676", + "code": "function solution(str1, str2) {\n\n str1 = str1.toUpperCase(); // 대소문자를 구분하지 않으니 대문자로 맞춰줌.\n str2 = str2.toUpperCase();\n let arr1 = new Array() // 빈 객체를 만들어줌.\n let arr2 = new Array()\n \n for (var i = 0; i < str1.length - 1; i++) {\n let tmp = str1.substr(i, 2) // i부터 2개 ( i, i+1 )\n if (tmp.search(/[^A-Z]/g) >= 0) {\n // ^(not), A-Z(A ~ Z 의 범위), g(global 모두) \n // tmp 변수에 담은 문자열이 영문자가 아니면 -1을 반환.\n continue\n }\n arr1.push(tmp)\n }\n \n for (var i = 0; i < str2.length - 1; i++) {\n let tmp = str2.substr(i, 2)\n if (tmp.search(/[^A-Z]/g) >= 0) {\n continue\n }\n arr2.push(tmp)\n }\n arr1.sort()\n arr2.sort()\n var a = [] // 중복포함, 교집합 배열\n var b = [] // 중복포함, 합집합 배열\n \n for (var i = 0; i < arr2.length; i++) {\n if (arr1.indexOf(arr2[i]) >= 0) { \n // arr1 객체에 arr2[i]과 같은 값이 있는지 확인.\n // 없으면 -1을 반환하기때문에 조건이 성립되지 않는다. \n a.push(arr1.splice(arr1.indexOf(arr2[i]), 1))\n }\n // 교집합이 성립되지 않으면 실행.\n b.push(arr2[i])\n }\n\n for (var i = 0; i < arr1.length; i++) {\n b.push(arr1[i])\n }\n\n // 분모가 0이 될경우, 분자가 0이될 경우 따로 분리해줘야함\n if (b.length === 0) return 65536\n if (a.length === 0) return 0\n\n return Math.floor((a.length / b.length) * 65536)\n}", + "probId": "17677", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "AknDF5Bz9CpCYN5i9q76r", + "author": "codeisneverodd", + "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = []\n if (cacheSize === 0) return 5 * cities.length\n for (const city of cities) {\n const cityLC = city.toLowerCase()\n if (cache.includes(cityLC)) {\n cache.splice(cache.indexOf(cityLC), 1)\n cache.unshift(cityLC)\n answer += 1\n } else {\n if (cache.length >= cacheSize) cache.pop()\n cache.unshift(cityLC)\n answer += 5\n }\n }\n return answer;\n}", + "probId": "17680", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "DWtHGPN_Hr99gIXXEB6Uo", + "author": "jaewon1676", + "code": "function solution(cacheSize, cities) {\n var answer = 0;\n let cache = [];\n \n //캐시 크기가 0인 경우는 따로 처리\n if (cacheSize === 0) return cities.length * 5;\n \n while (cities.length != 0) {\n // 맨 앞의 배열의 요소 히나를 소문자로 변환해서 city에 넣는다.\n const city = cities.shift().toLowerCase(); \n // cities의 요소 city가 캐시 안에 있는지 비교한다. (hit or miss)\n if (cache.includes(city)) { \n // 캐시 안에 있으면 그 위치에 있는 캐시를 빼주고,\n cache.splice(cache.indexOf(city), 1);\n // 맨 뒤로 push 해준다.\n cache.push(city);\n // cache hit\n answer += 1;\n } else { // 캐시 크기가 꽉 차있으면 캐시 맨 앞에 요소를 하나 빼준다.\n if (cache.length === cacheSize) {\n cache.shift();\n }\n // 새로운 캐시 맨 뒤로 push\n cache.push(city);\n // cache miss\n answer += 5;\n }\n }\n return answer;\n }\n /* LRU 알고리즘\n n이 배열 안에 있으면 배열 안의 n을 빼주고, 새 n을 배열의 맨 뒤로 push 한다.\n n이 배열 안에 없으면 n을 배열의 맨 뒤로 push 한다. 이때 배열의 크기 여유가 없으면\n 배열에서 가장 오래된 요소를 하나 뺴준다. (arr.shift()) */", + "probId": "17680", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "hKVFCuqW6bqhwkd-G1poJ", + "author": "codeisneverodd", + "code": "function solution(m, n, board) {\n board = board.map(r => r.split(''));\n const getSquare = ([r, c]) => [\n [r, c],\n [r, c + 1],\n [r + 1, c],\n [r + 1, c + 1],\n ];\n\n const isSquare = ([r, c]) => {\n if (board[r][c] === '@') return false;\n return [...new Set(getSquare([r, c]).map(([r, c]) => board[r][c]))].length === 1;\n };\n\n const remove = () => {\n const removeArr = [];\n for (let r = 0; r < m - 1; r++) {\n for (let c = 0; c < n - 1; c++) {\n if (isSquare([r, c])) getSquare([r, c]).forEach(v => removeArr.push(v));\n }\n }\n removeArr.forEach(([r, c]) => {\n board[r][c] = '@';\n });\n return removeArr.length !== 0;\n };\n\n const pull = () => {\n for (let c = 0; c < n; c++) {\n const remainColumn = Array.from({ length: m }, (_, r) => board[r][c]).filter(v => v !== '@');\n const resultColumn = [...Array(m - remainColumn.length).fill('@'), ...remainColumn];\n resultColumn.forEach((v, r) => {\n board[r][c] = v;\n });\n }\n return board;\n };\n\n while (remove()) {\n pull();\n }\n\n return board.flat().filter(v => v === '@').length;\n}", + "probId": "17679", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "zGjcAQnQZZy9HifTDSHMS", + "author": "codeisneverodd", + "code": "function solution(n, t, m, p) {\n let queue = [], result = [], currentNumDecimal = -1, turn = 0\n while (result.length < t) {\n if (queue.length === 0) {\n currentNumDecimal++\n currentNumDecimal.toString(n).split('').forEach(x => queue.push(x))\n }\n const currentChar = queue.shift()\n if (turn % m === p - 1) result.push(currentChar)\n turn++\n }\n return result.join('').toUpperCase()\n}", + "probId": "17687", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "nWgDR9ot7FpFEI6isToMa", + "author": "minjongbaek", + "code": "function convertString(m) { // 문자열 m에 #이 붙은 음이 있다면 #을 제거하고 소문자로 변경한 후 반환하는 함수\n return m\n .replace(/C#/g, 'c')\n .replace(/D#/g, 'd')\n .replace(/F#/g, 'f')\n .replace(/G#/g, 'g')\n .replace(/A#/g, 'a');\n}\n\nfunction solution(m, musicinfos) {\n\n // 네오가 기억하고 있는 멜로디가 라디오에서 재생됐는지 확인해야합니다.\n // 재생시간이 길면 악보의 멜로디가 반복되어 재생되고, 짧다면 중간에 끊어지게 됩니다.\n // #이 붙은 음은 2자리를 차지하기 때문에 #이 붙은 음을 어떻게 처리할지가 중요합니다.\n\n const listenSound = convertString(m); // #이 붙은 음을 다른 문자로 변환합니다.\n \n const map = new Map(); // 조건에 일치하는 음악 정보를 저장할 map 변수를 선언합니다.\n for (const info of musicinfos) {\n const [start, finish, title, _score] = info.split(',');\n // 음악 재생이 끝난 시각과 재생된 시각의 차를 구하여 재생시간을 구합니다.\n const duration = ((Number(finish.slice(0, 2)) * 60) + (Number(finish.slice(3, 5)))) - ((Number(start.slice(0, 2)) * 60) + (Number(start.slice(3, 5))));\n \n const score = convertString(_score); // 악보의 멜로디에서 #이 붙은 음을 다른 문자로 변환합니다.\n\n // 재생된 멜로디를 구합니다.\n // 각 음이 1분에 1개씩 재생되므로, repeat() 메서드를 사용하여 재생시간을 악보의 길이로 나눈 몫 만큼 반복합니다.\n // slice() 메서드로 재생시간을 넘어가는 멜로디는 제외합니다.\n const playScore = score.repeat(Math.ceil(duration / score.length)).slice(0, duration);\n if (playScore.includes(listenSound)) { // 들은 멜로디가 재생된 멜로디에 포함되어 있다면 map에 저장한다.\n map.set(title, {score, playScore});\n }\n }\n \n // 조건에 일치하는 음악이 여러개인 경우 재생된 시간이 제일 길고 먼저 입력된 음악 제목을 반환합니다.\n // map 객체는 삽입에 대한 순서를 기억하므로 재생된 시간이 제일 긴 음악부터 내림차순으로 정렬합니다.\n const filter = [...map.keys()].sort((a,b) => map.get(b).playScore.length - map.get(a).playScore.length);\n return filter.length >= 1 ? filter[0] : '(None)'; // 결과가 없다면 '(None)'을 반환하고, 그렇지 않다면 첫 번째 요소를 반환합니다.\n}", + "probId": "17683", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Qxd8IoGaRi1uE89pRilU0", + "author": "codeisneverodd", + "code": "function solution(msg) {\n const outputs = [];\n const dict = ['@', ...Array.from(Array(26), (_, i) => String.fromCharCode(65 + i))];\n let [start, end] = [0, 1];\n\n const doesDictHave = (start, end) => dict.includes(msg.substring(start, end));\n\n const getInput = (start, end) => {\n if (end + 1 > msg.length || !doesDictHave(start, end + 1)) return [start, end];\n return getInput(start, end + 1);\n };\n\n const addToDict = (start, end) => {\n if (doesDictHave(start, end)) return;\n dict.push(msg.substring(start, end));\n };\n\n const addToOutputs = (start, end) => {\n if (!doesDictHave(start, end)) return;\n outputs.push(dict.indexOf(msg.substring(start, end)));\n };\n\n while (start < msg.length) {\n [start, end] = getInput(start, end);\n addToDict(start, end + 1);\n addToOutputs(start, end);\n start = end;\n }\n return outputs;\n}", + "probId": "17684", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "z1cEapQw_vTaWCYmPzbhM", + "author": "ssi02014", + "code": "function solution(msg) {\n const result = [];\n const dict = Array.from({length: 26},(_, i) => String.fromCharCode(65 + i))\n\n // 시간 복잡도 O(N^2)\n const lastWordAndCompression = msg.split(\"\").reduce((acc, cur) => {\n const nextWord = acc + cur;\n const nextWordIdx = dict.indexOf(nextWord);\n const prevWordIdx = dict.indexOf(acc);\n\n if (nextWordIdx !== -1) return acc + cur;\n dict.push(nextWord);\n\n if (prevWordIdx !== -1) result.push(prevWordIdx + 1);\n return cur;\n }, \"\");\n\n result.push(dict.indexOf(lastWordAndCompression) + 1);\n return result;\n}", + "probId": "17684", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9Z-Irf_aJY5hilnChcmkF", + "author": "codeisneverodd", + "code": "function solution(files) {\n var answer = [];\n const numberRegex = /[0-9]+/\n answer = files.sort((a, b) => {\n const [matchA, matchB] = [a.match(numberRegex), b.match(numberRegex)]\n const [headA, headB] = [a.slice(0, matchA.index).toLowerCase(), b.slice(0, matchB.index).toLowerCase()]\n const [numberA, numberB] = [parseInt(matchA[0]), parseInt(matchB[0])]\n return headA < headB ? -1 : headA > headB ? 1 : numberA < numberB ? -1 : numberA > numberB ? 1 : 0\n })\n return answer;\n}", + "probId": "17686", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "c92OX1CC72SNkMj5AsE1y", + "author": "minjongbaek", + "code": "function isPrime(number) { // 소수를 판별하는 함수\n if (number < 2) return false;\n for (let i = 2; i * i <= number; i += 1) {\n if (number % i === 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction solution(n, k) {\n // 문제를 얼핏 보면 4가지의 경우를 모두 생각해야할 것 같지만,\n // 결국은 앞이나 뒤에 0이 하나라도 있거나 아예 없는 경우에 소수인지 확인하면 됩니다.\n // 따라서 k진수로 변환 후 0을 기준으로 나누고 각 요소가 소수인지 판별하면 됩니다.\n\n // (n).toString(k) // n을 k진수로 변환합니다.\n // .split('0') // 0을 기준으로 나눕니다.\n // .filter((number) => isPrime(+number)).length // 소수가 아닌 요소를 걸러낸 후에 개수를 셉니다.\n return (n).toString(k).split('0').filter((number) => isPrime(+number)).length;\n}", + "probId": "92335", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "27x71P9qSjKl6H067BaL5", + "author": "jaewon1676", + "code": "function solution (n, left, right) {\n const answer = [];\n \n for (let i=left; i <= right; i++) { // left부터 right까지를 구한다.\n let row = parseInt(i/n);\t// 행(row)을 구한다.\n let column = i%n;\t// 열(column)을 구한다.\n answer.push(Math.max(row, column) + 1) // 행과 열중 큰 값을 푸시한다.\n }\n return answer\n}", + "probId": "87390", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "pRFDxEW6rpM6_8FS6eh6n", + "author": "codeisneverodd", + "code": "function solution(numbers) {\n var answer = '';\n numbers.sort(sortFunc)\n answer = numbers.join('')\n if (answer[0] === '0') return '0'\n return answer;\n}\n\nconst sortFunc = (a, b) => {\n const compareA = parseInt(a.toString() + b.toString())\n const compareB = parseInt(b.toString() + a.toString())\n return compareB - compareA\n}", + "probId": "42746", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gI-HXKVi3H1H4Rxop37ag", + "author": "createhb21", + "code": "function solution(numbers) {\n let stringNum = \n numbers.map((el) => el + '').sort((a,b) => (b+a) - (a+b));\n \n return stringNum[0] === '0' ? '0' : stringNum.join('');\n}", + "probId": "42746", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9ocRqeQxGL8vljoJt2EKG", + "author": "prove-ability", + "code": "function solution(numbers) {\n return numbers.every(v => v === 0) ? \"0\" : numbers.map(v => v.toString(10)).sort((a,b) => (b+a) - (a+b)).join(\"\");\n}", + "probId": "42746", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7tq89XCXxHf6bAZ3N0QZq", + "author": "codeisneverodd", + "code": "function solution(board) {\n for (let row = 0; row < board.length; row++) {//해당 칸이 0이 아니고 위, 왼쪽 대각선, 왼쪽이 정사각형이면, 정사각형 연장가능\n for (let col = 0; col < board[0].length; col++) {\n if (board[row][col] >= 1 && (!(board[row - 1] === undefined || board[row][col - 1] === undefined)))\n board[row][col] = Math.min(board[row - 1][col], board[row - 1][col - 1], board[row][col - 1]) + 1;\n }\n }\n return Math.max(...board.map((row) => Math.max(...row))) ** 2; //수정된 board 내의 최댓값이 가능한 정사각형의 최대\n}", + "probId": "12905", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "OA4EV_bKkYpVL0WV_mOTj", + "author": "codeisneverodd", + "code": "function solution(places) {\n var answer = [];\n answer = places.map(place => {\n return place.some((row, rowIndex) =>\n row.split('').some((mark, colIndex, rowArr) => {\n if (mark === 'X') return false\n const countPeopleAround = [\n rowArr[colIndex - 1] || '',\n rowArr[colIndex + 1] || '',\n (place[rowIndex - 1] || '')[colIndex],\n (place[rowIndex + 1] || '')[colIndex],\n ].filter(mark => mark === 'P').length\n return (mark === 'P' && countPeopleAround > 0) || (mark === 'O' && countPeopleAround > 1)\n })\n ) ? 0 : 1\n })\n return answer;\n}", + "probId": "81302", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "B2euqt_Oe9uzKkVn_4p2k", + "author": "prove-ability", + "code": "function solution(maps) {\n // BFS 활용\n const row = maps.length - 1, col = maps[0].length - 1;\n \n // 큐 - 시작 위치 y, x, 이동 거리\n const queue = [[0, 0, 1]];\n \n while(queue.length) {\n // 큐 추출\n let [y, x, count] = queue.shift();\n // 상대 팀 진영이라면\n if(y === row && x === col) return count;\n // 동서남북 확인\n for(let i = 0; i < 4; i++) {\n const [dy, dx] = DIRECTION[i];\n // 다음 길 위치\n const nextY = dy + y, nextX = dx + x;\n // 맵 밖으로 나간다면\n if(isOut(nextY, nextX, row, col)) continue;\n // 도착한 곳이 벽이라면\n if(maps[nextY][nextX] === 0) continue;\n // 이미 지난 곳 벽으로 만들어서 다음에 접근 방지\n maps[nextY][nextX] = 0;\n // 다음에 확인해야하는 곳 큐에 추가\n // 갈수 있는 곳이 두 곳이라면 두 곳 추가됨 \n queue.push([nextY, nextX, count + 1]);\n // 처음에 count 를 let 으로 선언하고 ++count 로 작성했을 떄 에러 발생 - 이유는 모르겠음..\n }\n }\n \n return -1;\n}\n\n// 상 우 하 좌\nconst DIRECTION = [[1, 0], [0, 1], [-1, 0], [0, -1]];\n\n// 사용이 가능한 길인지 확인하는 함수\nconst isOut = (nextY, nextX, row, col) => nextY < 0 || nextX < 0 || nextY > row || nextX > col;", + "probId": "1844", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "tFgh55K9T3Fa-uPBaUKle", + "author": "codeisneverodd", + "code": "function solution(p) {\n if (p.length === 0) {\n return p\n } else {\n const sliceIndex = balancedIndex(p)\n const [u, v] = [p.slice(0, sliceIndex + 1), p.slice(sliceIndex + 1)]\n if (isRight(u)) {\n return u + solution(v)\n } else {\n let emptyString = '(' + solution(v) + ')'\n const slicedReversedString = u\n .slice(1, u.length - 1)\n .split('')\n .map(bracket => bracket === '(' ? ')' : '(')\n .join('')\n return emptyString + slicedReversedString\n }\n }\n}\n\nconst isRight = (str) => {\n if (str[0] === ')') return false\n let stack = 0\n for (let i = 0; i < str.length; i++) {\n stack = str[i] === '(' ? stack + 1 : stack - 1\n if (stack < 0) return false\n }\n return stack === 0\n}\nconst balancedIndex = (str) => {\n let count = 0\n for (let i = 0; i < str.length; i++) {\n count = str[i] === '(' ? count + 1 : count - 1\n if (count === 0) return i\n }\n}", + "probId": "60058", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "9A8pSUiT7gTgf5i5_sc4S", + "author": "codeisneverodd", + "code": "function solution(s) {\n let answer = 0;\n let sArr = s.split('')\n if (isRight(sArr.join(''))) answer += 1\n for (let i = 0; i < sArr.length - 1; i++) {\n sArr.push(sArr.shift())\n if (isRight(sArr.join(''))) answer += 1\n }\n return answer;\n}\n\nfunction isRight(str) {\n const bracketOpen = ['[', '{', '('], bracketClose = [']', '}', ')']\n let status = [{open: false, openOrder: []}, {open: false, openOrder: []}, {open: false, openOrder: []}]\n for (let sIndex = 0; sIndex < str.length; sIndex++) {\n for (let bIndex = 0; bIndex < 3; bIndex++) {\n if (str[sIndex] === bracketOpen[bIndex]) {\n status[bIndex].open = true\n status[bIndex].openOrder.push(sIndex)\n }\n if (str[sIndex] === bracketClose[bIndex]) {\n if (status[bIndex].openOrder.length > 0) {\n if (status.filter(check => check.open && check.openOrder[check.openOrder.length - 1] > status[bIndex].openOrder[status[bIndex].openOrder.length - 1]).length > 0)\n return false //먼저 닫혀야 하는 괄호보다 먼저 닫힘\n status[bIndex].openOrder.pop()\n status[bIndex].open = false\n } else {\n return false //열리기 전에 닫힘\n }\n }\n }\n }\n for (let i = 0; i < 3; i++) if (status[i].open) return false //닫히지 않은 괄호가 있음\n return true\n}", + "probId": "76502", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "KrD3_BIcUBFqXxi-vQXC0", + "author": "codeisneverodd", + "code": "function solution(line) {\n const getCrossPoint = ([A, B, E], [C, D, F]) => {\n if (A * D - B * C === 0) return [Infinity, Infinity];\n return [(B * F - E * D) / (A * D - B * C), (E * C - A * F) / (A * D - B * C)];\n }; //문제 설명 최하단 참조\n\n const crossPoints = line.flatMap((lineA, i) =>\n line\n .slice(i + 1)\n .map(lineB => getCrossPoint(lineA, lineB))\n .filter(([x, y]) => Number.isInteger(x) && Number.isInteger(y))\n );\n\n const generateCanvas = crossPoints => {\n const xPoints = [...crossPoints.map(([x, y]) => x)];\n const yPoints = [...crossPoints.map(([x, y]) => y)];\n const [minX, maxX] = [Math.min(...xPoints), Math.max(...xPoints)];\n const [minY, maxY] = [Math.min(...yPoints), Math.max(...yPoints)];\n const xLength = Math.abs(maxX - minX) + 1;\n const yLength = Math.abs(maxY - minY) + 1;\n\n return {\n canvas: Array.from({ length: yLength }, () => Array(xLength).fill('.')),\n draw([x, y], value) {\n this.canvas[Math.abs(y - maxY)][Math.abs(x - minX)] = value;\n },\n print() {\n return this.canvas.map(row => row.join(''));\n },\n };\n };\n\n const canvas = generateCanvas(crossPoints);\n\n crossPoints.forEach(point => {\n canvas.draw(point, '*');\n });\n\n return canvas.print();\n}", + "probId": "87377", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "GmyNKZ1InATO0-mX7t4j5", + "author": "jaewon1676", + "code": "function solution(people, limit) {\n let cnt = 0;\n \n people.sort((a, b) => {return a - b}) // 몸무게 오름차순\n \n while(people.length != 0){ // 무인도에 갖힌 사람이 없어질때까지 반복 \n if (people[0] + people[people.length-1] <= limit){ // 무게가 되면 둘 다 빼주기\n people.pop()\n people.shift()\n } else {\n people.pop() // 무거운사람을 뺴주자\n }\n cnt++;\n }\n return cnt;\n} // 4주차 2번 문제와 유사함", + "probId": "42885", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rnxXpn50bj2uSIZOWgX1b", + "author": "prove-ability", + "code": "function solution(people, limit) {\n let count = 0;\n // 오름차순 정렬\n people.sort((a, b) => a - b);\n \n // people 배열 요소가 있다면?\n while(people.length) {\n \n // 요소 중 가장 큰 수인 마지막 요소를 가져온다\n let sum = people.pop();\n \n // 요소 중 가장 작은 수를 더한다\n sum += people[0]\n \n // 합이 무게제한보다 작거나 같다면 가장 작은 요소 제거\n if(sum <= limit) people.shift();\n \n count++;\n }\n \n return count;\n}", + "probId": "42885", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "GQgbNBSKI2JnPrJpE2HcO", + "author": "iHoHyeon", + "code": "function solution(people, limit) {\n people.sort((a, b) => a - b); // 오름차순 정렬\n\n let cnt = 0; // 구명보트 개수\n\n let front = 0; // 가장 몸무게가 작은 사람의 index\n let last = people.length; // 가장 몸무게가 큰 사람의 index\n\n while (last > front) {\n cnt++;\n\n const now = people.pop();\n last--;\n\n if (now + people[front] <= limit) {\n front++; // shift() 연산의 비효율로 인해 front 사용\n }\n }\n\n return cnt;\n}", + "probId": "42885", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "hU3-XGy5Dh5NouMa-QYII", + "author": "codeisneverodd - 시간복잡도 감소", + "code": "function solution(progresses, speeds) {\n var answer = [];\n const remainDays = progresses.map((prog, index) => Math.ceil((100 - prog) / speeds[index]))\n console.log(remainDays)\n let maxDay = remainDays[0]\n answer.push(0)\n for (let i = 0; i < remainDays.length; i++) {\n if (remainDays[i] <= maxDay) {\n answer[answer.length - 1] += 1\n } else {\n answer.push(1)\n maxDay = remainDays[i]\n }\n }\n return answer;\n}", + "probId": "42586", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "MDAltVc9KeeEZgMIeeet4", + "author": "codeisneverodd", + "code": "function solution(progresses, speeds) {\n var answer = [];\n while (progresses.length > 0) {\n let done = 0\n progresses = progresses.map((prog, index) => prog + speeds[index])\n const length = progresses.length\n for (let i = 0; i < length; i++) {\n if (progresses[0] >= 100) {\n progresses.shift()\n speeds.shift()\n done += 1\n } else {\n break\n }\n }\n if (done > 0) answer.push(done)\n }\n return answer;\n}", + "probId": "42586", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "YQvnq0DpOo94g-ZmlgFfh", + "author": "jaewon1676", + "code": "function solution(progresses, speeds) {\n let answer = [];\n \n while(speeds.length > 0) { \n for(let i=0;i= 100) { \n progresses.shift();\n speeds.shift();\n count++;\n }\n if(count > 0) { // 결과 배열에 넣어주기\n answer.push(count);\n }\n }\n return answer;\n}", + "probId": "42586", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "cvP9QQXeqFnvI8xgnwUQl", + "author": "createhb21", + "code": "function solution(progresses, speeds) {\n // answer은 각 배포 때 함께 배포되는 기능의 수를 담은 배열\n var answer = [];\n // 각각의 기능이 몇 일 소요되는지 담은 큐\n let queue = [];\n \n for (let i = 0; i < speeds.length; i++) {\n // 각각의 기능이 몇 일 걸리는지 계산\n let task = Math.ceil((100 - progresses[i]) / speeds[i]);\n // 위 계산한 결과값(작업일)을 모두 큐에 넣어준다.\n queue.push(task);\n \n // 그 다음 작업이 queue[0]보다 작거나 같을 경우, queue.push()\n // 그 다음 작업이 queue[0]보다 클 경우, queue의 사이즈만큼 answer.push(), queue 초기화\n if(task > queue[0]) {\n answer.push(queue.length-1);\n // 큐 초기화\n queue = [task];\n }\n }\n \n answer.push(queue.length);\n return answer;\n }", + "probId": "42586", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rAFFsDtNjHyvISgoZJAo-", + "author": "chaerin-dev", + "code": "function solution(progresses, speeds) {\n // 각 기능 개발 작업이 끝나기까지 남은 일수를 계산해서 daysLeftArr 배열에 저장\n const daysLeftArr = progresses.map((progress, i) => Math.ceil((100 - progress) / speeds[i]));\n\n // 최초 배포날은 daysLeftArr의 첫 번째 요소\n let deployDay = daysLeftArr[0];\n // 각 배포에 몇 개의 기능이 배포될지 셀 변수\n let cnt = 0;\n // 각 배포에 몇 개의 기능이 배포될지 저장할 배열\n const answer = [];\n\n // leftDays 배열을 차례로 순회하며 현재 배포일보다 이후에 배포되어야할 기능을 만나면 이전까지의 기능을 한번에 배포\n daysLeftArr.forEach((daysLeft) => {\n if (deployDay < daysLeft) {\n deployDay = daysLeft;\n answer.push(cnt);\n cnt = 0;\n }\n cnt++;\n });\n answer.push(cnt);\n\n // 정답 반환\n return answer;\n}", + "probId": "42586", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "5egs3UUVQZKQu_4u4UAok", + "author": "RyanDeclan", + "code": "// 예제1) 입력값 : [93, 30, 55], [1, 30, 5]\nfunction solution(progresses, speeds) {\n // 각각의 progress 의 기존 인덱스와 해당 기능의 작업한 n일을 포함하는 배열\n let countBox = [];\n let completeBox = [];\n for(k=1; k<100; k++){\n let complete = []\n for(i=0; i= 100){\n complete.push([i,k]);\n progresses.splice(i,1,\"end\")\n } \n }\n if(complete[0] != null)completeBox.push(...complete)\n } \n completeBox.sort((a,b) => a[0] - b[0])\n \n //여기까지 한다면 console.log(completeBox) \t[ [ 0, 7 ], [ 1, 3 ], [ 2, 9 ] ] 이런식으로 정리가된다. \n // 첫번째 기능(인덱스 0) 은 7일간 작업후 배포한다. 두 번째 기능(인덱스 1)은 3일간의 작업 후 배포한다. 세 번째 기능 (인덱스2)는 9일간의 작업후 배포한다 \n \n // 인덱스와 작업한 일수가 같이 들어가있는 배열을 가지고 count하는 작업 \n let count = 0;\n completeBox.reduce((acc, cur, i) => {\n if( acc[0] < cur[1] ){ // 현재 순회하는 값(일수)가 기존에 저장된 값(일수)보다 클때 \n if(i) countBox.push(count)\n acc[0] = cur[1];\n count = 0;\n count++\n }else{count++}\n if(completeBox.length == i + 1) countBox.push(count) // 마지막 순회까지 다 돌고나면 count를 box에 담는다. \n return acc\n } ,[0])\n return countBox;\n}", + "probId": "42586", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "I_BeTPeqYJu7WrkmGpgOY", + "author": "codeisneverodd", + "code": "function solution(bridge_length, weight, truck_weights) {\n const bridge = new Array(bridge_length).fill(0)\n let tick = 0\n do {\n tick++\n bridge.pop()\n bridge.reduce((a, b) => a + b) + truck_weights[0] <= weight ?\n bridge.unshift(truck_weights.shift()) : bridge.unshift(0)\n } while (bridge.reduce((a, b) => a + b) !== 0)\n return tick;\n}", + "probId": "42583", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-cHOpUytMAnEUFlNx9D78", + "author": "jaewon1676", + "code": "function solution(bridge_length, weight, truck_weights) {\n var answer = 0; // 총 걸리는 시간\n let bridge = []; // 다리를 건너는 트럭\n let bridge_weight = 0; // 다리를 건너는 트럭의 총 무게\n \n while (truck_weights.length > 0) { // 대기 트럭이 없을때까지 반복한다.\n answer++; // 1초 추가\n if (bridge.length == bridge_length) { // 다리가 가득 차있으면 제일 먼저 들어간 트럭을 뺴준다.\n bridge_weight -= bridge.shift();\n }\n if (bridge_weight + truck_weights[0] > weight) { \n bridge.push(0);\n continue;\n }\n let truck_weight = truck_weights.shift();\n bridge.push(truck_weight);\n bridge_weight += truck_weight;\n }\n \n answer += bridge_length;\n \n return answer;\n }", + "probId": "42583", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "WOEHE3aeD1nT7kWkRw_ng", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = 0;\n let find = false\n const nCountOne = countOne(n.toString(2))\n let counter = 1\n while (!find) {\n if (nCountOne === countOne((n + counter).toString(2))) {\n answer = n + counter\n find = true\n }\n counter++\n }\n return answer;\n}\n\nconst countOne = (str) => {\n return str.split('').reduce((sum, currentChar) =>\n currentChar === '1' ? sum += 1 : sum, 0)\n}", + "probId": "12911", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "a3oIfmg9mz5ioPQMr21vu", + "author": "prove-ability", + "code": "function solution(n) {\n let i = n;\n n = n.toString(2).match(/1/g).length;\n while(true) {\n i++;\n const value = i.toString(2).match(/1/g).length;\n if(n === value) return i;\n }\n}", + "probId": "12911", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "l95ho5Jwir614tOg5zY0m", + "author": "dia", + "code": "function solution(n) {\n const count = (num) => num.toString(2).match(/1/g).length;\n for(i=(n+1); i< 1_000_000; i++) if(count(n) == count(i)) return i\n}", + "probId": "12911", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Hw4Uvj4iiYalJiSxgHjUR", + "author": "codeisneverodd", + "code": "function solution(queue1, queue2) {\n const getSum = arr => arr.reduce((a, c) => a + c, 0);\n\n if (getSum([...queue1, ...queue2]) % 2 !== 0) return -1;\n\n const queue = [...queue1, ...queue2, ...queue1, ...queue2];\n const maxCount = queue.length;\n const average = getSum(queue) / 4;\n let [currentSum, count, start, end] = [getSum(queue1), 0, 0, queue1.length];\n\n const pop = () => {\n currentSum -= queue[start];\n start += 1;\n count += 1;\n };\n const insert = () => {\n currentSum += queue[end];\n end += 1;\n count += 1;\n };\n\n while (count <= maxCount) {\n if (currentSum < average) insert();\n if (currentSum > average) pop();\n if (currentSum === average) return count;\n }\n return -1;\n}", + "probId": "118667", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "fTOq7pYYB9bscgn2zupAh", + "author": "jaewon1676", + "code": "function solution(land) {\n var answer = 0;\n \n for (i = 1; i < land.length; i++){\n land[i][0] += (Math.max(land[i-1][1], land[i-1][2], land[i-1][3]));\n land[i][1] += (Math.max(land[i-1][0], land[i-1][2], land[i-1][3]));\n land[i][2] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][3]));\n land[i][3] += (Math.max(land[i-1][0], land[i-1][1], land[i-1][2]))\n }\n answer = land[land.length - 1]\n return Math.max(...answer)\n}\n/* 풀이 과정\n1. land의 행만큼 반복문을 돌린다.\n2. i행(두번째 행)부터 land.length - 1행(마지막 행)까지 본인 열을 제외한 나머지 열의 최댓값을 본인의 열에 더하여 누적한다.\n3. 마지막까지 다 구하면 마지막 행에서 최대값을 반환한다.*/", + "probId": "12913", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "HPyYrHXIrMycrG0bq4EQD", + "author": "codeisneverodd", + "code": "function solution(land) {\n for (let rowIndex = 1; rowIndex < land.length; rowIndex++) {\n for (let colIndex = 0; colIndex < land[0].length; colIndex++) {\n land[rowIndex][colIndex] += Math.max(...land[rowIndex - 1].slice(0, colIndex), ...land[rowIndex - 1].slice(colIndex + 1))\n }\n }\n return Math.max(...land[land.length - 1])\n}", + "probId": "12913", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ZZz7GQgS64dtdd3u9DJyV", + "author": "codeisneverodd", + "code": "function solution(n) {\n if (n < 2) return 1;\n const count = [0, 1, 2, ...Array(n - 2).fill(0)];\n count.forEach((_, i) => {\n if (i > 2) count[i] = (count[i - 2] + count[i - 1]) % 1234567;\n });\n return count[n];\n}\n//재귀를 사용하면 콜스택 오버플로우가 발생합니다.", + "probId": "12914", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Wu7paTcG7YzIMjk1uBSP7", + "author": "codeisneverodd", + "code": "function solution(w, h) {\n var answer = 1;\n const gcd = greatestCommonDivisor2(w, h)\n const erasedBoxInUnit = h / gcd + w / gcd - 1\n answer = w * h - erasedBoxInUnit * gcd\n return answer;\n}\n\nlet greatestCommonDivisor2 = (a, b) => {\n while (b > 0) {\n let r = a % b;\n a = b;\n b = r;\n }\n return a;\n}", + "probId": "62048", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rn6KK1xRT0IxHWmnGvOY4", + "author": "jaewon1676", + "code": "// 유클리드 호제법을 이용한 최대 공약수 구하기\nfunction gcd(w, h) { \n let mod = w % h; // w와 h의 나머지를 구합니다.\n\n if (mod === 0) { // 나머지가 0일 경우 h를 반환합니다.\n return h;\n }\n // 만약 0이 아닐경우 w에 h를 넣고 h에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다.\n return gcd(h, mod);\n}\nfunction solution(w, h) {\n const gcdVal = gcd(w, h); // 최대 공약수를 구해줍니다.\n return w * h - (w + h - gcdVal);\n}", + "probId": "62048", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "sj4JCFVuhirDTa3u5lH4y", + "author": "yongchanson", + "code": "function solution(w,h){\n const slope = h / w;\n let cnt = 0;\n //대각선 아래에 위치한 도형의 개수를 구합니다.\n //대각선과 만나는 도형을 포함하기 위해 ceil을 사용합니다.\n for(let i = 1; i <= w; i++){\n cnt += Math.ceil(slope * i);\n }\n //대각선 위에 위치한 도형의 개수 * 2을 리턴합니다.\n return ((w*h - cnt) * 2);\n}", + "probId": "62048", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "sDZT5JV-1nxnQsPC7kAoX", + "author": "codeisneverodd", + "code": "function solution(orders, course) {\n var answer = [];\n for (const selectNum of course) {\n let combinations = []\n for (const order of orders) {\n getCombinations(Array.from(order), selectNum)\n .map(combination => combination.sort().join(''))// 'WX'는 'XW'와 같아야한다.\n .forEach(combString => combinations.push(combString))\n }\n const combCounts = combinations.reduce((counts, combination) => {\n counts[combination] = (counts[combination] || 0) + 1;\n return counts;\n }, {});\n let maxCount = 0, maxComb = []\n for (const comb in combCounts) if (combCounts[comb] >= maxCount) maxCount = combCounts[comb]\n for (const comb in combCounts) if (combCounts[comb] === maxCount && maxCount >= 2) maxComb.push(comb)\n answer.push(...maxComb)\n }\n answer = answer.sort()\n return answer;\n}\n\nconst getCombinations = (array, selectNum) => {\n const result = [];\n if (selectNum === 1) return array.map((element) => [element]);\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNum - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}", + "probId": "72411", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "7irtNw9hvAlaZPb_MDTcj", + "author": "codeisneverodd", + "code": "function solution(word) {\n const alphabetRank = { A: 0, E: 1, I: 2, O: 3, U: 4 };\n const price = calculatePrice([1], 5);\n return word\n .split(\"\")\n .map((alphabet, index) => 1 + price[index] * alphabetRank[alphabet])\n .reduce((acc, curr) => acc + curr, 0);\n}\nconst calculatePrice = (result = [1], targetLength) => {\n if (result.length === targetLength) return result;\n return calculatePrice([result[0] * 5 + 1, ...result], targetLength);\n};\n/*\n각 자리 문자를 바로 다음 문자로 바꾸는 데에 얼마의 비용이 들까?\n4번째 자리 - 1\n3번째 자리 - 1*5 + 1 = 6\n2번째 자리 - 6*5 + 1 = 31\n1번째 자리 - 31*5 + 1 = 156\n0번째 자리 - 156*5 + 1 = 781\n\n검증(1부터 시작하므로 1 + 비용)\nI => (1 + 781 * 2) = 1563\nEIO => (1 + 781 * 1) + (1 + 156 * 2) + (1 + 31 * 3) = 1189\nAAAE => 1 + 1 + 1 + (1 + 6 * 1) = 10\nAAAAE => 1 + 1 + 1 + 1 + (1 + 1*1) = 6\n추천 레퍼런스: https://seongho96.tistory.com/50\n*/", + "probId": "84512", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-5BZuGm5AyC5ZKLKpd7JE", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = 0;\n let lengthArr = []\n for (let i = 1; i <= s.length; i++) lengthArr.push(compressedString(s, i).length)\n answer = Math.min(...lengthArr)\n return answer;\n}\n\nfunction compressedString(str, unitNum) {\n let count = 1\n let result = ['']\n for (let repeat = 0; repeat <= str.length / unitNum; repeat++) {\n const slicedGroup = str.slice(unitNum * repeat, unitNum * repeat + unitNum)\n if (result[result.length - 1] === slicedGroup) {\n count++\n } else {\n if (count > 1) result[result.length - 1] = count + result[result.length - 1]\n result.push(slicedGroup)\n count = 1\n }\n }\n return result.join('')\n}", + "probId": "60057", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "uW25FzfRyHvkJYHKFHBWN", + "author": "chaerin-dev", + "code": "function solution(s) {\n // len: 압축 전 문자열 길이\n const len = s.length;\n // shortenLen: 압축 후 문자열 길이의 최솟값을 저장할 변수(압축 전 문자열 길이로 초기화)\n let shortenLen = len;\n\n // 문자열을 1개 단위, 2개 단위, ... 문자열 길이의 절반 단위로 잘라가며 압축 수행\n for (let i = 1; i <= len / 2; i++) {\n // cnt: 단위가 반복되는 횟수를 카운트할 변수\n let cnt = 1;\n // temp: 현재 단위 문자열을 임시로 저장해둘 변수\n let temp = s.slice(0, i);\n // shhortenS: 압축 후 문자열을 저장할 변수\n let shortenS = \"\";\n\n // 문자열을 i개 단위로 잘라가며 현재 단위 문자열과 일치하는지 판단\n for (let j = i; j < len; j += i) {\n // 현재 단위 문자열과 일치하면 단위가 반복되는 횟수 1 증가\n if (temp === s.slice(j, j + i)) cnt++;\n // 현재 단위 문자열과 일치하지 않으면\n else {\n // 압축 후 문자열에 단위가 반복되는 횟수와 단위를 이어붙이고\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 단위가 반복되는 횟수는 다시 1로 초기화\n cnt = 1;\n // 현재 단위 문자열 업데이트\n temp = s.slice(j, j + i);\n }\n }\n\n // 반복이 끝난 후 마지막으로 고려했던 단위 문자열도 압축 후 문자열에 이어붙여줘야 함\n if (cnt === 1) shortenS += temp;\n else shortenS += cnt + temp;\n\n // 압축 후 문자열 길이의 최솟값 업데이트\n shortenLen = Math.min(shortenLen, shortenS.length);\n }\n\n // 압축 후 문자열 길이의 최솟값 반환\n return shortenLen;\n}", + "probId": "60057", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Z8cmY--tXmTO-zeIET6sc", + "author": "codeisneverodd", + "code": "function solution(dirs) {\n const move = ([x, y], dir) => {\n let next = [x, y];\n if (dir === 'U') next = [x, y + 1];\n if (dir === 'D') next = [x, y - 1];\n if (dir === 'R') next = [x + 1, y];\n if (dir === 'L') next = [x - 1, y];\n if (Math.abs(next[0]) > 5 || Math.abs(next[1]) > 5) return [x, y];\n return next;\n };\n\n const isSameRoute = ([s1, e1], [s2, e2]) => {\n const isSamePoint = ([x1, y1], [x2, y2]) => x1 === x2 && y1 === y2;\n return (isSamePoint(s1, s2) && isSamePoint(e1, e2)) || (isSamePoint(s1, e2) && isSamePoint(s2, e1));\n };\n\n const trace = {\n visited: [],\n visit(start, end) {\n if (start[0] === end[0] && start[1] === end[1]) return;\n if (!this.visited.find(route => isSameRoute(route, [start, end]))) this.visited.push([start, end]);\n },\n };\n\n let current = [0, 0];\n\n dirs.split('').forEach(dir => {\n const next = move(current, dir);\n trace.visit(current, next);\n current = next;\n });\n\n return trace.visited.length;\n}", + "probId": "49994", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Kq1GVFNQc8tCairBbSKlp", + "author": "pereng11", + "code": "// 다익스트라 + 최소힙 O( N * logN ) \n // [목적지, 거리] 노드를 값으로 가지는, 거리에 대한 최소힙 \nclass MinHeap{\n constructor ()\n {\n this.heap = [ null ];\n }\n // 맨 끝에 노드를 삽입 후 위로 올라가면서 정렬\n push ( val )\n {\n this.heap.push(val);\n let childIdx = this.heap.length-1;\n let parentIdx = Math.floor(childIdx / 2);\n while(parentIdx > 0 && this.heap[parentIdx][1] > this.heap[childIdx][1]){\n this.swap( childIdx, parentIdx );\n childIdx = parentIdx;\n parentIdx = Math.floor(childIdx / 2);\n }\n }\n pop ()\n {\n if ( this.heap.length === 1 )\n {\n return undefined;\n }\n // 최소값은 빼두었다가 리턴하고, 가장 끝 값을 맨 위로 가져와 아래로 내려가면서 정렬\n const minNode = this.heap[ 1 ];\n this.heap[ 1 ] = this.heap[ this.heap.length - 1 ];\n this.heap.pop();\n let parentIdx = 1;\n let leftChildIdx = 2;\n let rightChildIdx = 3;\n while ( parentIdx < this.heap.length )\n {\n // 자식이 없는 경우 \n if ( !this.heap[ leftChildIdx ] )\n {\n break;\n } // 왼쪽 자식만 있는 경우\n else if ( !this.heap[ rightChildIdx ] )\n {\n if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] )\n {\n this.swap( parentIdx, leftChildIdx );\n }\n break;\n // 둘 중 하나가 부모보다 작을 때, 더 작은 쪽으로 정렬\n } else if ( this.heap[ parentIdx ][ 1 ] > this.heap[ leftChildIdx ][ 1 ] || this.heap[ parentIdx ][ 1 ] > this.heap[ rightChildIdx ][ 1 ] )\n {\n const minChildIdx = this.heap[ leftChildIdx ][ 1 ] < this.heap[ rightChildIdx ][ 1 ] ? leftChildIdx : rightChildIdx;\n this.swap( parentIdx, minChildIdx );\n parentIdx = minChildIdx;\n leftChildIdx = parentIdx * 2\n rightChildIdx = parentIdx * 2 + 1;\n } else\n {\n // 끝까지 내려가지 않았더라도 부모가 가장 작으면 정렬 중지\n break;\n }\n }\n return minNode;\n }\n swap ( idx1, idx2 )\n {\n [ this.heap[ idx1 ], this.heap[ idx2 ] ] = [ this.heap[ idx2 ], this.heap[ idx1 ] ];\n }\n length ()\n {\n return this.heap.length;\n }\n}\n \nfunction solution ( N, road, K )\n{\n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const visited = new Array( N + 1 ).fill( false ); //방문 확인 배열\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const heap = new MinHeap();\n\n //시작점 삽입\n heap.push( [sp, 0] );\n\n // 가장 가까운 목적지부터 순서대로 방문\n while ( heap.length() > 1 )\n {\n //힙에 저장된 목적지 중 가장 가까운 거리의 목적지를 꺼냄 [목적지, 거리]\n const [ ep, val ] = heap.pop();\n //아직 방문하지 않은 곳만 처리\n if ( !visited[ ep ] )\n {\n //방문처리, 거리 저장\n visited[ ep ] = true;\n dist[ ep ] = val;\n //방문 지점을 거쳐서 가는 다른 목적지 구하기\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n if ( !visited[ nextEp ] ) //아직 방문하지 않은 곳일 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n {\n heap.push( [ nextEp, val + nextVal ] );\n }\n })\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", + "probId": "12978", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "msy-ML-qEtm5CfrdCPenf", + "author": "pereng11 O(N * N);", + "code": "//다익스트라 + 선형탐색\nfunction solution ( N, road, K )\n{ \n const roadsTable = {}; //전체 도로 정보\n \n // 도로 정보 초기화 roadTable[시작점] = [목적지, 거리] 배열\n for ( let i = 1; i <= N; i++ )\n {\n roadsTable[ i ] = [];\n }\n road.forEach( road =>\n {\n let [ sp, ep, dist ] = road;\n roadsTable[ sp ].push( [ ep, dist ] );\n roadsTable[ ep ].push( [ sp, dist ] );\n } );\n\n function djikstra ( sp )\n {\n const dist = new Array( N + 1 ).fill( Infinity ); //목표지점까지 거리\n const queue = [];\n\n queue.push( [sp, 0] );\n\n while ( queue.length > 0 )\n {\n const [ ep, val ] = queue.shift();\n if ( dist[ ep ] > val )\n {\n dist[ ep ] = val;\n const nexts = roadsTable[ ep ];\n if ( nexts )\n {\n nexts.forEach( n =>\n {\n let [ nextEp, nextVal ] = n;\n //거리가 더 줄어드는 경우, '지금까지의 거리 + 현재 위치에서의 거리'로 힙에 삽입\n if ( dist[ nextEp ] > val + nextVal )\n {\n queue.push( [ nextEp, val + nextVal ] );\n }\n } );\n }\n }\n }\n // 거리가 K이하인 지점의 개수 반환\n const result = dist.filter( d => d <= K ).length;\n return result;\n }\n \n const answer = djikstra( 1 );\n return answer;\n}", + "probId": "12978", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "lr1m9SNkA3cP3Kko4poyk", + "author": "minjongbaek", + "code": "// 빛의 이동을 위한 DX, DY 변수를 선언합니다.\nconst DX = [-1, 1, 0, 0];\nconst DY = [0, 0, -1, 1];\n\nfunction solution(grid) {\n\n // DFS에 4방향을 고려하여 문제를 풉니다.\n // 핵심은 이미 방문한 칸이고 방향이 동일하다면 하나의 사이클이 형성된 것으로 생각해야합니다.\n\n const answer = [];\n\n // visited 변수를 선언 후 방문 여부를 확인할 3차원 배열을 할당합니다. [x좌표, y좌표, [하, 상, 좌, 우]]\n const visited = Array.from({ length: grid.length }, () => []).map((v) => {\n for (let i = 0; i < grid[0].length; i += 1) {\n v.push(new Array(4).fill(false));\n }\n return v\n });\n\n for (let x = 0; x < grid.length; x += 1) {\n for (let y = 0; y < grid[0].length; y += 1) {\n for (let d = 0; d < 4; d += 1) {\n // x, y 좌표에 하, 상, 좌, 우 방향으로 방문한 적이 없다면 dfs를 수행합니다.\n if (!visited[x][y][d]) {\n const stack = [];\n stack.push([x, y, d]);\n\n let cnt = 0;\n while (stack.length !== 0) {\n const [currentX, currentY, currentD] = stack.pop();\n if (!visited[currentX][currentY][currentD]) {\n visited[currentX][currentY][currentD] = true;\n cnt += 1;\n\n const [nextX, nextY] = getNextXY(currentX, currentY, currentD, grid.length, grid[0].length); // 다음으로 이동할 좌표를 구합니다.\n const nextD = getNextD(grid[nextX][nextY], currentD) // x, y 칸에 적혀있는 문자열대로 방향을 다음 방향을 구합니다.\n \n stack.push([nextX, nextY, nextD])\n }\n\n }\n answer.push(cnt);\n }\n }\n }\n }\n return answer.sort((a, b) => a - b);\n}\n\n// 다음 행선지를 구하는 함수\nfunction getNextXY(x, y, d, xLength, yLength) {\n x += DX[d];\n y += DY[d];\n\n // x나 y의 값이 유효하지 않은 경우 값을 재할당합니다.\n if (x < 0) x = xLength - 1;\n if (x >= xLength) x = 0;\n if (y < 0) y = yLength - 1;\n if (y >= yLength) y = 0;\n\n return [x, y];\n}\n\n// 현재 방향과 칸에 표시된 문자를 기준으로 다음 행선지의 방향을 구하는 함수\nfunction getNextD(command, d) {\n if (command === 'L') {\n d = [2, 3, 1, 0][d]\n } else if (command === 'R') {\n d = [3, 2, 0, 1][d]\n }\n return d\n}", + "probId": "86052", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "1z-2PinVSvQGSCBO6kbcX", + "author": "codeisneverodd", + "code": "function solution(n) {\n const snail = Array.from(Array(n), (_, index) => Array(index + 1));\n let currentNum = 0;\n let [currentRow, currentCol] = [-1, 0];\n let shouldMove = n;\n while (shouldMove > 0) {\n for (let i = 0; i < shouldMove; i++)\n snail[++currentRow][currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 1; i++)\n snail[currentRow][++currentCol] = ++currentNum;\n for (let i = 0; i < shouldMove - 2; i++)\n snail[--currentRow][--currentCol] = ++currentNum;\n shouldMove -= 3;\n }\n return snail.flatMap((num) => num);\n}", + "probId": "68645", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "r_27wlpTxUvAtFpPJ1Muf", + "author": "jaewon1676", + "code": "function solution(n) {\n const answer = new Array(n).fill().map((e, i) => new Array(i + 1));\n // 이차원배열을 만들어준다\n \n let count = 0;\n let x = -1; // 행 , 0행 0열부터 시작해주기 위해 x는 -1 해줍니다.\n let y = 0; // 열 \n while (n > 0) {\n for (let i = 0; i < n; i++) answer[++x][y] = ++count; // 아래로 이동합니다.\n for (let i = 0; i < n - 1; i++) answer[x][++y] = ++count; // 오른쪽으로 이동합니다.\n for (let i = 0; i < n - 2; i++) answer[--x][--y] = ++count; // 대각선 오른쪽 위로 이동합니다.\n \n n -= 3;\n }\n return answer.flatMap(e => e);\n // flatMap은 이차원의 여러 배열을 하나의 배열로 묶어줍니다. \n // ex [ [ 1 ], [ 2, 9 ], [ 3, 10, 8 ], [ 4, 5, 6, 7 ] ] \n // => [1, 2, 9, 3, 10, 8, 4, 5, 6, 7]\n}", + "probId": "68645", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "lVgctjAf-exC5vJPEUJbT", + "author": "codeisneverodd", + "code": "function solution(expression) {\n var answer = 0;\n const mathExp = ['*', '+', '-']\n let priorityArr = Permutation(mathExp, 3)\n const calculated = []\n for (const priority of priorityArr) {\n const expressionArr = expression.split(/(\\D)/)\n for (const exp of priority) {\n while (expressionArr.includes(exp)) {\n const index = expressionArr.indexOf(exp)\n expressionArr.splice(index - 1, 3, eval(expressionArr.slice(index - 1, index + 2).join('')))\n }\n }\n calculated.push(Math.abs(expressionArr[0]))\n }\n answer = Math.max(...calculated)\n return answer\n}\n\nfunction Permutation(arr, r) {\n const result = []\n if (r === 1) return arr.map((num) => [num])\n arr.forEach((fixed, index, org) => {\n const rest = [...org.slice(0, index), ...org.slice(index + 1)]\n const permutation = Permutation(rest, r - 1)\n const attached = permutation.map((numbers) => [fixed, ...numbers])\n result.push(...attached)\n })\n return result\n}", + "probId": "67257", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "rWHtuGCQ8Bi-ns1CkKnGB", + "author": "codeisneverodd", + "code": "function solution(infos, queries) {\n const infoData = {};\n\n const fetchInfoData = (keyArr, score, start) => {\n const key = keyArr.join('');\n\n infoData[key] ? infoData[key].push(score) : (infoData[key] = [score]);\n\n for (let i = start; i < keyArr.length; i++) {\n fetchInfoData(\n keyArr.map((v, index) => (index === i ? '-' : v)),\n score,\n i + 1\n );\n }\n };\n\n const getPassCount = (key, passScore) => {\n const scores = infoData[key];\n\n if (!scores) return 0;\n\n let [left, right] = [0, scores.length];\n\n while (left < right) {\n const mid = Math.floor((left + right) / 2);\n scores[mid] >= passScore ? (right = mid) : (left = mid + 1);\n }\n\n return scores.length - left;\n };\n\n infos\n .map(info => [info.split(' ').slice(0, 4), info.split(' ')[4]])\n .forEach(([keyArr, score]) => fetchInfoData(keyArr, +score, 0));\n\n Object.keys(infoData).forEach(key => {\n infoData[key].sort((a, b) => a - b);\n });\n\n return queries\n .map(query => query.replace(/ and /g, '').split(' '))\n .map(([key, passScore]) => getPassCount(key, +passScore));\n}\n// 주의 할 점\n// 1. 중첩 구조에 있는 객체를 수정할 때 새로운 객체를 만들어 재할당하면 효율성에 걸림\n// 2. 고차함수 중첩하면 새로운 객체를 만드는 행위가 너무 많음으로 효율성에 걸림.\n// 3. filter 대신 정렬 후 이진 탐색을 활용해야 효율성에 걸리지 않음.", + "probId": "72412", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ADsyb_WjuSSyUyZN5m2ms", + "author": "iHoHyeon", + "code": "function solution(begin, end) {\n return new Array(end - begin + 1).fill(null).map((v, idx) => calc(begin + idx));\n // begin ~ end 각 위치에 대해서 calc 함수의 return 값으로 채운다.\n}\n \nconst calc = (number) => {\n if (number === 1) return 0;\n // 1번째 위치는 무조건 0블록이 위치\n\n for (let i = 2; i <= Math.sqrt(number); i++) {\n if (number % i === 0 && number / i <= 10_000_000) return number / i;\n // 10_000_000번 블록까지만 놓았으므로 숫자를 초과하는 경우는 제외\n }\n\n return 1;\n};\n\n/*\n 1번 블록부터 10_000_000번 블록까지 전부 규칙에 따라서 놓는 경우는\n 시간 / 공간 복잡도가 급상승\n\n -> 따라서 각 위치에 어떤 숫자의 블록이 놓일지를 계산해주자\n \n -> n번째 위치에는 1, n을 제외한 n의 가장 큰 약수의 블록이 놓이게 된다.\n\n -> 가장 큰 약수는 n / (n의 가장 작은 약수)임을 이용해서 계산해주면 된다.\n\n + 가장 큰 약수가 1인 경우는 소수인 경우이고 숫자 1 블록이 놓인다.\n*/", + "probId": "12923", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "epYEmCvF69vISKQQao27r", + "author": "codeisneverodd", + "code": "function solution(n) { //수학적 풀이는 별도로 하지 않았습니다.\n var answer = 0;\n for (let i = 1; i <= n; i++) {\n let sum = 0\n for (let j = i; j <= n; j++) {\n sum += j\n if (sum >= n) {\n if (sum === n) answer++\n break\n }\n }\n }\n return answer;\n}", + "probId": "12924", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "P-SWSqmBiDEVa1fxk6yWa", + "author": "prove-ability", + "code": "function solution(n) {\n let answer = 0;\n for(let i = 1; i <= n; i++) {\n let sum = 0;\n for(let j = i; j <= n; j++) {\n sum += j;\n if(sum > n) break;\n if(n === sum) {\n answer++;\n break;\n }\n }\n }\n return answer;\n}", + "probId": "12924", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "56IM1kIWG8vovFb8FvlKD", + "author": "yongchanson", + "code": "function solution(n) {\n /*\n 정답 = n의 홀수 약수의 개수\n 15의 홀수 약수 : 1,3,5,15\n 1+2+3+4+5=15 (중간값 3)\n 4+5+6=15 (중간값 5)\n 7+8=15 (연속된 값)\n 15=15 (15)\n */\n let result = 0;\n\n for (let i = 1; i <= n; i++) {\n if (n % i == 0 && i % 2 == 1) result++;\n }\n return result;\n}", + "probId": "12924", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "8igzK_8Vg_mn3wJvxre2g", + "author": "codeisneverodd", + "code": "function solution(skill, skill_trees) {\n var answer = 0;\n for (const tree of skill_trees) {\n let check = Array.from(tree).filter(x => skill.includes(x)).map(x => skill.indexOf(x))\n if (checkOrder(check)) answer += 1\n }\n return answer;\n}\n\nfunction checkOrder(checkArr) {\n for (let i = 0; i < checkArr.length; i++) if (checkArr[i] !== i) return false\n return true\n}", + "probId": "49993", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "_Y9o25wC8QdSGtoAs53PM", + "author": "codeisneverodd", + "code": "// 문제 풀이 전략\n// 1. 라이언이 쏠 수 있는 모든 경우를 비교한다.\n// 2. 10점부터 0점 순으로 어피치와 라이언을 비교해 가면서, 라이언이 해당 점수를 이길지, 비길지, 질지를 결정하며 가능한 경우를 만들어 간다.\n// 3. 이기는 경우는 화살을 어피치 + 1 개, 비기는 경우는 어피치와 동일한 개수를 소모하고, 지는 경우는 화살을 쏘지 않는다.\n// 4. 단, 0점에 도달하기 전에 화살을 모두 소진하면 더이상 쏠 화살이 없으므로 나머지 점수는 쏘지 않은 것으로 한다. 마찬가지로 0점에 도달하였는데 화살이 남아있더라면, 남은 화살을 모두 0점에 쏜다.\n// 5. 따라서 [지금까지 화살을 쏜 상황, 현재 검사중인 점수, 남은 화살 수]를 파라미터로 갖는 재귀함수를 구현하면 모든 경우를 검사할 수 있다.\n// 6. 모든 경우가 구해졌다면, 어피치와 라이언의 점수차가 가장 큰 경우들만 남긴다\n// 7. 가장 큰 경우들이 여러개라면 각 경우들을 중 마지막으로 쏜 화살의 점수 배점이 낮은 경우를 우선적으로 정렬한다.\n// RETURN. 정렬이 완료되면 가장 우선순위가 높은 경우를 반환한다.\nfunction solution(possibleArrows, apeachComb) {\n const compareTable = apeachComb.map(apeachArrow => ({\n apeachArrow,\n ryanArrow: 0,\n }));\n const possibleRyanTable = getPossibleRyanTable(compareTable, 0, possibleArrows);\n const maxScoreDiff = Math.max(...possibleRyanTable.flatMap(({ scoreDiff }) => scoreDiff));\n const maxRyanTables = possibleRyanTable.filter(({ scoreDiff }) => scoreDiff === maxScoreDiff);\n if (maxScoreDiff <= 0) return [-1];\n const getIndexOfLastArrow = arrowTable =>\n arrowTable.length -\n arrowTable\n .slice()\n .reverse()\n .findIndex(x => x !== 0);\n return maxRyanTables.sort((a, b) => getIndexOfLastArrow(b.ryanTable) - getIndexOfLastArrow(a.ryanTable))[0].ryanTable;\n}\nfunction getPossibleRyanTable(compareTable, currentIndex, numberOfArrowLeft) {\n const { apeachArrow } = compareTable[currentIndex];\n const lastIndex = compareTable.length - 1;\n const possibleRyanArrows = [\n 0,\n numberOfArrowLeft > apeachArrow && apeachArrow + 1,\n numberOfArrowLeft >= apeachArrow && apeachArrow,\n ];\n\n if (currentIndex === lastIndex || numberOfArrowLeft === 0) {\n if (numberOfArrowLeft > 0) {\n compareTable[compareTable.length - 1] = {\n apeachArrow,\n ryanArrow: numberOfArrowLeft,\n };\n }\n const appeachScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) =>\n apeachArrow >= ryanArrow && apeachArrow !== 0 ? acc + 10 - index : acc,\n 0\n );\n const ryanScore = compareTable.reduce(\n (acc, { apeachArrow, ryanArrow }, index) => (ryanArrow > apeachArrow ? acc + 10 - index : acc),\n 0\n );\n return [\n {\n scoreDiff: ryanScore - appeachScore,\n ryanTable: compareTable.flatMap(({ ryanArrow }) => ryanArrow),\n },\n ];\n }\n return [\n ...possibleRyanArrows.flatMap(ryanUsedArrow => {\n const nextCompareTable = [...compareTable];\n nextCompareTable.splice(currentIndex, 1, {\n apeachArrow,\n ryanArrow: ryanUsedArrow,\n });\n return getPossibleRyanTable(nextCompareTable, currentIndex + 1, numberOfArrowLeft - ryanUsedArrow);\n }),\n ];\n}", + "probId": "92342", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "vXqqWwDddeHUK1og0nBmR", + "author": "codeisneverodd", + "code": "function solution(n, words) {\n var answer = [];\n let turn = 1\n for (let i = 1; i < words.length; i++) {\n let pass = (words[i][0] === words[i - 1][words[i - 1].length - 1]) && !(words.slice(0, i).includes(words[i]))\n if (i % n === 0) turn++\n if (!pass) return [i % n + 1, turn]\n }\n return [0, 0];\n}", + "probId": "12981", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "oejp1FMB4gLCyabKsl2QQ", + "author": "codeisneverodd", + "code": "function solution(n, a, b) {\n let currentRound = 1;\n const myNextNumber = (num) => Math.floor((num + 1) / 2)//내가 이긴경우 다음으로 가지게 될 번호\n while (a !== b) { // a의 다음 번호가 b의 다음번호와 같아지면 끝난다.\n if (myNextNumber(a) === myNextNumber(b)) break\n a = myNextNumber(a)\n b = myNextNumber(b)\n currentRound++\n }\n return currentRound\n}", + "probId": "12985", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "1qQBLwDgkV8i1jHbXrqgo", + "author": "le2sky", + "code": "function solution(n, a, b) {\n let arr = Array.from({ length: n }, () => 0)\n arr[b - 1] = \"B\"\n arr[a - 1] = \"A\"\n\n const isDiff = () => {\n return (\n (arr.indexOf(\"A\") + 1 > arr.length / 2 && arr.indexOf(\"B\") + 1 <= arr.length / 2) ||\n (arr.indexOf(\"A\") + 1 <= arr.length / 2 && arr.indexOf(\"B\") + 1 > arr.length / 2)) ? true : false\n };\n const isLeft = () => {\n return (arr.indexOf(\"A\") + 1 > arr.length / 2) ? false : true\n };\n\n //대진표의 절반을 기준으로 양옆에 A와 B가 있을 경우 log2N을 구하면 라운드 수가 나옴\n while (!isDiff()) {\n if (isLeft()) {\n arr.splice(arr.length / 2)\n } else {\n arr.splice(0, arr.length / 2)\n }\n }\n return Math.log2(arr.length)\n}", + "probId": "12985", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "WqmL2Na4bYUXvbpas_beg", + "author": "codeisneverodd", + "code": "function solution(record) {\n var answer = [];\n const users = {}\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action !== 'Leave') users[id] = name\n })\n record.map(history => {\n const [action, id, name] = history.split(' ')\n if (action === 'Enter') answer.push(`${users[id]}님이 들어왔습니다.`)\n if (action === 'Leave') answer.push(`${users[id]}님이 나갔습니다.`)\n })\n return answer;\n}", + "probId": "42888", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "L4ouXXaVgcMhVlgbrHcAW", + "author": "jaewon1676", + "code": "function solution(record) {\n let answer = [];\n const map = new Map();\n \n for (let i = 0; i < record.length; ++i) {\n const [state, uid, name] = record[i].split(' '); \n\n if (state == 'Leave') {\n answer.push([uid, '님이 나갔습니다.']);\n \n continue;\n }\n \n if (state == 'Enter') {\n answer.push([uid, '님이 들어왔습니다.']);\n }\n map.set(uid, name);\n }\n return answer.map(ele => map.get(ele[0]) + ele[1]);\n}", + "probId": "42888", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ukiGWrvIwF3CSE8NsZGZf", + "author": "chaerin-dev", + "code": "function solution(record) {\n // 최종 메시지를 저장할 배열\n let result = [];\n // 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열\n let resultId = [];\n // 유저의 아이디: 닉네임 쌍을 저장할 Map\n let idNameMap = new Map();\n\n // record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환\n record = record.map((e) => e.split(\" \"));\n\n // record의 각 요소에 대해\n record.forEach((e) => {\n // 각 요소의 첫 번째 요소(Enter/Leave/Change)가\n switch (e[0]) {\n // Enter이면\n case \"Enter\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 들어왔습니다.\");\n // idNameMap Map에 유저의 아이디: 닉네임 쌍 저장\n idNameMap.set(e[1], e[2]);\n break;\n // Leave이면\n case \"Leave\":\n // resultID 배열에 들어온 유저의 아이디 저장\n resultId.push(e[1]);\n // result 배열에 닉네임을 제외하고 표시될 메시지 저장\n result.push(\"님이 나갔습니다.\");\n break;\n // Change이면\n case \"Change\":\n // idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경\n idNameMap.set(e[1], e[2]);\n break;\n }\n });\n\n // resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환\n return result.map((e, i) => idNameMap.get(resultId[i]) + e);\n}", + "probId": "42888", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-nrwIjEg7lUKSi4DaTTEY", + "author": "codeisneverodd", + "code": "function solution(s) {\n let opened = 0;\n for (const bracket of s) {\n if (bracket === \"(\") opened += 1;\n if (bracket === \")\") opened -= 1;\n if (opened < 0) return false;\n }\n return opened === 0;\n}", + "probId": "12909", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "CI2BZYf06lWIw_JFexsaq", + "author": "codeisneverodd", + "code": "function solution(clothes) {\n\tvar answer = 0;\n\tconst spyWear = {};\n\tfor (const clothNPart of clothes) {\n\t\tif (spyWear[clothNPart[1]] === undefined) spyWear[clothNPart[1]] = [];\n\t\tspyWear[clothNPart[1]].push(clothNPart[0]);\n\t}\n\tconst clothesCount = [];\n\tfor (const part in spyWear) clothesCount.push(spyWear[part].length + 1);\n\tanswer =\n\t\tclothesCount.reduce((previous, current) => previous * current, 1) - 1;\n\treturn answer;\n}", + "probId": "42578", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "39IUEp57bhrqiS-t-iI-D", + "author": "hyosung", + "code": "function solution(clothes) {\n\tlet answer = 1;\n\t// 옷 종류\n\tconst types = {};\n\t// 반복문 최적화 - length, 비교연산 제거\n\tconst length = clothes.length;\n\tfor (let i = length; i--; ) {\n\t\t// 해당 옷의 종류가 없다면 종류 1\n\t\tif (!types[clothes[i][1]]) types[clothes[i][1]] = 1;\n\t\t// 해당 옷의 종류가 있다면 종류 증가\n\t\telse types[clothes[i][1]] += 1;\n\t}\n\t// (종류 별 값 + 1 ) 을 다 곱셈\n\tObject.values(types).forEach((v) => {\n\t\tanswer *= v + 1;\n\t});\n\n\treturn answer - 1;\n}", + "probId": "42578", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "DSBtX18gKMNaJrGch8gX7", + "author": "jaewon1676", + "code": "function solution(clothes) {\n var answer = 1;\n var obj={};\n for(var i=0;i\n clothsObj[cloth[1]] ? clothsObj[cloth[1]]++ : (clothsObj[cloth[1]] = 1)\n );\n\n // 어떤 카테고리의 옷의 개수가 n개라면, 스파이는 해당 카테고리에 대해 n+1가지 선택권을 가짐\n // (옷을 입지 않거나, 1번 옷을 입거나, 2번 옷을 입거나, ..., n번 옷을 입거나)\n // 즉, (각 카테고리의 옷의 개수 + 1)를 answer에 차례로 곱해주면 됨\n let answer = 1;\n for (let key of Object.keys(clothsObj)) {\n answer *= clothsObj[key] + 1;\n }\n\n // 스파이는 하루에 최소 한 개의 의상은 입어야 하므로 아무것도 입지 않는 경우 빼기\n return answer - 1;\n}", + "probId": "42578", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "HsabCQxkazjk8-nxkXZLR", + "author": "codeisneverodd", + "code": "function solution(s) {\n const removeZero = s => {\n const removed = s\n .split('')\n .filter(n => n !== '0')\n .join('');\n return { removed, count: s.length - removed.length };\n };\n\n const convertToBinary = (s, turnCount, removedCount) => {\n if (s === '1') return [turnCount, removedCount];\n const { removed, count } = removeZero(s);\n return convertToBinary(removed.length.toString(2), turnCount + 1, removedCount + count);\n };\n\n return convertToBinary(s, 0, 0);\n}", + "probId": "70129", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "3DQJbbkh30kukb_u8-iUt", + "author": "RyanDeclan", + "code": "function solution(s) {\n let box = [0,0]\n while(s.length > 1){\n let reamain = s.replace(/0/g,\"\").length\n box[0] += 1\n box[1] += (s.length - reamain)\n s = reamain.toString(2)\n }\n return box;\n}", + "probId": "70129", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "CAQQEDkBb3To_C9jvFqs_", + "author": "codeisneverodd", + "code": "function solution(n, wires) {\n const hasOneOfWire = (tree, [a, b]) => tree.includes(a) || tree.includes(b);\n\n const convertWiresToTree = wires => [...new Set(wires.flat())];\n\n const generateTree = (wires, tree) => {\n if (!wires.find(wire => hasOneOfWire(tree, wire))) return tree;\n\n const nextWires = wires.filter(wire => !hasOneOfWire(tree, wire));\n const nextTree = [...tree, ...convertWiresToTree(wires.filter(wire => hasOneOfWire(tree, wire)))];\n\n return [...new Set(generateTree(nextWires, nextTree))];\n };\n\n let minDiff = Infinity;\n const length = convertWiresToTree(wires).length;\n\n wires.forEach((_, i) => {\n const [initWire, ...remainWires] = wires.filter((_, j) => j !== i);\n const lengthA = generateTree(remainWires, convertWiresToTree([initWire])).length;\n const diff = Math.abs(lengthA - (length - lengthA));\n minDiff = Math.min(diff, minDiff);\n });\n\n return minDiff;\n}", + "probId": "86971", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "J3oOt_BhD7UCkxSbXOpzE", + "author": "codeisneverodd", + "code": "function solution(n) {\n var ans = 0;\n while (n > 0) {\n if (n % 2 !== 0) {\n n = (n - 1) / 2\n ans++\n } else {\n n = n / 2\n }\n }\n return ans;\n}", + "probId": "12980", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gmqlVlP3Y8jTkL8DkaU7B", + "author": "yongchanson", + "code": "function solution(n) {\n let result = 0;\n while (n > 0) {\n result += n % 2;\n n = Math.floor(n / 2);\n }\n return result;\n}", + "probId": "12980", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "QoGVCaku34rJVqQRX2TJp", + "author": "codeisneverodd", + "code": "function solution(name) {\n var answer = 0;\n const length = name.length;\n let upDownCount = 0\n let leftRightCountList = [length - 1]//한 방향으로 쭉 갔을 때\n for (let i = 0; i < length; i++) upDownCount += minUpOrDownCount(name[i])\n for (let startOfA = 0; startOfA < name.length; startOfA++) {\n let endOfA = startOfA + 1;\n while (endOfA < length && name[endOfA] === 'A') endOfA++;\n const [moveToStartOfA, moveToEndOfA] = [startOfA, length - endOfA]\n leftRightCountList.push(moveToStartOfA * 2 + moveToEndOfA)// 0 -> A.., 0 <- A.., ..A <- -1\n leftRightCountList.push(moveToEndOfA * 2 + moveToStartOfA)//시작부터 뒤로 가는 경우 ..A <- -1, ..A -> -1, 0 -> A..\n }\n answer = upDownCount + Math.min(...leftRightCountList)\n return answer;\n}\n\nfunction minUpOrDownCount(destination) {\n const Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n const index = Alphabet.indexOf(destination)\n return Math.min(index, Alphabet.length - index)\n}", + "probId": "42860", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "t6z3H25tPulkTlyJaRhfF", + "author": "ljw0096", + "code": "function solution(fees, records) {\n const answer = []\n\n const parkingTable = getParkingTable(records)\n const sortedKeys = Object.keys(parkingTable).sort()\n\n for (const targetCar of sortedKeys) {\n if (parkingTable[targetCar].length % 2 === 1) {\n parkingTable[targetCar].push(['23:59', 'OUT'])\n }\n const totalTime = getTotalTime(parkingTable, targetCar)\n const fee = calculateFee(totalTime, fees)\n answer.push(fee)\n }\n\n return answer\n}\n\nfunction getParkingTable(records) {\n const parkingTable = {}\n\n records.forEach((val) => {\n const info = val.split(' ')\n if (Object.keys(parkingTable).includes(info[1])) {\n parkingTable[info[1]].push([info[0], info[2]])\n } else {\n parkingTable[info[1]] = [[info[0], info[2]]]\n }\n })\n\n return parkingTable\n}\n\nfunction getTotalTime(parkingTable, targetCar) {\n let totalTime = 0\n for (let i = 0; i < parkingTable[targetCar].length - 1; i += 2) {\n totalTime += calculateTotalTime(\n parkingTable[targetCar][i][0],\n parkingTable[targetCar][i + 1][0]\n )\n }\n return totalTime\n}\n\nfunction calculateTotalTime(time1, time2) {\n const [hour1, minute1] = time1.split(':').map((val) => parseInt(val))\n const [hour2, minute2] = time2.split(':').map((val) => parseInt(val))\n\n return hour2 * 60 + minute2 - (hour1 * 60 + minute1)\n}\n\nfunction calculateFee(totalTime, feeInfo) {\n let fee = 0\n if (feeInfo[0] >= totalTime) {\n fee = feeInfo[1]\n } else {\n fee =\n feeInfo[1] + Math.ceil((totalTime - feeInfo[0]) / feeInfo[2]) * feeInfo[3]\n }\n return fee\n}", + "probId": "92341", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "kNhne_-9qa6A70jJI3s7A", + "author": "codeisneverodd", + "code": "function solution(n, k) {\n const getFactorial = n => {\n const result = [1, 1, 2, ...Array(n - 2)];\n result.forEach((_, i) => {\n if (i > 2) result[i] = result[i - 1] * i;\n });\n return result;\n };\n\n const getDivision = (dividend, divisor) => {\n const quotient = Math.floor(dividend / divisor);\n const remainder = dividend % divisor;\n return [quotient, remainder];\n };\n\n const stepCount = getFactorial(n).reverse();\n\n const generateSteps = (k, step) => {\n const [q, r] = getDivision(k, stepCount[step]);\n if (r === 0) return [q];\n return [q, ...generateSteps(r, step + 1)];\n };\n\n const answer = [];\n\n const steps = generateSteps(k - 1, 0);\n\n const notUsedNums = Array.from({ length: n }, (_, i) => i + 1);\n\n steps.slice(1).forEach(q => {\n answer.push(notUsedNums[q]);\n notUsedNums.splice(q, 1);\n });\n\n return [...answer, ...notUsedNums];\n}", + "probId": "12936", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "HK9ptDmy8O0AWl-b4C8xX", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = -1;\n let notPairStack = []\n notPairStack.push(s[0])\n for (let i = 1; i < s.length; i++) {\n if (notPairStack[notPairStack.length - 1] === s[i]) {\n notPairStack.pop()\n } else {\n notPairStack.push(s[i])\n }\n }\n answer = notPairStack.length === 0 ? 1 : 0\n return answer;\n}", + "probId": "12973", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "A1eHRdaz8Haz6HcQ661RQ", + "author": "jaewon1676", + "code": "function solution(s){\n let cnt = 0; // 빼준 부분을 카운트 해줍니다\n let answer;\n let stack = []\n for (let i of s){\n if (stack[stack.length - 1] === i){ // 스택의 끝부분과 i를 비교합니다\n stack.pop();\n cnt++;; \n } else {\n stack.push(i)\n }\n }\n \n (s.length / 2 == cnt ? answer = 1 : answer = 0 ) \n // s의 길이를 2로 나눠서 cnt 값이 된다면 문자열의 개수만큼 잘 잘라졌다는 뜻입니다\n return answer;\n }\n // 코테 1주차 5번 문제와 유사합니다. 문자열 유형을 연습하기에 좋은 문제입니다", + "probId": "12973", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "CQt47w1Rkj3wzrx_KPRQH", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = '';\n const arr = s.split(' ').map(x => parseInt(x, 10)).sort((a, b) => a - b)\n answer = arr[0] + ' ' + arr[arr.length - 1]\n return answer;\n}", + "probId": "12939", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gJbHOI90B9U2PgJhfx5lx", + "author": "jaewon1676", + "code": "function solution(s) {\n s = s.split(' ')\n s.sort((a, b) => {return a - b}) // 오름차순 정렬\n let small = s[0] // s의 최솟값\n let large = s[s.length - 1] // s의 최댓값\n return (small + ' ' + large)\n}", + "probId": "12939", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "yBhUFqKetjxAdygubedf4", + "author": "prove-ability", + "code": "function solution(s) {\n s = s.split(\" \").map((v) => parseInt(v, 10))\n return `${Math.min(...s)} ${Math.max(...s)}`;\n}", + "probId": "12939", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "RCe6dqEFVBlbw2Z1vzhwn", + "author": "yongchanson", + "code": "function solution(s) {\n let arr = s.split(\" \").sort((a, b) => a - b);\n arr.splice(1, arr.length - 2, \" \");\n let result = arr.join(\"\");\n return result;\n}", + "probId": "12939", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ZagjFEXwfraHemfRfFgUS", + "author": "codeisneverodd", + "code": "function solution(A, B) {\n var answer = 0;\n A = A.sort((a, b) => a - b)\n B = B.sort((a, b) => b - a)\n for (let i = 0; i < A.length; i++) answer += A[i] * B[i]\n return answer;\n}", + "probId": "12941", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "4bClFnncYWhFex1Lfup3h", + "author": "prove-ability", + "code": "function solution(A,B){\n let sum = 0;\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n \n for(let i = 0, len = A.length; i < len; i++) {\n sum += A[i] * B[i];\n }\n\n return sum;\n}", + "probId": "12941", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "jwKRjvyzgD21fL-3MPvht", + "author": "yongchanson", + "code": "function solution(A, B) {\n A.sort((a, b) => a - b);\n B.sort((a, b) => b - a);\n return A.reduce((t, n, i) => t + n * B[i], 0);\n}", + "probId": "12941", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ZRCoORaCjptFmvuCGAdyP", + "author": "codeisneverodd", + "code": "function solution(brown, yellow) {\n var answer = [];\n const size = brown + yellow\n answer = widthHeightPair(size).filter(pair => (pair[0] + pair[1]) * 2 - 4 === brown)[0]\n return answer;\n}\n\nfunction widthHeightPair(size) {\n let result = []\n for (let i = 1; i <= Math.sqrt(size); i++) if (size % i === 0) result.push([size / i, i])\n return result\n}", + "probId": "42842", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "F8IWVoPp35R-_7wvY6KPI", + "author": "jaewon1676", + "code": "function solution(brown, yellow) {\n var answer = [];\n let sum = brown + yellow; \n \n //카펫의 최소높이는 3부터이다.(테두리 갈색, 가운데 노란색)\n for(let height=3; height {\n const length = matrix.length;\n const half = length / 2;\n const pass = matrix => matrix.every(row => row.every(v => v === matrix[0][0]));\n\n if (pass(matrix)) return [matrix[0][0]];\n if (length <= 2) return matrix;\n\n const startPoints = [\n [0, 0],\n [0, half],\n [half, 0],\n [half, half],\n ];\n\n return startPoints.map(([r, c]) => quad(matrix.slice(r, r + half).map(row => row.slice(c, c + half))));\n };\n return quad(arr)\n .flat(Infinity)\n .reduce((a, c) => (c === 0 ? [a[0] + 1, a[1]] : [a[0], a[1] + 1]), [0, 0]);\n}", + "probId": "68936", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "szaRprAfZy_qUOWpA27cx", + "author": "codeisneverodd", + "code": "function solution(number, k) {\n var answer = '';\n let answerStack = [0]\n let deleteCount = -1\n for (let i = 0; i < number.length; i++) {\n while (deleteCount < k && number[i] > answerStack[answerStack.length - 1]) {\n answerStack.pop()\n deleteCount++\n }\n if (answerStack.length < number.length - k) answerStack.push(number[i])\n }\n answer = answerStack.join('')\n return answer;\n}", + "probId": "42883", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "EyQH8kejDSI0N4q9lG02r", + "author": "jaewon1676", + "code": "function solution(number, k) {\n const stack = [];\n let answer = '';\n \n for(let i=0; i 0 && stack[stack.length-1] < el){\n stack.pop();\n k--;\n }\n stack.push(el);\n }\n stack.splice(stack.length-k, k);\n answer = stack.join(\"\");\n return answer;\n}", + "probId": "42883", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "yE5QUyga-dDB9MnM34OhF", + "author": "ssi02014", + "code": "function solution(numbers, target) {\n let answer = 0;\n\n dfs(0, 0);\n return answer;\n\n function dfs(index, sum) {\n // 재귀 종료\n if (index === numbers.length) {\n if (sum === target) {\n answer++;\n }\n return;\n }\n\n dfs(index + 1, sum + numbers[index]);\n dfs(index + 1, sum - numbers[index]);\n }\n}", + "probId": "43165", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "NMURcMhFuwRUsJWmaW1To", + "author": "codeisneverodd", + "code": "function solution(numbers, target) {\n var answer = 0;\n const binaryLength = numbers.length;\n const binary = 2 ** binaryLength;\n for (let i = 0; i < binary; i++) {\n const numSlice = numbers.slice();\n const binaryString = i.toString(2).padStart(binaryLength, '0');\n for (let j = 0; j < binaryString.length; j++) binaryString[j] === '0' ? (numSlice[j] *= -1) : null;\n const calculated = numSlice.reduce((prev, current) => prev + current);\n if (calculated === target) answer += 1;\n }\n return answer;\n}", + "probId": "43165", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "KG0o_ArOVK7FGDSi2Uxj_", + "author": "codeisneverodd", + "code": "function solution(s) {\n var answer = [];\n let sets = s\n .slice(2, -2)\n .split('},{')\n .map(set => set.split(',').map(x => parseInt(x)))\n .sort((a, b) => a.length - b.length)\n for (const set of sets) answer.push(...set.filter(x => !answer.includes(x)))\n return answer;\n}", + "probId": "64065", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ljkFBseZ_xqY2qwOlnE0q", + "author": "chaerin-dev", + "code": "function solution(s) {\n // 문자열 -> 정수 이차원 배열\n const sArr = s\n .substring(2, s.length - 2)\n .split(\"},{\")\n .map((e) => e.split(\",\").map((e) => parseInt(e)))\n .sort((a, b) => a.length - b.length);\n // 정답을 저장할 배열\n const answer = [];\n // 이차원배열을 순회하며 직전 배열과 겹치지 않는 요소만 answer에 추가\n for (let i = 0; i < sArr.length; i++) {\n for (let j = 0; j < sArr[i].length; j++) {\n const temp = sArr[i][j];\n if (!answer.includes(sArr[i][j])) answer.push(sArr[i][j]);\n }\n }\n return answer;\n}", + "probId": "64065", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "qEH0Pyao5w3x9ZFjUKlNB", + "author": "jaewon1676", + "code": "function solution(priorities, location) {\n var answer = 0;\n while (true) {\n\n if (priorities[0] < Math.max(...priorities)) {\n if (location - 1 < 0) location = priorities.length\n priorities.push(priorities.shift())\n location--;\n } else {\n answer++;\n if (location - 1 < 0) {\n return answer;\n }\n priorities.shift()\n location--;\n }\n console.log(priorities, location, answer)\n\n }\n return answer\n}", + "probId": "42587", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Rk4Let4yq3vO47W6aO2vR", + "author": "createhb21", + "code": "function solution(priorities, location) {\n var answer = priorities.map((priority, index) => {\n return {\n index,\n priority\n };\n });\n \n let queue = [];\n \n while(answer.length > 0){\n const first = answer.shift();\n const isPriority = answer.some((p) => p.priority > first.priority);\n isPriority ? answer.push(first) : queue.push(first);\n }\n const idx = queue.findIndex(p => p.index === location) + 1;\n return idx;\n }", + "probId": "42587", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Z7hpmyMSWenF2xM3-NSVa", + "author": "codeisneverodd", + "code": "//shift를 사용하지 않고 queue를 구현한 풀이를 추가합니다.\nfunction solution(priorities, location) {\n let answer = 0;\n const printer = new Queue;\n priorities.forEach((priority, index) => {\n printer.enqueue([priority, index])\n })\n while (printer.size() > 0) {\n const check = printer.dequeue()\n const countHigherPriority = printer.queue.filter(x => x[0] > check[0]).length\n if (countHigherPriority > 0) {\n printer.enqueue(check)\n } else {\n answer += 1\n if (check[1] === location) break\n }\n\n }\n return answer;\n}\n\nclass Queue {\n constructor() {\n this.queue = []\n this.front = 0\n this.rear = 0\n }\n\n enqueue(value) {\n this.queue[this.rear++] = value\n }\n\n dequeue() {\n const value = this.queue[this.front]\n delete this.queue[this.front]\n this.front += 1\n return value\n }\n\n peek() {\n return this.queue(this.front)\n }\n\n size() {\n return this.rear - this.front\n }\n}", + "probId": "42587", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "VTaNyHO40w4_74rGMSLnW", + "author": "pereng11", + "code": "//완전 탐색, greedy O(N^2)\nfunction solution(currentFatigue, dungeons) {\n return getMaxCount(currentFatigue, 0, dungeons);\n}\n\nfunction getMaxCount(currentFatigue, visitedCount, dungeons) {\n const possibleDungeons = dungeons.filter(([minNeededFatigue, _]) => minNeededFatigue <= currentFatigue);\n if (possibleDungeons.length === 0) return visitedCount;\n\n const maxCount = possibleDungeons.reduce((prevCount, curr, currentIndex) => {\n const [_, usedFatigue] = curr;\n const nextDungeons = possibleDungeons.filter((_, index) => index !== currentIndex);\n const currentCount = getMaxCount(\n currentFatigue - usedFatigue,\n visitedCount + 1,\n nextDungeons\n );\n return Math.max(currentCount, prevCount);\n }, 0);\n\n return maxCount;\n}", + "probId": "87946", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "EMiltQkFNcp5H6BUbdl7p", + "author": "codeisneverodd", + "code": "function solution(n) {\n var answer = 0;\n answer = fibonacci1234567(n)\n return answer;\n}\n\nfunction fibonacci1234567(n) { //재귀적으로 하면 시간초과\n let fiboArr = new Array(n + 1).fill(0)\n fiboArr[0] = 0\n fiboArr[1] = 1\n for (let i = 2; i <= n; i++) fiboArr[i] = (fiboArr[i - 1] + fiboArr[i - 2]) % 1234567 //1234567로 나눈 나머지로 하지 않으면 정수범위 초과\n return fiboArr[n]\n}", + "probId": "12945", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "4DrrCFprxb0yTmo9JtSSy", + "author": "jaewon1676", + "code": "function solution(n) {\n let f_1 = 0;\n let f_2 = 1;\n \n for (let i=2; i<=n; i++) {\n let temp = (f_1 + f_2) % 1234567;\n f_1 = f_2;\n f_2 = temp;\n }\n \n return f_2;\n}", + "probId": "12945", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "Y7oLGRpRRd1_S1LWhiXZ8", + "author": "codeisneverodd", + "code": "function solution(n) {\n return move(1, 3, 2, n);\n}\nconst move = (departure, destination, waypoint, numberOfPlate) => {\n if (numberOfPlate === 1) return [[departure, destination]];\n return [\n ...move(departure, waypoint, destination, numberOfPlate - 1),\n ...move(departure, destination, waypoint, 1),\n ...move(waypoint, destination, departure, numberOfPlate - 1),\n ];\n};\n//재귀를 생각해보기에 좋은 문제입니다.\n//추천 레퍼런스 https://shoark7.github.io/programming/algorithm/tower-of-hanoi\n/*\nn개가 있다면\n1. 1->2로 n-1개를 옮김\n2. 1->3으로 가장 큰 1개를 옮김\n3. 2->1로 n-2개를 옮김\n4. 2->3으로 2번에 있는 것 중 가장 큰 1개를 옮김\n의 반복\n\n결국 무엇이든 a -> b 로 n 를 옮기는 동작의 반복이므로 이를 재귀로 표현하면 됨.\na->b 로 n 을 옮기는 것은 a->c로 n-1개를 옮겨놓고, a->b로 하나를 옮긴 후, c->b로 n-1개를 옮기는 것의 반복 \n함수에서 a는 depature(출발지), b는 destination(도착지), c는 waypoint(경유지)로 작성되어있음.\n*/", + "probId": "12946", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ekrHtfPyU_KAhsRjznZC_", + "author": "codeisneverodd", + "code": "function solution(rows, columns, queries) {\n var answer = [];\n let matrix = new Array(rows)\n for (let i = 0; i < rows; i++) matrix[i] = new Array(columns)\n for (let i = 0; i < rows; i++) for (let j = 0; j < columns; j++) matrix[i][j] = i * columns + j + 1\n for (const query of queries) {\n let order = []\n const [row1, col1, row2, col2] = [query[0] - 1, query[1] - 1, query[2] - 1, query[3] - 1]\n //fill order (row1->row2, col1->col2, row2->row2, col2->col1)\n for (let i = row1; i <= row2; i++) order.push(matrix[i][col1])\n for (let i = col1 + 1; i <= col2; i++) order.push(matrix[row2][i])\n for (let i = row2 - 1; i >= row1; i--) order.push(matrix[i][col2])\n for (let i = col2 - 1; i > col1; i--) order.push(matrix[row1][i])\n //rotate clockwise\n order.push(order.shift())\n answer.push(Math.min(...order))\n //change value in matrix\n for (let i = row1; i <= row2; i++) matrix[i][col1] = order.shift()\n for (let i = col1 + 1; i <= col2; i++) matrix[row2][i] = order.shift()\n for (let i = row2 - 1; i >= row1; i--) matrix[i][col2] = order.shift()\n for (let i = col2 - 1; i > col1; i--) matrix[row1][i] = order.shift()\n }\n return answer;\n}", + "probId": "77485", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "B3sjdQsVrwveW4L7oRxEt", + "author": "codeisneverodd", + "code": "function solution(arr1, arr2) {\n const [row, col] = [arr1.length, arr2[0].length]\n let answer = new Array(row);\n for (let i = 0; i < row; i++) answer[i] = new Array(col)\n //arr1의 열의 개수 = arr2의 행의 개수, arr1의 i번째 행과 arr2의 j번째 열의 원소들을 곱한 것들의 합이 answer[i][j] 값\n for (let i = 0; i < row; i++) {\n for (let j = 0; j < col; j++) {\n answer[i][j] = arr1[i].reduce((sum, arr1Value, rowIndex) => sum + arr1Value * arr2[rowIndex][j], 0)\n }\n }\n return answer;\n}", + "probId": "12949", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "iKL3fAei0gfK59hQFY4XZ", + "author": "prove-ability", + "code": "function solution(arr1, arr2) {\n var answer = [];\n // 행만큼 반복\n for(let i = 0, len = arr1.length; i < len; i++) {\n const arr = []\n // 열만큼 반복\n for(let j = 0, len = arr1[i].length; j < len; j++) {\n // 각의 배열에서 행을 더해서 arr push\n arr.push(arr1[i][j] + arr2[i][j])\n }\n // 열 만큼 추가된 arr 를 answer 가 추가\n answer.push(arr)\n }\n \n return answer;\n}", + "probId": "12949", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "ehCNYvlPKOQOovwHefyQa", + "author": "codeisneverodd", + "code": "function solution(relation) {\n //1. 가능한 조합을 1개~Attribute개수 만큼 찾는다.\n //2. 해당 개수의 조합이 키가 될 수 있는지 검사하고, 가능하면 후보키에 추가한다.\n //3. 단 추가하려고 할 때, 후보키에 있는 값이 자신의 부분 집합이 될 수 있으면 추가하지 않는다.\n const keys = []\n const totalAttrCount = relation[0].length\n const indexList = Array.from(Array(totalAttrCount), (x, index) => index) // [0,1,2,3 ... totalAttrCount-1]\n\n //Fn for 2. 해당 조합으로 각 row의 attribute를 모았을 때 중복이 있는지를 반환하는 함수\n const isUnique = (relation, attrIndexComb) => {\n let result = Array.from(Array(relation.length), x => '')\n for (const attrIndex of attrIndexComb) {\n relation.forEach((row, rowIndex) => result[rowIndex] += row[attrIndex]) //Set를 이용해 중복 검사를 하기 위해 result에 string으로 넣음.\n }\n return result.length === [...new Set(result)].length\n }\n\n //Fn for 3. keys에 현재 구한 검사할 조합의 부분집합이 존재하는지 반환, 단 keys에 들어있는 각 조합의 크기는 현재 검사할 조합의 크기보다 작다.\n const isMinimal = (attrComb) => {\n for (const key of keys) if (key.every(attr => attrComb.includes(attr))) return false\n return true\n }\n\n //가능한 모든 조합을 검사\n for (let attrCount = 1; attrCount <= totalAttrCount; attrCount++) {\n const combinations = getCombinations(indexList, attrCount)\n for (const attrComb of combinations) {\n if (isMinimal(attrComb) && isUnique(relation, attrComb)) keys.push(attrComb)\n }\n }\n\n return keys.length\n}\n\n//Fn for 1. 조합을 반환하는 함수\nconst getCombinations = (array, selectNumber) => {\n const result = [];\n if (selectNumber === 1) {\n return array.map((element) => [element]);\n }\n array.forEach((fixed, index, origin) => {\n const restCombinations = getCombinations(origin.slice(index + 1), selectNumber - 1);\n const attached = restCombinations.map((restCombination) => [fixed, ...restCombination]);\n result.push(...attached);\n });\n return result;\n}", + "probId": "42890", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "DfVmns6ufjgJmwcNV82zI", + "author": "codeisneverodd", + "code": "function solution(n, edge) {\n const graph = Array.from(Array(n + 1), () => [])\n for (const [src, dest] of edge) {\n graph[src].push(dest)\n graph[dest].push(src)\n }\n const distance = Array(n + 1).fill(0)\n distance[1] = 1\n const toBeSearched = [1]\n while (toBeSearched.length > 0) {\n const src = toBeSearched.shift()\n for (const dest of graph[src]) {\n if (distance[dest] === 0) {\n distance[dest] = distance[src] + 1\n toBeSearched.push(dest)\n }\n }\n }\n return distance.filter(x => x === Math.max(...distance)).length\n}", + "probId": "49189", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "4SAsYCuYpAaqiXVcDdgW2", + "author": "codeisneverodd", + "code": "function solution(n, computers) {\n let answer = 0\n const visited = new Array(n).fill(false)\n const newNetwork = (startComputer) => {\n //새로운 네트워크를 만들 시작 컴퓨터를 파라미터로 받는다.\n const toBeVisited = [startComputer]\n while (toBeVisited.length > 0) {\n //시작 컴퓨터로부터 방문 가능한 컴퓨터를 모두 방문하며 해당 컴퓨터의 visited를 true로 바꾼다\n const currentComputer = toBeVisited.pop()\n visited[currentComputer] = true\n for (let nextComputer = 0; nextComputer < n; nextComputer++) {\n if (!visited[nextComputer] && computers[currentComputer][nextComputer]) {\n toBeVisited.push(nextComputer)\n }\n }\n }\n }\n\n for (let startComputer = 0; startComputer < n; startComputer++) {\n if (!visited[startComputer]) {\n newNetwork(startComputer)\n //새로운 네트워크를 생성할 때마다 정답을 1 증가시킨다.\n answer++\n }\n }\n return answer\n}", + "probId": "43162", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "nKPtmI7XNC26XpIlYbbVA", + "author": "jaewon1676", + "code": "function solution(routes) {\n let cctv = 1; // cctv의 개수는 최소 1개\n routes.sort((a, b) => a[0] - b[0]); // 고속도로 진입 시점을 기준으로 오름차순 정렬\n // [ [ -20, -15 ], [ -18, -13 ], [ -14, -5 ], [ -5, -3 ] ]\n let out = routes[0][1]; // -15\n // 나간 시점(out)은 첫 차량의 나간시점으로 초기화\n \n for(let i = 1; i < routes.length; i++) {\n // 나간 시점(out)보다 현재 차량의 진입이 느리다면 카메라 추가 설치\n if(out < routes[i][0]) {\n cctv++;\n out = routes[i][1]; // out 시점 업데이트\n }\n \n // 나간 시점(out)이 현재 차량의 진출시점보다 큰 경우 \n if(out > routes[i][1]) {\n out = routes[i][1]; // out 시점 업데이트 \n }\n }\n \n return cctv;\n}\n// 그리디\n\n// 우리는 카메라를 최소로 설치 해야합니다. 그러기 위해서는 고속도로 진입 시점을 기준으로 오름차순 정렬을(빨리 진입한 순) 합니다.\n// 이렇게 되면 배열에 있는 모든 고속도로 진입 시점은 배열의 첫번째 고속도로 진입 시점보다 더 뒤에 있습니다. 그러므로 우리는 \n// 나간시점만 검사 해주면 됩니다.\n\n// 먼저 첫번째 routes의 고속도로를 빠져나간 시점을 out 변수에 담아줍니다.\n// 이 out 변수를 두번째 routes의 고속도로를 빠져나간 시점과 비교하여 out 변수보다 route[i][1]가 크면 ( 나간 시간이 느리면)\n// cctv를 하나 늘려줍니다. , out 변수를 갱신 하며 세번째, 네번째도 계속 비교해줍니다.", + "probId": "42884", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "FyidIwW1ocs08d8zOmC5U", + "author": "codeisneverodd", + "code": "//Map과 고차함수를 적극적으로 이용한 풀이\nfunction solution(genres, plays) {\n const genreMap = new Map(); // {genre:{totalPlay:number, songs:[{play:number, id:number}, ...]}\n genres\n .map((genre, id) => [genre, plays[id]])\n .forEach(([genre, play], id) => {\n const data = genreMap.get(genre) || {totalPlay: 0, songs: []}\n genreMap.set(genre, {\n totalPlay: data.totalPlay + play,\n songs: [...data.songs, {play: play, id: id}]\n .sort((a, b) => b.play - a.play)\n .slice(0, 2)\n })\n })\n\n return [...genreMap.entries()] //entries => [[genre, {totalPlay, songs}], ...]\n .sort((a, b) => b[1].totalPlay - a[1].totalPlay)\n .flatMap(item => item[1].songs) // [[songs], [songs]] => [songs, songs]\n .map(song => song.id)\n}", + "probId": "42579", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "0f66lOgRfqED_HCdCqEw_", + "author": "codeisneverodd", + "code": "function solution(tickets) {\n const routes = [] //최종 가능 루트들을 담을 배열\n const makeRoutes = (currentDepart, remainTickets, currentRoute) => {\n //현재 출발지, 남은 티켓들, 현재 까지 만든 루트를 기반으로 경로를 만들어 가는 재귀 함수\n if (remainTickets.length > 0) {\n remainTickets.forEach(([depart, nextDepart], index) => {\n if (depart === currentDepart)\n //현재 출발지와 같은 출발지를 가진 티켓이 있다면, 해당 티켓을 사용하고 해당 티켓의 도착지를 다음 출발지로 지정\n makeRoutes(\n nextDepart,\n [...remainTickets.slice(0, index), ...remainTickets.slice(index + 1)],\n [...currentRoute, currentDepart])\n })\n } else {\n //티켓을 모두 사용하면 최종 가능 루트에 포함\n routes.push([...currentRoute, currentDepart])\n }\n }\n makeRoutes(\"ICN\", tickets, [])\n return routes.sort()[0]\n}", + "probId": "43164", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "-Jf1bx2PH3d58y5kpI3HP", + "author": "jaewon1676", + "code": "function solution(operations) {\n var answer = [];\n for (let i = 0; i < operations.length; i++) {\n // 숫자 삽입\n if (operations[i][0] == 'I') {\n let m = operations[i].substring(2, operations[i].length);\n answer.push(m);\n }\n // if 최댓값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '1' && operations.length > 0) {\n answer.pop();\n }\n // if 최솟값 삭제\n else if (operations[i][0] == 'D' && operations[i][2] == '-' && operations[i][3] == '1' && operations.length > 0) {\n answer.shift();\n }\n\n answer.sort((a, b) => {\n return a - b;\n });\n }\n if (answer.length == 0) return [0, 0];\n else {\n return [parseInt(answer.pop()), parseInt(answer.shift())];\n }\n}\n/* 풀이 과정\n1. 연산 처리를 구별하기 위해 배열의 0번째 자리, 2번째 자리에 있는 등을 비교하여 조건에 따른 명령을 실행한다.\n2. answer 배열을 정렬 해준다\n3. 큐가 비어있으면 ( length == 0 ) 0을 반환. , 그렇지 않으면 [최댓값, 최솟값]을 반환한다.\n*/", + "probId": "42628", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "gZxB5yD_He6RsHLSk2pdY", + "author": "codeisneverodd", + "code": "function solution(n, times) {\n //최소로 걸릴 수 있는 시간 left, 최대로 걸릴 수 있는 시간 right\n let [left, right] = [1, Math.max(...times) * n];\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const sum = times.reduce((acc, time) => acc + Math.floor(mid / time), 0);\n //sum은 mid 시간 동안 처리 할 수 있는 사람의 수\n if (sum < n) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n }\n // left 가 right를 넘어갔다는 것은 left가 n보다 크거나 같아져서 n명을 수용할 수 최소값이 되있다는 것이다.\n return left;\n}", + "probId": "43238", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "qRYf80Us-O-lhErUFQ2mK", + "author": "ryong9rrr", + "code": "class Node {\n constructor(value = '') {\n this.value = value\n this.children = new Map()\n this.count = 0\n }\n}\n\nclass Trie {\n constructor() {\n this.root = new Node()\n }\n\n insert(string) {\n let currentNode = this.root\n for (const char of string) {\n if (!currentNode.children.has(char)) {\n currentNode.children.set(char, new Node(currentNode.value + char))\n }\n currentNode = currentNode.children.get(char)\n currentNode.count++\n }\n }\n\n startsWithCount(prefix) {\n let currentNode = this.root\n for (const char of prefix) {\n if (!currentNode.children.has(char)) {\n return 0\n }\n currentNode = currentNode.children.get(char)\n }\n return currentNode.count\n }\n}\n\nfunction reverseString(string) {\n return [...string].reverse().join('')\n}\n\nfunction solution(words, queries) {\n const table = {}\n const reverseTable = {}\n const counter = {}\n\n words.forEach((word) => {\n const key = word.length\n if (!table[key]) table[key] = new Trie()\n if (!reverseTable[key]) reverseTable[key] = new Trie()\n table[key].insert(word)\n reverseTable[key].insert(reverseString(word))\n if (counter[key] === undefined) counter[key] = 0\n counter[key]++\n })\n\n return queries.map((query) => {\n const key = query.length\n if (!table[key]) {\n return 0\n }\n const tQuery = query.replace(/\\?/g, '')\n if (!tQuery) {\n return counter[key]\n }\n if (query[query.length - 1] === '?') {\n return table[key].startsWithCount(tQuery)\n }\n return reverseTable[key].startsWithCount(reverseString(tQuery))\n })\n}", + "probId": "60060", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "PcDl6DL2PASDq1U6OtLKw", + "author": "codeisneverodd", + "code": "//코드 참고자료: https://velog.io/@longroadhome/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-LV.4-%EB%8B%A8%EC%96%B4-%ED%8D%BC%EC%A6%90\nfunction solution(strs, t) {\n const tLength = t.length; //자주 쓰는 값 미리 계산\n //Infinity 로 선언을 해야 조합이 불가능한 영역의 값을 무한으로 두고, 그 영역에 하나를 더해도 불가능하다는 것을 Infinity로 표현할 수 있게 된다.\n const minCountToIndex = new Array(tLength).fill(Infinity);\n for (let currentIndex = 0; currentIndex < tLength; currentIndex++) {\n //내가 검사할 부분은 t의 0~currentIndex 영역\n const currentSlice = t.slice(0, currentIndex + 1);\n for (const str of strs) {\n //현재 영역이 strs에 있는 조각들 중 하나로 끝난다면\n if (currentSlice.endsWith(str)) {\n //frontLength 는 str 조각을 제외한 앞 쪽의 남은 조각의 길이\n const frontLength = currentIndex - str.length + 1;\n if (frontLength === 0) {\n //앞쪽에 남은 것이 없다면, 현재 검사중인 영역 = strs에 있는 조각\n minCountToIndex[currentIndex] = 1;\n } else {\n //앞쪽에 남은 것이 있다면, 현재 검사중이 영역까지 필요한 조각 수는, 지금까지 구한 최소 값과 지금 구한 값 중 최소값\n minCountToIndex[currentIndex] = Math.min(minCountToIndex[currentIndex], minCountToIndex[frontLength - 1] + 1);\n }\n }\n }\n }\n //마지막 영역이 Infinity 이면 만들기 불가능한 단어, 아니라면 마지막 영역의 값을 리턴\n return minCountToIndex[tLength - 1] === Infinity ? -1 : minCountToIndex[tLength - 1];\n}\n\n//리드미 테스트용 코멘트", + "probId": "12983", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "l5j723vS_BE1IKwxV_QEr", + "author": "ryong9rrr", + "code": "function solution(food_times, k) {\n const total = food_times.reduce((a, b) => a + b)\n if (total <= k) {\n return -1\n }\n\n // stack으로 풀기\n const stack = food_times.map((time, i) => [time, i + 1]).sort(([timeA], [timeB]) => timeB - timeA)\n\n let prev = 0\n while (stack.length > 0 && k >= 0) {\n const [time] = stack[stack.length - 1]\n const acc = (time - prev) * stack.length\n if (k < acc) {\n break\n }\n stack.pop()\n k -= acc\n prev = time\n }\n\n const result = stack\n .reverse()\n .map(([_, order]) => order)\n .sort((orderA, orderB) => orderA - orderB)\n return result[k % result.length]\n}", + "probId": "42891", + "createdAt": 1679394094353, + "lang": "js" + }, + { + "id": "_IJtm5VqJrpQBeBjgqmqR", + "author": "cg10036", + "code": "function solution(n) {\n const fact = n => n ? BigInt(n) * fact(n - 1) : 1n;\n return fact(n * 2) / (fact(n) * fact(n + 1));\n}", + "probId": "12929", + "createdAt": 1679394094353, + "lang": "js" + } +] diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..4f11a03 --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..a843cbe --- /dev/null +++ b/next.config.js @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +} + +module.exports = nextConfig diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index ca6be43..0000000 --- a/package-lock.json +++ /dev/null @@ -1,2643 +0,0 @@ -{ - "name": "programmers-coding-test", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "programmers-coding-test", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@types/node": "^18.11.18", - "axios": "^1.1.2", - "cheerio": "^1.0.0-rc.10", - "nanoid": "^4.0.0", - "node-fetch": "^3.2.3", - "prettier": "^2.7.1", - "rimraf": "^4.1.2", - "ts-node": "^10.9.1", - "typescript": "^4.9.4" - }, - "devDependencies": { - "husky": "^8.0.1", - "lint-staged": "^13.0.3" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz", - "integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", - "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", - "dependencies": { - "css-select": "^4.3.0", - "css-what": "^6.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.3.1", - "domutils": "^2.8.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/fetch-blob": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", - "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lint-staged": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", - "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", - "dev": true, - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", - "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.3.tgz", - "integrity": "sha512-AXP18u4pidSZ1xYXRDPY/8jdv3RAozIt/WLNR/MBGZAz+xjtlr90RvCnsvHQRiXyWliZF/CpytExp32UU67/SA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", - "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==", - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz", - "integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } - }, - "cheerio-select": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", - "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", - "requires": { - "css-select": "^4.3.0", - "css-what": "^6.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.3.1", - "domutils": "^2.8.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "fetch-blob": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", - "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true - }, - "husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lint-staged": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", - "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - } - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", - "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==" - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-fetch": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.3.tgz", - "integrity": "sha512-AXP18u4pidSZ1xYXRDPY/8jdv3RAozIt/WLNR/MBGZAz+xjtlr90RvCnsvHQRiXyWliZF/CpytExp32UU67/SA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - }, - "dependencies": { - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - } - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "requires": { - "parse5": "^6.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==" - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - } - } - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", - "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==" - }, - "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - } - } -} diff --git a/package.json b/package.json index bfd466f..ee967dc 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,52 @@ { - "name": "programmers-coding-test", - "version": "1.0.0", - "description": "🌱 프로그래머스의 [코딩테스트 문제]", - "type": "module", + "name": "solution-pass-search", + "version": "0.1.0", + "private": true, "scripts": { - "build": "node ./utils/build.js", - "prepare": "husky install" + "dev": "next dev -p 3003", + "build": "next build", + "start": "next start", + "lint": "next lint && tsc --noemit", + "prepare": "husky install", + "pre-commit": "yarn lint" }, - "repository": { - "type": "git", - "url": "git+https://github.com/codeisneverodd/programmers-coding-test.git" - }, - "author": "cruelladevil ", - "license": "MIT", - "bugs": { - "url": "https://github.com/codeisneverodd/programmers-coding-test/issues" - }, - "homepage": "https://github.com/codeisneverodd/programmers-coding-test#readme", "dependencies": { - "@types/node": "^18.11.18", - "axios": "^1.1.2", - "cheerio": "^1.0.0-rc.10", - "nanoid": "^4.0.0", - "node-fetch": "^3.2.3", - "prettier": "^2.7.1", - "rimraf": "^4.1.2", - "ts-node": "^10.9.1", - "typescript": "^4.9.4" + "@chakra-ui/react": "^2.5.1", + "@emotion/react": "^11.10.6", + "@emotion/styled": "^11.10.6", + "@fortawesome/fontawesome-svg-core": "^6.3.0", + "@fortawesome/free-regular-svg-icons": "^6.3.0", + "@fortawesome/free-solid-svg-icons": "^6.3.0", + "@fortawesome/react-fontawesome": "^0.2.0", + "@tanstack/react-query": "^4.28.0", + "@tanstack/react-query-devtools": "^4.28.0", + "@types/node": "18.14.2", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", + "axios": "^1.3.4", + "cheerio": "^1.0.0-rc.12", + "eslint": "8.35.0", + "eslint-config-next": "13.2.1", + "framer-motion": "^10.0.0", + "nanoid": "^4.0.1", + "next": "13.2.1", + "react": "18.2.0", + "react-dom": "18.2.0", + "recoil": "^0.7.7", + "typescript": "4.9.5" }, "devDependencies": { - "husky": "^8.0.1", - "lint-staged": "^13.0.3" - }, - "lint-staged": { - "**/*": "prettier --write --ignore-unknown" + "@typescript-eslint/eslint-plugin": "^5.53.0", + "@typescript-eslint/parser": "^5.53.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "husky": "^8.0.3", + "prettier": "^2.8.4" } } diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c9bb00d02063a6ca9a78e27e51692336bb570e69 GIT binary patch literal 19330 zcmV*(KsLXLP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru=K>o98xs)B zAp8ITNfk*%K~#9!?Y(KRWm$ID_uKo7cX)G7m03g9)K%TpUDaJ`x?8Odqizi?qyP*- zgqZ>xI{2z#8aQtA~!V4F9vv+H3vSe<>c=b>^IFe$_zeA2Bcl zR)Mp?8UOQP|N9!S1S|jppy%Hc`_BPzKnWB;4vc{jumfBJE&~^V_x$gdfldFq0;v7N zDy0tlFda#Ia8$SszzL8d;5-973Oos%_rIS-K)v8!8!!W`V(&4%(eZWresBJ^fI-0C z0R4U7E#UjWo50%$(0Bdo3jaPHfczs2Xb)lqM9e(zqrkJkC;iX!zzM|LYG%jlejPX0 z`Pl&dDgy9VfS3KxcbIwd3UD7)aDSxsx&z__0q{8lxSs(&4Ll8;^v}rq*_S6G8Lcn?+cpmsX0_4Ym#lzmldt|%71>ift*MXN1Z+;c1J_^7- zwtLu#i1}|iHC>1jUTd&k+}Oef!_eWjl|&FaD3zKW4Bix$N}&W0^%phS| z1js+(A1@*Wj=9~h`)n52Ko*g|2>dGq*!8>ud+xT{16d&wXI68N_4%Ch(7ee+^tyO1ZoG z)ca^h8ql588%VY8^T2JO=!6 z#4A6Ea4jC#hi^HO%l;>b$9@a(;zt(LM{=t=CF%v>E5M%teh8`P9m#Dz#^#U;J&yE2mTcBCy@olD|H3g_$F>HJuQnj}%7! z0+Lr=IP7hEV0&x?{1WiDk;2Rrj!p=2B(|axVw?f~5b)=aQuPC`d^F7fzYF{w;GZJ= z>?09^9Qqb?3M9`0{{`?TkW}0QJNmYcgdcw&p{*WzLFUlDy%S=j$b#>`LaKeeLp>r7 z>~<{!egXJfNC=X{;e{ZF@~s^(F9AOV{3RsEeCT(K2X;s1kX-fO1b!aLiW~~4?|WgQ z6EB}ca?5`n_}G2l^9Ob>O#xp3R)AAT&iblz?!L#>_x%#`A`}rQ2*ckZdz)y3ZK>eY9LnoW@0L&j< z+XHI&aI+sD8jrXG=1=ed%pYYNBIo|EAz0W?3%;lJp#ZwG!A}8yl?Pz{s9OW-zlyZX zeQ2P*=XvPPhCYH6O#TqZ7R;`rQn&8}b#JTgfah;$YVUiGj|~wl>>>-rcb#+hJp8z) zfbM|#6q0BD6C9UphI2R^&RLwXIBT%B0#~9iI8)(_K?fQgglIkERmp2@^H+;)=RZ@S zP)cE)!>Je@4+*0brH>sqYYD-`E|St)zt^C?XMo;U&i>;_(PZs@9jOn+oD*qKS7XW? zX9}#XF?9vC{OxRka~7>NK^UTm!76HFF{TzU8$(@JaxplEbFvzjBj#jft`rIdDn^HW zf^?C1xJnrJQ0iE0$cUF6hNNm-Vdx&|E1I*c{oFM6d^`|$rEuX7Nn0_{c=;|+>z zo8ICnlKv_>j1K#-+)F!$U}PPkpXT@KgYOBTI~33_0)Lsg(TdZ?gzgfK$qQXc7Cjb%m*GjHwC2kT~rTr#%T_Y)xGj)Ok*ok0>gGMG^NF zSv>I=$zXNfGa?GX%-g_U2QJ-hJblN2-q!>8hmqCmT#@sgttqn|OtFimCQud1F9fX* z9jvuz9S}w_VHAtkY|Y{t?`kbN2#CG+R!ZXzNY$z4dUp;}l~iR(RTe0vNe4sXUSBdE zbxmEC6j?@9)i_vY;w+tTm*A1p%|x*s7+?r{t3f`E){67MQxGHZ{%|sT+#t69T8l@FsoDf7YO6vpe{%RI~HQ5nksH+lFRn&DwUDt$hOq}*m zKwXyP;|Y`9Ef40Lx^7~43(m>!<&??J6&BXc5heY@KBV`;o0t8Ec3iuoNHm=*XI|XzA{4fIOxe4N`swCUKjLohQM*_C0wBQ$kN(Y2V zk0?&$Hts!g^N>u0AxaXWq=ycJeM{h3eB3?|k6M=nRgqJbrBn@-`0p?bF?CHgowljJ zI1cF#dUBD~wWI~h0vx1ik2IBSv_Q6V3F{QY<^mBq>1@Q{@@?=rU#PNC(SA$y}|;4>Eyq}j&;;CsNz)#^!GLryBuaX|&{DO?GHMh`8pJLMr2B;VNFe0 zqPNU{i82dHgYqyieyIl`^0?}uFYF>_zttQmt z%eZokvzEH9d|6spZgJWpj*}M5#z^L&u4{~u#bDa&k@Sb?Fr-P_%}iqL)_i`s%rlB? zLXl^f+Td^mK_JBzrD?(%tpkD}B8*eHsGOBWV_ml_y&wpPqNvTLIBTiO!aquEol{LV z7}X<+q({>05ymOyWPxbe$Qg*C)U>cJfNwc`if%7u?nWK;5NLYZgO zRfV+zW~Ee1d~!;ov_^*kQIZIlanz-RISn%p2VoQwC8^vUlvEe1LI7<{O}{@RjAN-* z)+JS;&`RL~MYSu;K-?L^bP1*BB1#0o*pDEX`$xCxrElkweH;-Sf9SCH^j1s?Cs(Pn zO>6^FpZapn`IuDlx2BRzLTzfQ%6sUlLhFFEKOhJrpGN-RxYX7)#dJbG8B=6as!}c> zr9f+qR=O>$poQF&q&N$F!J8nQI{1}Sx^=^T5A@USLpQz z!k_jRO>>8_uErEQRO3sSd<)!dCk_tN9zxb@=Wq25HwAQONY76qQ&^AuC2mbcHQAsZ zU&YiV)*7n1#2D*K*_yQ1M{DhiBr_13THKwp-&My&$M%%W-7UFLl}nMI|uFeR8>J)78FH6oTLmFmx!Ve zycY|@h#&~$!m$$1*TsZtdX+lgou>t3h|JOX{XlRl3&dOX(9a;#rjEQSsB?}g+o2v^ z!IV>+v!0e|+R!OZdIVwAg4de5{oT}+#La1+B<Owik`yVlODfXX z8XaiilQ=29*HwkBrqtO6rkou1X}TRdiD2)UTY2#Z0=mO<{t0Bz`;lK&)MZXJxrV7S zxs4mUr&}bB6Ovx9jhkBl`FyiAhA56ndi_0ZR5v(4SYxP)jC?vK-xFpuV3tFswI&FH zHXe@R)PvbqADi;FwOA)r$sh=cVqXPx5|WffPClJbOWrabIZb*rY3v3*|!!kc;NTLI`Z2%wL=ced70Wm{CmE*6J%2vCh} z7iLMXhf=h$YLlL`Mt;{iAngqZqMLV!ND8ndpH9f9Q_3Qzt}DP11R;ShM=PxeLP^cV zNh*~{t)=?tIUUxQ*PWeJCxv(Iy|WWilH3W#Xr&k~ERiHVYGcT!6R?&fP5?!bWz?qf z3rmT`>$=2LC9axai}5^#9w!kD-qcIq5YU}jCtm?Reb{?+D^?d1%IP(1onyWCl!c(2 zxY%= z2{DW{?V>1-lNKC}N4Cba@v2r@3KHFBROedn?waG`L01(y*>pnTn_`_c=rAM*ed`no zrM0l);<#<8a@Ni~bEmb-A?0vurF|<5L$nH{!Pe)Uv*`pJ42BEDQA(f#@*-n*cMDTh zasg@GW@MW0XtpKrEn;O^5QY&Z-zJEMgvs3S%RU4AAn@9a=%pXzq0b@V#*y#dw$@VS zyVS+5+{%sdv9oE@bYUE~9xHz~=g^u#EK4zy1xR+wTePGEk#^i45&9iTh$$)|wN9`+vGirKoP z%64#d;eqEDRz9a2MiE*m-&SR2K(eN7u}adOt}F6lbxCnV^4m&S->fc(&DYlGG{UxG1}QCieh@h1-U@N zkfJQu-n>Sc7xI6B&{^eT5%1qzJat)8*A>dA@T#iD+KOUwjk=htG~Va%Yr2DC=^J_I zWrR)l#9?p!&CCH+nNelCU~BJ9ov08we4#;Tnoahg=^nAhdJ=s|7=(M)fHSW-^PI-i z6h$r>jZ)&@R%9j!q-#Zsrw*f-pb0Y^l1-^AUkbNA^f6dBW5zY9#bzN`l?9X0h@H)A zC#_@XssT?>E2dueN}Tu5cnUYuo~ONUG`rkL)`lb3!R z35AyrdU6k-JBWWA=@pC*d+Tpz&Kk;Whq@Teys3ZS7imp_p^aDDb}QQ!I+RveXZNJC znv*Z-y_(YJn}wrMVy(1cHPTyNb1KN4TkL zvdNh7&KAxYhKoz2y`IF@I-tm>Y+hSuGTxn$mpl`&C<~k~^EWy6s*+N<^&wVO=JLID z$#nM`rkb0)bc|s0iRK)2?H~^wA;I@24|~gR#Y|n3Pj{)Sy!Fa$EV>WS4Vay?Z7QqH z7dH*89ZQ3xN}$IcSxTj?-wl$si@i1*If zbP7J--0Kh8ZMDX*vw4lJ^~;#5B#J_UFz~tNntVEG8HM<;$=1dfeQE-K!I;{ha1^6; zipkc8Dsy{}?KvduxUN{x0=ly^Cy|xpTwC%LX78Sv~93jJ}Zu5!XRo1`gK)NmF0{lVkEwIKId$0 z^XPo1moU&;Nxs>GS^4bAbTZ=Fl}k)_w$M1DD3Uva4y21^I+bnm7h2QBURT28!{3eS zxhY{c;yyy^~obNBZjt1#$ zD{p`YI5-iV38OYc(%cEkB4cy?GMnp{D9eoDa7Ykn0xkQRjYim_M8~PH`xGtNsrCgL z;ay9{CDsWJM?SfRsd8!hoe%pgg4Iji|J)Dg6nLJSB(IN(Icuqk3AW179xNb0R9d$> z8I1&hwf;8mW7QyvTFKfr?(UeWYbj<-CzM4-RTZ=M>X~=eS`)=FaU6qELP4!cS&;c` zMtk@0uU8F~w4WK_soCAx!k7x> zw^M7?Ua;VNc16N50k_;uvhfZ@HYQ3J=0)e@Nd&9kq9gXGo0I8n710};i%h$7hAP{} zRC0@L7FO1CkOR*T_AmBnIN9I8d)0%^UBf3X^4xQqCsaj-tt(IOoM}C`?72w#{HnTY zyGd%l2sEZ{W9Ql8)b6>6q?Dz6`cLxNN{fe8T1!Q6I%fUSyKG#(L@^nmtR;>k(FO@4 z#=E;~gL6<88O3z2Du+V^tEL6Y`K`va`C z>~3yQvz9Va>n#S=GG zzz%cH$p_1KwB0H*Khmf)X)muk)5FugF(AMeIh&U+^8VWw*u8d@GMk{CA?^)GhKmGI z% zCS#g7-{R^_#%%0Sm;R5#KC6UuywsfzZ5o4N)CA+abM4HrmyeTlbyTF&}nhNv3MZto6JI&HjS zRaGdhNqap{n3B7T)`5Ur2Php-7C9T2FY(@m*VuUfJ@Uy8bv7Z164p+iV{!EabzQS@ z>0Pc}dXFlf0?ub-vX*Js3OY4+fcB8MmZas3r7WcSIX`#?Bt%{XHl1^=ht`N<&C`dy zb+=>AT3lTLwgoka3X<*swu!5aF+NW`%WR-jTh^}2LZk<>saO1La>o@_RiT4`B<-`X zxJ-Yr0EoPp@rys)0of8KtiQUFJaC>*DJEm#Mu(?xaqP1Wvdy9AQRms1_4hAv`K>qD zy5hlHWQ0M;>Zyk~@$h4)Fy!i`_qhD_1*Y4Z^m;vd{RPUZpqx%Ho@atn`xKrU2QX_U zXvc8)Ow9b?nWqu#UI1(Z=md#Hjy&&queq7W!GSfiVoHNBx%Xnvt$<7Aa z8BUyem;g|oZ_ev6ls6J;_@nGo>O}6hFoM;j*s%`Lgj_tJ;m0vW%5}XagOX1g5BQ$vIfv8Qcj$k ztUAo13FZGVo|~b3JZi0L=J8-Xn1e9vOt*4v{F`T)2Xi5@xo@1UedkA-_BnC#G)v2? zIHlU^pAeKxXI$YdKCLRbNG3Zw>~5|z+1VfoL)Okd!t&Zl!X!lnQZ5goh^ngC*}TS; zci-mfrFWR@T%*dy*s3Is69$7NhAXQCVZhGS%Urv9g>1Bg29mT#uQy;YSfJluU}N)& zENHDXDbQwqRI4x2q&SV|U^gv@b7nC@(@5z6dJ#eS9NDbQ4YLZN@*^LdwfG!^+(xY> z@P&`sSvki}diu(|5ISfhbz9Y5)}W*+D+YrF&YXRO;nE5QDD%uK8@Ud_Xcjk%x1TT> z?XtVI!T8!buF6?lTH(~$^DLfvh}cUcgt5>*r=t<;m)_;-#djHPUL~LGQWhE16-m-# zVQH1crB!-^Avni$GR9UFaTKAWgoTAA78X|M_lG#ANGD^;EW?&17P+_s-2m2gO8ZJ0 zavQk?t>+Qc&mtJ!3X%Bv47VZXaa62{1DjaTS&NDjl+svdTQSy#fUk5g%SHP|U{w^9 zMW+x_*HRqu%(TVj6;7Q#N3TDiC`&41+H3*PW=?Q3)uhqxHoKeajJG5&+)H|#eB=pM z&OA(iag`wLwekdYRk3mTebz6&%jV^aOn0}ai_DXVH0fZ8;nFh8t0!4nS|toavTQ=8 za>6jCKUgA3QWh4LSy)^qic_4m^!o#LGnoKD82UW7R5zR4xU&XhL?B0G&H~WEJi6)g zh$zjwA(Fa#j5+A)-eaE0W~H?o>+hFp-(=y2s1!!AB+fj!zahPsjYeEm_ywMfig4Dl zw0eTo6Q>EnkkNEZRaGs=x{brV#8{b4$ws@3cD5LAZBXW8(j?{Vx$~@^K1*+TjkrG` z^s)qXRk6K(g=?2Dvbp{~^3XYkD{I8*02M}9TQl0(VzhOQ-D_7F zZC)iC?NF7u2+deW6eXm+KEvTMOUtV)EUvJyutaY#AP8emf0YA}#C?K5i(a%RML931 zqqQc~n(@vKVHnUKED$u|nCEC)A9@)Bs6doT!{o3}?VVU35qAtjB&dFpIS`S#-WpG7 zu|`D1L3v4nrpu)Agn5Iljh6|i#j6$tWu8+M8C8){O(#@&&TwUwD2~adBkI~nOkI}L z#`rKLr<&|ijCXvBFT;4RzPxsthaP=`{>lk-k}?@j*xKBrn2yONBc{9CWFv`>>$>#Q zY87D+(eL-^FDx=xSY~l)mBqysp^v70!Z7l81Wl4kZ(y%K0LeT`v#%F$Z`gpnw2v)v zG%{XJ1(Ho^jsXp@ts@8%qGVxS=ZiP)d^2vzF?iN*^Q5F;O$&S}@jy$(xN}lE9lMz)h#g-YaE`?w1 zt9xObpu>pCWWsowQP)N~Me-bDine>ZE=9jXDNPur#BoZ$KVUdqVz{`>aAAps#bwgr zf)JmAur10oEoEA1Owfqs)VSI;YtwcrL7XHwFQ?EPvxafk@Wq`mXf1u0Q8Kr4#T(`S zg%GK-%!Q)p{#^)k;L~!>Qz=DStFkqd@h;!h#im0giBpo^kp6IqL0@872h_Tv zbPg9(xLQ-!4&^jaC>ZCEuMg^a@KNZm!&H%pA?wI5qpd(!?vArqb!+Wx|@V%Z<5~$K5HZcfj3w zWv949o1brF#FVKCY4rH&_I1{e<%pslI=H!>-x0P2;7kZS%$z9l?=hv&L4*!_A{P(@ zOm?=p{O+4vd;e|f=`Leqsk2OU;TkqvRbm}211^YC(*BUa;xdcNt1K<8GFVt4jAO}B zmnBI$Ac|9>P~;AxC?-jJ^62$Ql9bqwT2n|#+&M>WEpgJ50iFK6K^V4bN^vVfqlLw{ z?*S@=Q@vrpK1OwwZT-99TC2FDGNzYBh`T>O!_`kGPjoCJ@h%|XmDoNoC+aK z34(wko3gcjiRtzh7(<{nc{U=OjC`yc`+`a(ZA(E&6!qx$7g<_aV{v(v;ldJw;UY;Y zBZ@Pv{ZM()*NCEsFpOH6f;dUraS~w|iKuzYuXcn~ax5JUu_A7&qfGTKcy&8X7y6ekH`5YnU5UgeZ;bls;Na-exyzG|xK-Ns$p zlCBiA7f;&=j4Y75lv-yDb)Hk^Ie6ilK!?<}BnShdq(_(x=QU;5n8t@3tB1WMcWMH# z08`h5aYPg@x2l^OjWrX(FlKpqjW7xsk9G9EtQn<;PA` zzHy+cD(bStc+ypx#Ps@oqG-05Q_Tg?;XFHQsiqTD6cMI9A!vDNhbRaM4ZF&@e@@?pr)=WSp#TA62~kpFLCCfhge%%la!mUB<^i6aM-G* z%yXh%pUAHd013U~Q~*7n8IBeXz|wpJS_g#5B05Yl#RO0ykf_B=ro916%WL$9LzK@Y zZ(qE^)hnCS#t=n`?=7@`w#uwcYl8Q(UVJf%LXsq&*TZ_Ma^D8WBljYBsK}^VXXe*xKAA%W}#>^5k`^TWx0ET!Ct%L&uJ@Y+PGs zV`H7i9($aJ&YmOo&A*K`7m-pjMIiF*zJ_Y6gODIuAPDC#FR&jD_`=FuNERHp2TBvA z19TW+3W+aGQBvhn_~`eC5(n!*hQwRLcrvEfUts0L8p}&dM2+Z*m&z)O%n#-%DLmJs zEDOpaV>+3zyR%JE7MwhFie680&RQ#+Hn<>Yhg&M;X9Ys5>a<6S%sI-U;QjY6@%n48 zl1(!tcJ`NnlI%kqM?_)l`yfTbt`UkUij47i#Lo6MuNAL?Qat?dx%NVuY4iCm^{SS( zOCSCOp@2V5hXm1FQQ>c7gAhq~%%y3qNzy)1oKj~BZ6PmmDz6Td_WP(%nq>p6SzKD? zV;_5lxWB;C$_o875rJ@2t1oB#6xpgQ$+9Vv$%M&dLN=XJ79~n+)=r%wO%tlJXfqgE zYqYZ{6?n#<_C0*GbXC_d{p^hKHyjRFU0r1-*ddHUsX8VpaTJmEWR_x@N?fmXKoACg z=)JUm?e6Zdv9ZBuw2SpkxWWMN0yDUFFj19HsLMj~;?4NCxJNQrlDK;Qt=9m0E<+AL zDt76Rd~_8Rgv4=5o%FmmoL}T9a7we_bIm~*NlDoE9yW_IkU|5@D3-P7J(PubYUd#7 zrNmK4UHkdnjij!%C_NK!Yy@KHOxl{wbrDc6EiUu%PdrDF=cphcj=bW37!rj(tKt{G z><=ZZWo2cRGiT0{=NU>Xq9DW==_TyS7dU6B>Ks$$s6hL?ctDyi(jTtOD~F?N3WyuF z-Q1eenlMU1i@saj?@{F`&e)llqEoZi`kZnrwH3%uNtAWv#4LezME-W2BxyS>tL>Jy z#A`05tZIKYr68Z9_IDKR zXMv|lEYf3jjqj+E{b>GCawn>)lCak&3L}CbA{{Ohr~Sh|jrYo85fq+FbClVb-76QU zMjL1cK@a{cBU5WF z$|?WWrdZN!;_TuOR-DCJ0k!Mol9kp3L6i0iXMpw>o$AEpv(K|wqcHgCv&!#Z!$6!# zGzoc2X>=G<)rQo`P|vECZK|t+FzMZVF5}U+`I%(C-%M4p{r>maz5E(MIVJS1Lo&|6 z&%EyBdAkq)pKVwWv?tO7CXnYX;*kTbAq-Kb1}DI83M5TlxotUUJ9j(b0n*baX}Z~6 zKzT7mrJ9Q?oW7#c6saozp1gN3}VNb`Ga3wyRa$W?1}NJ-yYT{5C79e9ZXr z8(dbF<#W%lw03UpW9bmE%vq(-IY&0yVB^B?V5i$6$E6e&50XG`(Ha4ZQnM0sD}f8` zEgmmvP>ZmEyw88uth{V*P}y@h=NDkkqMgMN9DLimQDsndKg%^4y4KsyDuQx%u_&wp z?Iav=%FJk`_*{wF``HeK4kKLiI_przqU)OS+C?_Yf;fs9telzWe6$M@O|bb&LORQI zcav+E-lUq07%naoFD(-EQbbitT@NTV!&9Rnmt`4~tY9=6u`?PosS0!uu#hAy3W%Nswg(DU^cGMTU@2LxJodeZCC(h1L(QR zbT|jK&o}SvY%v<`vg*#Ul$=4`WH+31Os5&|Ub@6f-@CxeZ@kUB@2``W6=5nO;ifDZ z3{oCFdxlRv{U{$h|1c*{tP+JmyUJ=PolV#x)`T@3aN%a^yUa8@n)!)Jfz=X1Xf68H zyWkIsfP*oI8Drej3fhb`UK)HTy;^ zjzDSRAR>-EnX8&ml{u5GO(x?V!Z2dx-22!k%6SE}1BwvHm^VJOl4+^^{t#DJOvbxR zcDGqrT_Z^1c67u3-F42gy|c@2eCxOQ+Sgy=%1*}4&JN?JAc;fLUXP+Gsj7;wFI;l=0p!55z8%*i#vARr19 zp^Z?H0{o1^AdozFD4CWhFEHj1Z~+Em_C%ffDBYn!is_Z9xbcV8o3Im_q1{QG$A zwbyv_;?E0rLqR_Y`S>G?I2Ew^$j2G3o#UnNzsWoAU*)S`e4ZDcev~u{Z+Osbps5LQ zWyN@Bi*h=qpY|9mE)(}sf;eH$mQ(v}90DWeO>YuKl=SE=EMamfK7{#H_`XgNglVg{ z++8ePSzqVvjWJ*TeSd%-{qdi~*_zj1`Zcth@E?BTSGllm*%?py?caHs+RVngX$964 z{Q7TwhxLsuzVgK%;QX02Y@~59KJ7P~?Hx3854CDXVCcH;s1`Y2krV~}OY7_W@_+aa z-}vrp)M&o+!sj@1<}}~@<~J$Ivh63_*ew|6B~LxP!V^!P<0t;ef6nEr*Z8G>^RM~F zZ-1X&2p@m^5nn0v=3{%M6gG&dY)CcUrkIQv3)KG3C094D@r{=+@bZN#q+x}_@vndJ7x;gE;oov){VGKn2$T?1Xrs=y@`w6j9PA=nXLAYcdJ83aJX2yRD-hDhN@wZkwaE4tV(Chk10c zO5aYg*)B37MCT$*CLdF76h zsL~2$EHTOtgl>n79+6{jQ% ztEgbEV9+%STn>SE5n02zYA91dKs;Qbh!T|Z++M9PWl7*PD(XQkp@Z_wGgEgwwsH)j zgx~wQ&+^G99_H%Rt9nr+(;@oIkz9%Gw#0nc%i}A)jE&sR*yvHBA?= zR3Qb_L2r?~beL>Pk|ZR)!@L=Z5u|;hv_H=zB?DXxk->!pb5>kYN)r#3QOOXhye%D5 z8LU;PFa}Wf8g`{$Gc;$?PhFlkC;v-EDci5 ztPBZVNq=dL?ib$(%M8#mF4>~AlGd)YN59`Anr`sO zsU^Ph<3GjvTaObnQ*#N(Y34RqE*$ zK@bv!5n+|%Oa)=$bHN=_4|`{Q>xPSAEnyh4G#s+LxWJP-z$z{3oX(+qW2%7E;%tpk zH7<_OZXh1N;bM460;K~fGdByeP}KRAQm7yV9C4Bohnmn7tfdh@{JH0;Km82akJzvT zgpp`@1WKWr@pQ&#NUSJ_&c-UcPW93sCoSs@7Y)fb-bN`)*iuquFp&xql7$oK`I#bn zkd5#m$0cN8c#gSB-O2Eu-r@?=ofNDQ^&jh~>WUyq3CiR^UP9YE+7O9sGaA{Vj6zum z0tmGh)}GsY8*aqZgD?OW3)q9%7`8@Ypixp(o<*mjji+V%qggK_j(!rMlD(0iGp4-| zjkDC&Ur@$Sn;K_p9Nh(EhmeIVhI_*`GNYJ`$1H{+VH^`i5utC_3VRF0!DXPq*BU>w~qClrhsALgm^Y$`rM9*85f6puS3Iy%S z*g1k#cUs%}#I8fODAA==86CKWW+6lEYB6_GTHdHtr;*`ee zKpI;mu_e-2_^}p^7ZST=5o03GrZ=V)H$;Uu=cOQ5k~?S1{oc zWdKHNB5kNO)V`BD&|WA82#j!Pm2z!|i!}=48gCA@bK;Gi!Z^7gnnCnUnyle?SZn<) ze>ULLI!oysMKkEqI>O2l)rLSppcSDqgvz2lp~$&_X6U_@_HwLt)Xrda06~Byq7G83 zNKqM0ZDl)a5-RK1-QFgjju|RPlJtnVwqd>f~Z@a2}mx|n)oM$m~REpG0nASE-IUF6e zg6lNtR42UIvz5eSu%q4Nsqgz0`LAU6{4wF8HZ{VZ_@wYAi> zR7`8%>|2&Oc~N5Ok|YeI;WkYPgAnT=8Y~mdf4GqWZvu4#=y!k(<`K|J6AzbAy+x|& zj*O+y5*`@e=&A#`m0KsO7BcS5dhe;)6xYGGC_kMRIx<_dN=XOhZTED>v?@ue6E92r zu9^^{^Ho+Uv<_uv%mG1CLWV8j2 zqN>pSWs;>6^W34**jxCDcXLE{fmaTDtM1f-Fl4xThOoa(mS;Fy%PrgY7Yg$Za6WJA zbF~dnn>=mHMEJ4pA+TxQpM3(G7${3O|E6T6+! zOpl$71(w$-)o5|Z-`$4Q#=Bh)3fkA)iZ^TYFq&r6>z;Re8)chE*CTg5ZS$SlbG#4Q zw(j%YMqso;`vqrRS4^`hLDFaW+@ma>e)KqWdY8b<2!>lg7YNGN5drkMGaZC1KlBtz zh2(F%Mlo)N$@`9L3n(dn>kfb#0BEgSFL<+Cz4clc*Dw6`36{70h6e+6&*+E`uj-uWm;u@%3&Yo$Q$Pa* zQNq&MCmD`vHnO+&Xv$e<36yS6cGufBK)soDLDThwT_6XZt!AxlLy7(I@CR!{-~9U< zvwj+G1N0{3=z`i913|U6Ch#5L%ZI&% zcVk)yL}?Fn=r!aF&My`l&)l5!FbwZ_L3ATfHbCz_e=8TuoqYd6vGo3*##(|PBuRUu z!{z&TBJQ7k7tiTeO3^LekAZI^!S&qUivAB*Ikc%BT#o^+}p7m#kaTf z{^kzS@Tw2mw*7H_^MCujvoV&zU_g@0btUjdwhMdHd-r8j_HW<*%uBN`-QSxm zNmW%WEG*FP9~=F;u3Z4WhhP`j3uu6gh?kygK&Ppw?vF+z>be#(P7t)S`I$;{W3XCxNO}gIoMn#t9z5CN{ z&1<^0f8lwjcC!U*HwWD;5*yE46a{e{bMoZL<4`==Z({_jZTt+^i!kKCO9;_pZY>N$ zmY0`NN+!B?3ncriesKLQ|3-F@C%w@HP}lVxWioEZ8c*DOS2xVa^PD`-Sy@?Od3pJ8 zPQ-_6Zy;FByZ?C*qx&u3o6LFGvAn!Yuh(O9bCbwR3heioO$c!(-m9C!Yr>GO2XDOP zL7#n4Y^@H+jepP#!|sLITtLmECcfyXVz^?&+ z5IAwzTYaatu&}_HGiTV?*dWjIJ>ZR^s0Bl}jJ-d6*w6DgsH(W%TQ@(AF*oFEG_icw z8jv@4fbK%Hd2|t$UE3cgH-GOh0PVkk zx?x6HmaTU-#_-rgp*yz5<$EP*VhSd z#f1HyiPqrt!natXN`(6Ndza7NaxR;;ZW#aAk&eQ3XAPD&Q$3M>6 z+S+mS&KD4DZXfjIb(e1^mi`X#4d9u>-h;cb#l=OQe)?&)wzkN!?0}(^*T>O!1A_gf z=Z461yPt8;@6F%Mg=mavft=?#lgWglD0udnXL#cA$B(0TcEE1}zYPahaX)B}F9N>| zdm`hVi@$kbBv$eIwOE0~|WHQ;qUfa(}?q(pm{eb%q;PuS9*=Keahu!qutz0bo zi!wK2>PdT5Nm-UHn0I$~dFY`teCqk<87>?Pp7VaYgkbW$8@=E_K>GvfkU09=%rT%r zO5smG{WRO#+kF4~-)AzJV67!d5}7dTOX3G*77jQr*YT4N%4v6B-(B$C3ZQTFvs*xE zJaZFfj7GaGE-v!oi!XBK%$a#s5&a-W(8i!q6v?>ZFx&&`Zkq3)bRK*#5$PZ<$IY@P`_qNZ=XAl`Yo^g+OGKBMdTJ}3m~mc9>)gZG!vyJ^Dx`Q|Q9qgl{4mB8_MOdQ8N z|NIMl;uD`Zu0<4(HQg@*=7a8Xw{j`J3j6}_8RpzeE2Vho>{-6>g&*YG-~KjlyzvG_ zQPA)ANz=3)#2H1=OcJ-9ouUr}bQkQ+^Ib6RkHZh@F4-T1M6~W-EH+$g+0=na+e-ZK0Kf;`;EA6+Y;F6{({eGWUUU`L` zogMN#CrJ|GIHszq7TkNMy6%m!yCKE?pN)s!-{1;2_Qw00VE3ozx@GOMC|FrtUi`*;%oR!TM+0=S%XXLMlXpYScm|r9OJ$;%cOxn(+UAeKX;RU(&st}_4E7v z4-!m?uG@~*aJO9`Ylh<6WZ5g#Ny(g^Q9V(kmN=_@)5L+G(NNpoht3vn?iM+AN8lA_ zDpTi)=R4a6KFW<)V5J^c1s-H++WuPYq^CSA-8%f^J(T|G0lR_5fboxhL1Q=k0zZBE zsKYJ(w>c4ho2S#v60%P?y#H!~yH`G{#2u`iJ}-KBSmtB*s)joTs9NLKcxfe5PRm5E za)zR=8h5yM*2#ybg{!m~tNR2IGFF^g&b8LZ>9H$S)}EMnwhr z^NCG&`=im-qml*|M}le7inETbZGXpXow>4GPp7%9jcdchy;|Vmc?3O2w-VEymW^$K zQH`}-QrgJ)vPQ zy-z_Xo|GL()EpA*P86)QwW%ev=8Q1USiE>Hf_pnIZmW`anI%mWyHCp$h8jlM(sGry z)Gzaj|Hu?y!`8!3F4$1Xs*v%nVa#Y;L}177GPcZdG=bx~(O0h%G=Vo((J0 zpw%oRad*#1-r|p`78b8?%M+(?irGiyjwz*qO^mYz`?V^;IbWA=GJ~QD#~TL8YVWhL z8f%v__VDWx9&wT@X>+2ZK<^1aam&QS#CtOv8?qf+640ifCo9V)hgZ2|92M9pQne4v z#LrI<`>OD~t=_n2z>IJ@bmv7n-vypor8dw1Q^j{Wx#s4Wc^H~ePWshZX=HIJ>%L#p z{1TtC(04?#t~t@MWY)>2#>C$qYpQ)q2cgIE0P)xpSeFtFx6{h;8I`oDzLvJOq+$IO z!%)xLa*n3e!MfOj#w7QfY?>7)9WO;QdnDgzlkb34Sh1M;sdxJ*C-v5%h2P*{TW=_; z?(nOblL^hODMuh(Tbm9y#eMl;-dA~KedYnv6w~L+_P5Ks{zSD~7-U`->wjm;OHBuU zY(cPsz?Xh#EW6cGIv3g1-K{w@Gjq0`T4(v*c01>3_pUE?{HLNhYbWiJ?i`K&L`a0!+iOd}(V8Oors9mj{!4_R;2 zKSJ<}5~KaST1#AUSAQm_Aov${nch>9Go!KET*_l+jdF(e&4YO)u3j(gg@(QM8J~>cuq9!n2C2 zBB};OBSVhr^r?+}mmT>k&^x1)V7&*?1JD>HNqO)|%1ht&`h8Cyg?R3ooPsj(&03mS zxmASb7G2qn*Kra;p;(h$utBN1+_(9%)>83fWL7RGH+Y;70!u%*f!}w5t*cC^tz8Cv zFbvpjVj!P^9B{HdKAYEVAc>Jm;ADSQmR9xJ!65^T41XnfjPQve&>yOwO2g%S%UgAs zOiF*H&a#ZgEqJRV1VzVk72PB;bEOHCkxv@^I?o++IX77~=9IZpY=abF>Y4RSPCor= z)2M`;6m0ku6N>uCGv35S$F|N)#Llv_UuLg_2zlU)+ZaFlwBUh1kDBt7j7*u>?B}sK z&`7F;C@fOTsKn^|W&}5MUhn~_U^VUxZ~4wvQXZ8h@qix&<8u#=r>-?WnaUh_jLC`o z_Q(U1qUAIk(|u+3E$D+I+c|G)D;;#6FZO6p%D|Wy_@aLt&RCd#hiS+M2a=is>zdQ92x-heN~eaN=U6JdO&*rfeU&)}Zt{%dwZ zi80OV*q&l2iL8kYA>F!V#KJq*C9ubPiYHghJYtv0U8f9hty6Cr=ATf` z`{=#&RYm02N(j#ML4MLd8Z<|>)-1OKrdAZXy*Qy^vnSqJf)26|QfFUEnh~g%3tj9d z0&g8XlqzuUm`8xiWUSOQw7nnmLVt9$5E+UZFmyiF*Dz;1&njxi)DB3FKp4wG@J-w@ z-Orex?1TLIErm};|KLgp9ZU7FqE*mfYq-wUvX&?gQ;O8>bf(tZSNV@1^=1v!0Quig z-Dy+#q{~67iH!$x!r!A@`GZHa52ndEHiq5GChZ%9m2lSJ((R_*>0mXbdiIv2t!F0E zbj&Yzyg-7eq#hCi+i(6Fm*b&K*H)98El1jKv&~W5gn?9tqyeS{@e>>nRF@)I)1pI%Bp6b8%Z#r8{+~>X>WE zIBGFXA8?1clCvFQZ2ZEv8rx_j9-0&UR+w=7i}sfEa`j4$zzu=UJ4($~7Z!pw!2JU- zXol9E_&~Skm$OWMtXXTGz5A$M@jzV+(Z-+7bcZqVQyG=+ph|drGOa^A5KpV9+VM+2 z*(gx9UC2=K7*J4A=A|NoeAd#t;hD7li>-E|ic_YWG1=SV_PLA13%{SEY2SHl?@XB= zz0}$B?O4yiS4HPCA8!5_Yz!iUZ$i23+^#N(k$LOhoahsB*=%*EAaRVV;GQs{p{!9hmewds6xzqy7K=h-k+v4r z)>v!nL&?N-W2e6o$du5i@Z|rW;BPu71`>?cPoPo4>5LF+7$}lXkE3A`h$wPML>O>I zk)o|A)QAq=-U@&NB($V3;~dx-yxn+4ZkoIV_EgEHQV|(t##k&Ba_g$S+QRl-z)~>GCYn*0*(CP0&z9)&G@TizD;L#D} zSb7X40udgP7)7GQ(hz^Wa)g5eIwTBjPqIVX+F9G9(4jUq7?OPmCOj-0=@5<#wE{A% Wfd1H<;!}YWK*Xb7ZjG+NS^oiH9ywb8 literal 0 HcmV?d00001 diff --git a/public/profile-512x512.png b/public/profile-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..e9edfe2fc89e9a06ebbee79b49eb84a9cc403828 GIT binary patch literal 91392 zcmeFZWkXw0(=HrBfMCU;P$WQcD^77}3&q{F#jVgnaY(QN#oeVvi@QUhcyV_t?(UGh z^gYjgpReZ!JfC*f-pTA)d(FCL=9<|FRaKV7#iGCh006jh@87Be0Klh@KmZv1>2Tpb zdG~ZcaaNa=29ym`?g9W1fZSUtO?TsiR*yJJw^)WPasqOXsn7uPI3LA&%Y3)oj0Agg z#_C4|bl_#2;H^CD2nC^pc>VVlvu{BDfP=MnQ5w(w=blgFF0ud0I-mtg z0j^Gd_Of97AC*8)Zj?N;&FMVfBCPrR%KkCH)cI6v35)s zA;ajAsX#w)u|h%a>%N^*s>9Z{ZAP2Eydg)9EAf=Tdyf6}=-tU&yR=^K$ z4iG}v+?!-*lxVZ*m4{~^NCJBkPoH1-oo6aDRT+o!ovUka{wf(TV=>6v@Su&5kv2XG zvKM7}0(WuJCzz%QGi?#aZ$L!>Jx+b(47=6bI{(F2B|SY5G|1!=vuQ{HLG_@m>RIW< z*@K`LZ%U)`Rv+Y*B(mwz&eBoP&u*v0TPUPjuz0BP?8{cnlq|5JviUq>9XpHktv_Di ziLaL_G;G25i6nXUih%wS$iqmC(D&*nkSUwh=;Hpfe=}B=*E7~ z2KWeEwBOig`v(xFNUkUD&#Q32d|h1L3)c+wz+4g>#AZ>?$0I zmHJcj%-;2 zcA|a9iw*yjTlE03eh@2`J#BVTG$rc$o{uaFdT{{v*I8@SxgCAI1udF|hO6GA)Xcdo zjT;+8Lf?bf&D#d^)Trg|Hwqv<%eLq|IZx()j$0WFqV@y)x#+vHimNo= z4<%0de!~agdO0wCuwBlwU(CBk;(zvqq4DzW6bFR7wP(dy=(}M7z5NA`rcB}Xya%Uy zr+rI&Ag|F1DL_sMbP!7UR7U3|T_3L0ReyD4V?PvoSV`HZzp2iEAtf74O-ONxo-d=8 z8_`LTq5m~hy_3Ch+{3`K1y+B3qwS%PD;lePtgFBDhGhXm^xFL?XlO5xeToMPdij=5 zLup}(lu{Xf+M0eV(Tyc!8icSOPr9L=cs~k@JHFYUpe*@a{EE}+Z!8CV)@E3yWqAm8 zvlN<5pOE$FLocpYtQ+u^5Ow_NFLK>^7XT}ULduBNYC)4D$CiQ9Pp1`D5Br0X4HmHkFltorw1lmO`5k(}C9 z?$|-$$!7(fldey-LK%{)R_~s)9>H?+o=pk?RGsg-Gl$J-PFKaZ^yO)lPW80KMq0p|AO^n18CC2#fJv2!ATio)2(R-o@HPg!0$Nc`_ z)NX6IO}rS}oyGw}Xcw@y8Zakbg!Oeg5)hX4!yk4%*SF*F9inu`A95ckrH?nuNq(Z2 zZZ{$xik2?n6b=x+E+h70F!@Kgr|Zcjw~Rk z?mhaL0N^#{+&$LjfwXXjVX8%(tuMM$OQfDS7>vL!^+Sw7b}Jvn^4zfzI9>TvqjkQI z6j^-l3p+|z51G0Xd&TZg9&jv=|9{6FWtp zBWpUcLUaK+Iw$unf1WGm!ZkwgG~FWEd3-25r(bRprc5XBlj@|rDG zN#n|HdXM+^A-)#t_QA*T$H%8_3fKn$^wEWJ+pjMWKJO@NkjD(J54c%vmhd*(#?vIN zHz2612WlP>itwuw@D78*S=efz*UWpfky%BTnJV!C6u>#|Tk0(e@lX1A!eTy{E6@$|V*)*;$iQqv#L83OO1y zV#+O`)MVY?zo9vVldwf&v}6&{@gvmkS2N6@5MAC&#pK`euLsO)KlQo$kBn8l8xxQH z8T899v1VS3#o+J{!)H9lv!`5WHQ=8GLEfGQ76bwmt}50NLi=p#u+L{qN|SI_$-Qqr z3=J^WSu{*{E*tv>*prHR1}cEwFUCY zMdJkVi1~TkRexXALIrln3#a&2{z1KgP&9% z*F%IevR}5#VOFN1lKt4JWcE`Co5H6oU_+45IfQ8@kdom5?OLusa`GOK>V^((;l>uo zn9(Y*m`4amB`Q>75;`$s6s){o4kXtQ{g z)v^!DUd(wqL}gYt zVqKhuNM{sfoz5}EdkYk(e@AQ4oOAw=m;jx;e6>dD&(`I~8%=87YOObG4AAD1G!@;y z4$u56eSW4Af8KnBn)~N&skhnd3}$ZbcNI`4?lSn9;GH+_|immYeoNahwOoXv&y8SSdtQCs_!<1}KB@_H`d4z5$wDX#K6i|Tu)$kYI zu_yXp6_Qn{c*ax@51O!b_!BHk*$=m z0Ym!ox@%}OgH+4pM`=pcwX|?AJYjgu*`}`Pbb;V0JVXrDFMqN}=ksePl9bds<<(QV zuS$+GuT0j)a_-8otc#^9rn+C$3~r(Qd~Bt%$b&?eA0oAXH62_6KdT>cwxQiusXD>v zNKScsTa9$H1<6k>q`0W3X*g1C-n`5LEK(O>riZwHl13y&C z1B!^J1f)Xf(-y-3436kc;*j@EbX9d4STm5C&FBF9f>WK>-?D2`&HHg`Kt9575zbsU@ z*YPv|dz#HjZHlk{*l%75mV0_OC0;`iPkb%GDursLPMH_YtKGRa?YgEJdEx^vF8enS zAVl55{QecrnRZaps2ds-jCgPDTEk84opz!bdwxnNRyoQ8k7VcMd*w{#SBH8csg-N* z#((3iBi*XrAWVvf&{msczMps_=@7-nB((!vbl@IyW2Qa*qbNq$zZnuC-G*pJG6#>e z#g)uqGIe0AfKUAk{?R)H?poJ3>C?q2CEKXvQQvsT@$$H72gpZj-X4&{ zM@o4+-X70_0SYJS12Yzq7k9y*V0sNj_q^da%M&bIxSmtn_wjzsTaAz95maKrOa zfY9oa81&e+#rT)|MQJ;25Y;C@=xWqYxUICb54gr2?*qdmBFM!Pqv_AA&ixTST~%qv z8T?50By_^j$C*0 zQ+l-^asVOM=$pbQ~eSDX-)a|eX*9fdL zmMf0@HFsAc8vo-PE!|Yt#gMg)u79-sNLRXfDw8;`?pZ8r?A+fOtzS zDmy0%!8G(RmLxlgCgs0_*NVi+@m&D58xUKX2ReLXf27}8XrN)mnbdFKsCv!b)XfbF zbt3>Q6E*Ze0Qn4kVTtM9ml(H)SxB<)C^Uw(x8zPyQDBg-^1pB--MZJx=Oc(O?%Qvu zICWnxlyP7;WLV%(o5i8wxC2+zM2_a}AJ1cw~ysDZ3s#;|9;W$*s4k4z}- zj7=EqnZJnlTri6Su74%sCScS)Y61PR-uzfbvF1o7`XJU*AS0c1SjipixQyz;JlTpN z9XJL{BRflxE91-KWI`DG2;cef#q53g*2Cj%d!QDOLDC($ zYt9~b`hEe!nO%DPOrpOX>k;Y@V-1%ex4U4wN2xTE2h6w9zeeo2ojoi-<8!Q5mavoD z)gdREPfYZQX88eiI+=V|+!`)syS)p;ySCUW7!RCp#k25+qfl>AQaj{xm3`^HQ(-b0 zbFWX2q1#k5R9qh;y>{hn90_U3Kd?Hv9^+4ZFyb#q+_+b~8+$vwva$W!Hc9JS(YUFM zcvb)?I{bNKHg>GuN&ZI(BKmy)=08hOQ-txmYrjUb_h^1gXmYOx7EbqSH?9t&*4Pcc zvaXEYb?L7iIPZ@ZA@_EJeY7MYB6|5L{K4l0IH@xFh(?Zyc0s(^5#xQifMjMec|1iq zCRD)%Wl}!@Lgq5R&$v}rNeqe&OW53789}nDCiO{(pWGpko*X0?&|5?kE!S$}$F>aKqEM_}Qr?K#%zkK2FU zll(<0khbpjU~-9o8IaAn;w^fd7PHUcxbvZ{P>|Ii4+p{(?^oA-cfE8L9woD~P)zTChbO2aw%;@8Lw2@#2eSI@>!SP3``h8^cymC&uTF+H1p&pex9$6_LO&7* z)1nS(cFujg3A(W6aoZ$F2}trp?}xHBZ@O1v@E2PrcjS<)-Ti1l!l&YbKNl8?`RD3g z-K{vkK_^>UY_z@7Yn~wT}7C zDkDY_wl4ndGzktB9JL+rHyZ{1og`Xk$#m^jKbx}GecIe_Tu-3K@1zq@r`t1aR=!7( z&T=qn`?qiaC8_)mc~9oNTHaD!?m4f@OYA`LC%gTwtH^cjSHm`WR^}29hqETjfCN@L4ADNZr+z?{l)Bjx%k44 zSHRXh$h?%u#?_>+<8(lm^x~ZlYFCG^{1euA%k!Af;y>+t*TAC);$$u{{p0YW< zdohcy$|OA{EUAe3fyVQ`dQOv+SL<%wPd>s?A+X**a?|1Hd45iI-o0&~rjFXApQ;al zH3~hI_g6@4u7B}2=Z>Lq((bRoA&f|e%EU4Dq~+6@vxEJWefht51aJ(aB=;|nlYN;d z0;K%@u4^o%FI;TBqj6AHkSFa~-kh%doc;T`9>X^Dh{^bGDAax(_>*rnoJ}HEQmScy z;_?Xg`-SJL8QI6l>ne6*d|7Lr#skW6UmM(2%zJOre=gNYR`ZYdiu+!D2DJyYWd+)x zK9Bc79|yUXshQ%}wxYT$Ro7v5`z2bOi#i0Dj7RGzHr@$s-_q{<%q@>Y*~1E1m8f^{ zbEjGQSQr-GK-pIWF;0QVeJ)=4bJNQzT%v6HCcF8Oga3S6`|Vf7w`c`{A2jIWNDL{Q zL09Qp%I>gizi>rHYuUkEHR|`+j8Y@;L~SM+)O7_b=+in^NX*=YiD`JN;h_swQMM#r z+P8B(korSYs-uQO9nAwctBSq<&ZO^Jwe#4SfFPWw9ec)i`*tkUbd}9C;?mka`!N_A8xWUda&Rn1=?*zjecIxp#Fg%dk;wMT%UZ*9c-+;U zp}yg|!Tah7%d3#~G6q);HhRg5`t-?7XKeL8dmC2XEQRK!7;Ov`y;{`c!&~0-nS`2O zhwT1h)oL%c75q+Dw^JniC1f6jR-nC|R$CEuq5vxfz=HFG$V$7;4Nus#4d_9tKdac? zVd+T5q;r{>0YH6IYpbqfs=Jq^Y%X4nCQiJzIo@?8{hhBePHN!Xy%e!TiI*VHy(;2Y z*c~h&-RFba<^=ALSm=AuI$g;fmO}Gu3}wg0dgF5p0JmH7MI%<#E#rRm6-6H-9Uv4sho$>*XXooXe0z@@|jsV$yl$vGZ~%hfYzI%n7M`f!)t>mr=S z@0(m!<30cMZI4x|URt5&Mng%fCB=V-!W zO>av|0V|2`{r$~`v8T-2)tm&9#>`)Ko=Tzz*pWw>O4r0nJWN0n*UMi~=q^)qv}`AY z6rcf3i2nuhg#)z`7-3xZbLNmoH)z7;$M#=`;#zzih>E!=WAx6)aO@>RmJ)kF9G0bTT;yg1QBqR2wZ|Y`_;w3q=iNw?5pA= ziz@fMj^VxbDAFp3X~GLFu|4h=4!05y^&jimq%|i<^{%wC!pf}S-sq3F3vE@ZT%=+ZD=pap%Koyua~SW}=Ihl~t_anh6xaAi z?)-0q@Tm{5!f^xVL;8G|VrRD&z8q~8j}>S57?$L!0Xy1$kSbm~vR9X`#K(EK%OLDW zYL3^+l-F|<)7>nP=>(nNBk1tbF0JeSv}v+80KWTN@gdmlw-7a|>zRx(iW3m<;7#e| z%n}v3al20t*!pF)BP++#urP2JcZ%_b!ZZ=-gXO2-W2=@INz6Le;q}*(6-71n2T2xs zE9%XymRG@#tKW5V1dq^?aO!7wJXBGkL#H!H2-C`gT&B;Xhy!*vJ-++je@W0^vKs{v zv7zZCo)>Ki-8Y8j{0ZKzvA|99@SzmbK{Qut_ZmD$6cK_4k9HZEXTidEXpnQOM7ui4 zquBx*#FnQXo5KBPEjqaQi_8}&r78WS-($kOo@p{lm3UgO7zI?Ln~K_YWM3o3kUBsBp%h{L zWRL^|C4uTy0KAUS#i?VFg!?=SXXT0ya^oCd4a*)CcV@dePq(?@t6V~Df|~MB{IUN@ z+GTOgwkw8IR(@LQWhPd2`zi~9sQ*jqaNVRwTbR8b{CFWhJ%OFt$v0z%&?60EA5>42 zcQwG+mm2zsiyHO4b(BjxOn-2>z!@Q&W5RajhOXN716_fPT)0L!;D`ar;X|KI>!hjO zkS+z?L5Bz912m8;Qh?-)1$C;GPkqy9$Q>N9a9HvO$0go+Oc*Od3fNHIz7y9B`0`nu z4y=d?i-YN7s3vWmI*QiKmDnmc6=&D#)lmJwbLibce#?%wg*roXvnz@K*?-F|kayj7 z`m!U8s>mpFVHASo(G(})?vZV}ef8AV?eWJgmGMKW_w@@2#^ti>`AbIR_|*3}c1eq; zU0gSUJkK6k{#D;tOqRG#7D>-56~84_Wg3ODe;aIj1&@dh_|0Y6(8#syk5b)PI+)dJ zUUFviMo_g%(a^Q&g)`!l*M6km0zq^d`rP(RLY2){x%1gqfxS;|8Al)Z^|Jj;l5l-S zwVc+49SC7A*xBWvDkm_FqZp?_Vq9B9(qpZ8*}A*)i-9*>i~Kmd{xoF6Yd$V*CaCGi zr1Pr_7Rh51l6!IO?Ts)rccR-dn)Y50ckqZUI3L}fZ^B>L2WX0K-itZ@dvGNrLIa@9 z=5C)dCy?{!XB^tWV*t!)Yh^(su`w+%U=H~_1*vMOp^3Vx_A2LDHgsZpo8Q1_H>1rQ ztspc;I+E=-9mVhVA=$)$S1tGtWZO7`9oJEDzJBoN&wVNs{}{`=GhaET;B2wPZWqW7 za^U0OvV>Q^<%fNXo1&GLR+4Wq@2vU=vI$_qt#3RhW=sa>8J(`1`OatBd`mCfzBc#h z*pcbp8g|>{yU32bzGYWtUXA(mySbp^*fqM`>)vie;86EHV0;-W{Y_Q9V048?+l62zUOvb1kkUXP&3JD}T;A!F3yFEYFJ3 zpu#Fg36BJ-WRyBTNGdKKL&--V}nlitCTkfQRE;e*pP};Jd4+@vE3K?+UKA1&bBC<^cQtm zjE&Y@ESGrfOPS6KYl+K0N`f}E3v?W=)`?izOn5KksysO^XF68gFd!!d^ic7lZ;}JA zk(PQsq`aMzD$5E>e7jyNFoaCVx|eEJ1r^9ByzbGsjkuTi?5Hgmrov`yaDZBAG<9|Y zNjIMrjx31u)f}Vu>iuI5G7_AojkHU1#~0>kN+;a>B8WczS&AR|VGgRGTBz3;OFRoQ zJAwwuVVyHPLGO3K)GV9T&vn&{BHSP$L%e?bj@=~z^rY>Nasg7Mc_qw zxw(@MLq_Kt8#m!`R)sntYlaMO#=dYBF6*g|caigZx&jq*m3&{mK;Bg|MG#tQoTRsZ z-+L;j!a1KT=%J~s*Ov-6U|%|s$o&ESK{ETsF7%zmoke8I*F$GJ$nP)qejx&byN zDcsqpq4V}0)uy(Y)ZPAmscewu*h}Z6ciSO!WKjd=d*wm96o48VzE~RQ;9b@f9WGTg z37b`f6ujbxXge(=S~dN_+SzNh?zGTFr-ZxIZv* z>baRkFwWp0b;<-jhs_36zi{vciFKy|EE5B7@xr}4jWLrLEc)yTf1)}$j4v_qC4WJM zo1&)<^v##cWlr!L6WgRJ|)yfq91$LcG?4ZuQ5@w6F=;m3hacpQWL!pj-7eQn0`JYHM;i*63*~*jr3&A z)$URTxB%P1S!u+fn$4&!*DC&%yftjP->@^-Qpu0Kj?uo>JhR+xOXANY1ADtZ z8IHGW$U3SkZAH4u6W!4F@e9lT?R)drN^zDfigV(duEP76E1vX24U5#IQsgG9&uzpH&1x6>y^QEnMUya`OrC7k)IHIzgR|b*X_5D5R67r9!kJV_V zQcyFWG8Nv{uhYUmJ`D%@?)8^TOArDat?Y+73iRxYZf5knXHS0;m$?oRZ`~G|)zb<1 zt4G|WTnD6L>5&xD0kAa?IaN8f-orb*HwFWKU2OcWUowJYv*uj>s7aL3W#-WNKNVSd zDEe3LQc1E~wEmp-V;Tsv%GVg77bnEh@jCx}9{W>WBbxHtz<=~;plOf65*`YuXBTXN#O_agqxa@wTcA-}{VSR{ zFg0p*>GG(J39-79?DyKyR$vQ{hRJNF?h72zdUUKKhRm>l4rvl(H<-2Q*@pd?SWBH# z>hwO$ktjTXO3Z!|8`yrR9XUo9hA3p-dP&wYNNArG_;v`~+my_hLel_?0_~^STT;Ud z=+yWVZE)5z2i!_8Jkyww-|Xq73F|ZZJ|r!;x!+Wa9%RuYhoY3qDAC6zAclowu^2|Y zD1XNpH4vy|7k333xCng8zieNFWn+03|o{l+T!Q3f>|7Cuho8t$vCKb}7j=n#S3 zfKu>1dB}SUigk}0-UyX-8ZD)UVjb69j$uhjs}sZMA4 z&)Vg(N9v7j8f-*oO^+&G8|R`AzuAa{>|?V@t?hHa$bHut8L)Uo@-`y+(A(1DI1L0{ zIx5ITami|ehXBulx4!%N@}ZV^097p<6~c zX^X8J4t>@$%E!(v{-Y}_JL&*8?Rqg!8MUFYcg`Ma>#0G$rYU8NYDV$Um@+K3J7Z^= ziBIamBq- z+R_QuMwVSfVVw{lkCe_p@zGR1^daCc^)yY9K>JQQ`+1Yq&Vmhje|Zulaa0Y<+TZ32 zm0$%d{smX*&fyj$U@>q`zBRpYcEmIeD8yLHraD@_28`SLDqT9v&R`UMzPT8?P0RT3g5;aR?k_ zTlK*RK~p2U;!Q6CuDri%X7}ayp?7hF$I%M>%|Y)B6DWJW&dS08B(A$j2U)IK$@4b} za@T^cFurgl1iUz%l=oADHr$lkF9`HioskyeB&nx6?Eg3-PX2Y46^Cz&Jv0XAmO+-u z;V3I-_IGs9${7*a!K%NpYhyPy2_=0%%EDqAwK&ljs|XZ7;ZwWp)CWYe}Nx1**}SYZ*@4o38XOuw1w{~+25!Pl@fgi~0~ z>w{mXQNIoZ{ox+3RYAW>@e3bWc6cK|>40FL_-k43&FXEg+y#+bcVZ6aQ6+qICcs`; zwyqz*J*eM+*_)_5eKfa^m9FtSP{;1PB>I~z86k%heL&~xuZ=^Z{&`uNYX#EsXHU(8 zPi7+vBjxgV4m_XJ&0lZpyHGS2UriFdnyKy`9&%27y-O-YQn?FW&Y$9F^FBq3z#+f` zmq#jRs>SR48X7w24QNQ~tN0Vm-s+bHz2q&rR6;eifcj*hm$^186~Gx~5UxV=VmJ}9 zq9QE!ywQ5E=zmqkBFBqJzQUoujDgE!R%yRc#fzrDB9T|oCQY~%oYy*k+(6xya)gq{ zk5pl9lg(1s#H+KaHa0J3ddh=TSaxE6rUF()KRey`xd< z`opSip2$Y1m98Sj5-rErxRGHMOXE!?juLe<6_Vsl`D8@m&*1KtV))5X!{*aahT?8b z5GlM5`~eV1*j7BUmaCnxqy(s|U8gqb0ux&^Kp-xjV!PCoyDd;>Bo*U|tr>8q$lWbpuY;$u`~WbTC6Y8e$VU-Tx%b zK$_Q^rUTv>jr;ebm<+Gyn9HTiMS0Mx{tceyDl-6;CF;0I#`o$`9~CCBCCzzXEu9F+ zndZ3=l4{g&C5o??Z#oFiOTFnhgBo?5tVXRCNg1NXdS2Qc&r{v2ho3qRnJSf_e?e!G zEFN_~aZ@usJWIOhRB~MX_{Y&OssiEI31{1^w~_^DG`nMus@j>b(mqxQ2@Bz^{ac(XE+;6qF`*=s^j;`SGz2B`JckvU){Z% zf#3ab-oy26TyK1;CfwP%;XN<0t%ZthAM06Ma+X~MKObbpriiZLQj-2l;y)E@a&Z$I zTn~8PQ)VGR16t))sQ`Qj^bUgt=28!v*J-Whb`b@?1Zbmjfm=gr8-Zbm$`7-ZtaB;xDabF|BJKp8x2Tw`h?ZU#>viG9?SC~ z+X6rz5d3>CEsL4>Z9@MkV2sX#6{`+Uz9zHi5#Z6<6`}!rg~6lo@r3Pjl`=NnuYw#&tdaSQJIcFmmg{9F~@q%e}AAmikAX zVv(-baB8co*4*Cj_vGLDEre1=$9kTVW{peJ%(q3%m{D<1IU{PFc?p)BAD!nf7T zR09Xh<4+oZl!D(|(E_$Kvd?^s{A=XvZW{+oQW*kpG(Yy+E}JCHx?h|F59RefW;p9v z{SDpELWj0Oz4vJYp*B}h;}V8QnH<{B9ghK!@NS9O6P+z3mazPiw4gy!-rW_${_X`q ze;6*X9TUT*q6(&fs#qkkB@b3FdO<&x7lE#koy>UNtdB`r<|x>NugD9~DAeiqQ!=uJG7r_2 zX%2sVQ3M^nUq@PdtjwH#G}>P~4dqPj5X#O!A~iSsY^;Mnu6N^t6YYciL;Sw`8-m>3 zM3F4}dc?PMZr)eCWXb(~(D%WOAxQ7k{-wN0d|j>lPfyr9vt0e-R7aMNrMABJw^ngf z;k#SICW3%HD?Ze5`>f`}U-mQY<;(XAf9pL@Bcn`yQY!yom=Sj5ls>alzeF4g7v@VT zToWS`IM8i4>dk6~FLAUzPOu_tab3C{4?_wSpq6|OVwh$9>@sBs>Du{;fWm za*WlXhDI3!o44d_C=fupcppUxJHV`$s4Lsvjm^Q|(f@6+pdTBRYtPB5 zQ(^{Or>0j0r0{22I3lL8S@fR^M&SBq9lLQZr_@`Qphmt}bB4TX@T8AJh}dBHBhxc) zX361paH`%}Rbc6Xhnl}EOr1^dqWQF7Mr4(&>XUuvA4BsaVLRnch?f}reSNso3H*t4 zwS5*Ynhk0-e6{mKHf-D(`wocxQ+Vbvg?cx=%_s1>l>BDsq!(4<-Pf(#ENX%RHgCi6 zrQ78kgOeD^#H%40vcQ1=Xf4%fkR1){{fk7QZ$)`=>=5}-C7)8edy_Iyon3JDh=l^j z#SU$QMie;p=%)4+5H>D)A_=oZt_Wa{V>*c@u2rZ2VGL?5!A)X`Cm$vjBvY2>>2E*2 zbIz{b=WT3j`e}`S{UQX+`{w_& z*NH4kj8+>8E;cFwR&le}VeXWaA4`iO)wSwcIS~t2m)GxJ_lHYVspAunJ??H#|CaD3 z1>&WzF$;H23p&FWPVSMpA&q8H_td(sCLZ@*HU`xyLk|SZ4n}45k|jtL0vfA_R!z8F zU%9dN`r#9QvXf`Gfc2g>t?aTp%XZE( zzOT`tGUuvkkv+r)wVoFJme;`Q4*e!M3lm@yo=Xj2UN0se^>>9cBkO4I!Maq*F9^tg-Pp6qT%6T>>uPt|iEOHIgN6Sg@ zH_N~YE_v2Y*(V1}<0(ax?oy;E)##t^Eunl+ZzIaO6NtLLzodPl$YI_MvXo zG*_Xe62+U_L)>q;-q8>5^>aXlK+fcN<83Dc2*5Arao)P;((NAVyu>0B7L z{uNvYE< zH$a9Kj4~2dVSM_(Z3ofzMIHD_FQo1(4F`B6h*|LRrbK*?zdrngv;SR%e*Q=G{Y_f6 zp=x(=r+suo%FhUT`&q_6I9$Q_C1+k-waBK=!-Y{KA#cB-jgbbRv~Fot9v{b8CL!F= zzotc%m-;SU>7W*{P53a0$#>#s{3t0FzZF>dl(JYl1kJh`cNnZ>`U}?|&1d++z}?o5 zFO)M^;@3PsY$cAwqXq2lliw6)!sj0H9bFYp3LbsQv_Fa0mVq?QV3;VngIiCH?ll;k zx($=&dBIx}h8!(vfE|C@Qp&;;6<%m~sB+I6&I|Ho(*+aRXDXT8$<0{+8HDviz%)h? zwjSfUnn~I4O8-7h+xA-L&35*|`>{`8A@Jbf1*J;l;5kMQgw&)WzWqB(!Nk~;9GDjdHzsZ5b63&p9_AfS3Y zV#$-HbZZRGX1?DCp@Xwhwq~WN;f(s-V^<+z$Q}B2)^>j%SFjp4Eezu2^92{Kcc9%P_UF(X^y&koup)$KcMZQ%4en9bTn8*<2rSK?U_{xPkCuAZ zpG^Oed@Mj%;c5=18_}3g$qkvQx zM@nnw5&_;t3;(_BEe*;{HFD??`=w%wZ(1^nM9EESW7`H4Z})2Zo=)>?6ow&k6lp>% zpQxHE484{ghTf&M+^>1rd{8_&i4K&Ky^4SS<$;T9l8K$VwK2vdOkp^;E91TZ~3Y^hXj|GH-$vZ#x*i;LS$~jF;VDn zB=jl58wowiY^mooO8K*KC!2~e#~o1SP?*9oF+x5+;qcP9Y-{fP;9W|s^hUM4o+sR0 z|5ZRok@o(1&g6iiyUs~D&p^$Ay?^D)8xb{0$h$hd+UNL?qn%4AA4-Li`(Qr5zpY%> zGxtyC>+;S!vFQhZ|LFx7GFKxQl|x(l^wjT=_vKkyTHMdSTQXu#jjzJDdXlBGAP2>0 zd3OW+w;$3i|8&t2ENVT23b{HTFKAtr%RWrM@E3xc^YQb5`%k~rzYAO#!PRs7(7?~yqv_7vW$@sN0Ub- zPUAhRzg1t>&411F8arM6nIxZQGSVg@Wojwc89yjrPi3iWeAi3%*psuzlveKj^I-;- zhoU(!b>~5e8P8w+8bryp(x&qHu@VH+BB*(BV7T+nv^eUsC^#^4%oAp2vh;r3atw&_5IOy3jXQ3dKbf4uLLalw=r8rqJ9AJ>24jUn8_uG zHG@LgHROZieMR$<@H%1`VOMUfaI}XOBYr||{lbZTv~vvn0{LVY=samLYPprfA!IZ8L{N&uPY<(ATLa{kKl#Lg}2 z2nl}Ts2O{wiCt)r9UOGWqZvnT*q6(wBy?3AhHVc?RIbl4;2;_>OW!u!z(Bk_Qr9xxJO#w4#R8~G1_IY8V_Ux^JZKPP?c@@ zoA>{EQ=-6%v-J7}u;*{eX!UuyUjqNy3#bvARwH*F&(jGzvRDx@4MkjSf3>Zyn!z|; zckX3+th~%CJa^n_CS|t{Mad(K9O_m*E`eVbmdTEbQy%kAco_gV2<_Lf9W|XxP7r-y z%}fwRfFol4;DHeZ((!6jqOWst&{q%AI`20?Lx}_(`RmdyF`FBa zR@J!zh;Q)$ZHUwIFNm##3$Edf3OYbjNTGcK`=tm9OzBmix1qw2-RP>&hvKOG|tm`jQOpFYO3_*(MilYdN*hy@b`LKaBgF4a%pm%uIo< ziBCBE%J@y&bvcFpqV-C6>yhQ9EQ(TuiWn!)-ZlMyOr3>WlwH*BpBcJAB$P%8>24T6 z2`K^T?nb&KW&o8=r9=q%b`iJkwCF@jv-vXr$PtGU_+G^mFtqb>{|+J?xk{(7BrL~? z+!rZo&UF_U`2)!3#9)$F`cmL?zNlNw@JaHGyQr8xlh$>Ex)-=4Aw2PjG8sd0a^n2%%b1jrki$T zfW{wpK5I#A!;q~m_;tW&iOMrbp&WFZC{DBNj+|BP`%>wx>DAPV98mvfcf?Y6@!4g7 zLQ4%^eJObosOk@ss3JCu7J{uU>6dMYMT#Xm0n*Cdj`fh+1K<8ekJO+=h&j1HT} zY<@Md7elVj$@pXF4LI=-Hn+G8hNvr5YJQ zLWO(CSbqxiTxej&)C4_n8yXq2{I&5VPD$)9xa{|zw#DEvTyfgqc7^}Ea4$fMJ1L{T zNkyS>rQ`{A`_giI=MEZg?Q6R{m+fofZ)uSZSqaW@=`B*Dod_#~tXnb4> zDigT4+zWA7{96k?7py&0;D>6D9b8=9-dYdghQ_36N4ZH2lU?PBESzl1%8%SE^wZ7E z8t@eB>{+!AR^+L|1;BNF#7-EZ-?{=x85MvX{xlWl!=8<}SPyT{&;0V& z#Bba(SQ}m!xU55D`~qv%4@kOYfKslJ&FzP1p_Y2@(ae@y53^-1eGFIeO&yIvnW|S5 zk5mm{5G;qz5cqzU105xik0lWDGv1rnElRSVDDED*L8FKF%`(nEB?i;d(s^h~pA2J; zKHHYBvJO26i8FcN6~YKQ{T;=!h=s}qZe(6%cu)mj8T|g5&0_&+w!)ah$@z=cLo*&lJp)Y9K&eM)2$HG99DUYdHPF0s>ncH|F0dqt_@*O(K zXD#B!f{$$*iC`L#VovZ4PM+bxT4CdLxmGS)HCz11L9*7doC z&*yDs#JkkgPFBAWjclyrgt{%KQ$$%K9D*LI(`YWvf6xj}RiPh_3_1qfME%t{ZlvT^ z3DvrJ8ydltDBc6e>MrWDO4`8wBJ#&v+XAEiY2Vq*L1fKJ*^uSrFAZ`+o%LKjk~LS^j3zB}B8GR$TB)>(FK+AsSQI-3<}j0d@6YnlR5iO8zyK zkTXGAct`gdIDJk`qQy|InTp;4u6-g}0^9}#54M?&*$U!+krgAf>(ojwr6j69Yj>E#mexpY zU%$zN1`Zs=<>}gm%5@EU>UjG;5apPpoJUw3J zr1R@Xo4mD*Ih4$y$0f3oMwK|RZo@nKrY^w|`b!oA%g**0yG?|H3ZsjIH?=3tn5q&e z6KJsR70|d(VGTu(3Jd=;DYElnJSnI*`CL*IRL9->kLvm3%Zn2U7Q9;fCU9yN>iOGB zzf+Xo6-)WRw)iG;x>`u8k28{4zDN=FGwd4Sl1W-h6w9p*Z@N9v5FVV4(u%8Sh#4PM zrh)T-verdes9t)X#_^mWdpy}FY+YD0Ua!in_RVHCo!t3--P9j|cx89r$?%W0HCmlO zJp-90f=ss$Fj&x~iAmaJJfN5oBO|2oe;j{N$vf57iNw-H1Z+<_A4q zD?Br4O$?BX|H5It1gkVw)u3;=oImVn` zW774bAY!;t=fsOc;}is|+xpoG8*-t|lBR?^Q|4sO=5fOB;TzyPeF735eh5783_ay~ zN{w8wh7a2wXa(2W{&S8ljlZdBlDglU6S8N9si>CCmu1nN$ z3e}j$KLc2tOYwBh|1&;k|7Z1PweUv-3>WIU-%Yd)o~|p{3z9T*Zq#y6lD8&p7_MLL zfWABiS=ka)|IM4>6M6EY(K=>LXR^{tZxH8Ha`9Hbn=ogJ{Bq;kOM zk7dy5A9;ux#nD=&DhQLs8ZnuC_mA@nKTut~_D3g!byMSXgp9arB`-wk9nkQ*x+GOe zUMvzL<}{z(Pj@9`Vozh7-d$0=8Z5wrbTR~Oj2T9|PUa_imrC93ZDUOn<0(hVD~92UYl z_Fw|`LDDo>II!=CEIC+mx355Ak2@3Ateh+G4!Fgz%frlp(F1lEn_CP&L2;%CnMn7G zs+$LPHZ>&ZzhegU&a|%1GFAKjLE$cZ4Sq}|%!A_uHIh@iEXvoVSISYACgdF1?mm4| ze=RSRoyDdePY&z$E6It$1j}MgCq#C*-bwRCm6a(Euh1vSflB6hyu%QMFHS#^?lZZN-(R{B0~3Cscn*CM&n4A~C|VBH`;3YHp*OdtFMnI14ECS6tjd zrGXm-=pISD)&K<`zm0v$*grueJ@rrqz1J8SU3t59-EQr_5uF57|8ZQ+2;1w%24acY z_&;WDEZZ)iQGpfE((o1dp2tu=n17K=QF2)uzP&JpsO1qeg_ zuT|37#T288tXSr!Ng(&oxOh;oUsm4_K@8O>IqTz%Eh~vI{_z7Z!JBswARM`y;hkj~ z&1$Us6|GJZLr8hN_AQS+LA-zyC)O|V^rZJo0{Pdd;awcXp<{#VWe&Kby1)u3JuQDU zP!n`Y4r^UxCjWat7fcB8*m#M_U{iX`;_~~gAsIk$s?;5jHYx;~E%mJ@rL{R&3LGmE z_rXB2t@4ZHmqrbgp)D|-E-qAb_o>G4^xC)L9ox1?VhyO}AvSDb0*n`Z`-^L??QI(( z42cs`EjlrZ)Js}}h@l2(k&+!zp!^w~($VhYYcw7z0?&uago>RwHjGvyUUntys(OE(T<6E?5=XmLm&j(-+x-7*aBJO%C|QS z@IX_UN24yR(l29?A_ZqUeL7Pxy~@irt5Mo2#Ku{wHZ!{Yu3UV{hKYMKoAW30-!luf z=Or`vrSxSpDLd|gLA^Td0Yc-$gZf|h;c8_=e~nX^Iwlp^f&Q_nOz8^b9=xr;r>Rbf z8fl3&%T_LGy#Ud^B$YZ@fBM9w+`INs|k?X;O z{_9?v#_6{rB!!jGgBsoE0O_Iqd|@UMHHLJfK;~DN(q=DG$Rx^D+RRz`Nf^xMjV^B0 zT$Oe`Hr0(|5L=5WAJ1g7CAcOt)jb^Nn(?Dkk4sd@H_+?VjL^Ms?;?a;Z!LpEsbl*s zO&j~kOQ2q=-UU^7jVxE_p4>+^VFRTQaFc9-V>-#h&w4X7Mz&{v0#xOd$~CkBd$}aE z5_T@ELB0$uFMJ+`?@R4J!S2<6fi!1)Rl{nhtHnAz7M@ z=7?r!KeU`{DK8X)#xSIxd#c-f1{)DLM>?Dlv~HHy(a;_=VZ*qC-ROcHezgxC6%!xs zK2}Y|+y0HNt~(URnq19inAa_1##PDkGBt)h!6L2l<8C$x!%N64Y4F;DC>-nqMrF5C zfWGw&{;AH$jWZOt+9rhz#N#8)&hlRCOYswHYYyx4p!%4{0^ofOChg^8XOnPfteOE- zszcY1ZhxyylE8Jw^V2(YE%bH++GT+?ovxz+To#YYZC{$<-@U1UnHNmX}oWYAx^4sFLrd{WJT(9!1+AbOF z$<6LZIWh!Fuu4gf^4Q0a5JxpE$|)6bq*qESB9V%kzDJYbGz5j;S2#Ww*9cqXgt*wc z=)}|TgGyZ|vP+jzD~SxHWwC?_7X&MJD?H2}N!v$?_TOm}NnoQ+JLd!&JO+J4Dq7|p z*q@onzZVczTHQ<6MQ>N}QlGo-fe5(B#F1@i8gc@{7iWjGCuv-FXQQs>X^19FF-)-2 zLzUT@wZV}PC!%(;w|^Fa;TP>6mm1}#{nz%HPEz-FKGZ52sW;fy7;$UNOPx3u*{+b0En4IzP85#V zN;5Le&`>3E#-#NNPHNjH>NtZC%dcX;V8F(IE97pU;+&XJgyL7;>?@$8sVzz>wDdd# zty3L<>x)Z$D)@EWH5Ab5`@VuOhC#=uY83CsEQZRCw{9Ql-g`Db@*0-7Q)HCq< zUms;|9Y7F6p+T7&1Hr&a$CXeXkr6nU276U#Z)LH6bw4SZ3!z;(CF{u$Y@U<8I38+VxzaLgi7M+LQ-dL^>qXslh|}Hs$_{9ilz1G}(u#)xsBNsnz1^MB z4UsM}s~3%r-1!E}dvq;p&rO5yKMvBrMIN_6t647BjmG&GPDd#po<^r$$y~M@_TQSGvi_vTy3A*44u1ECBo&Xq7awT z&F`IUc+VD%2Hj)d;xC30j39C}Co3?tus1K&=zp`Fqt((ErcOZoZwychtVXJ@Ye3;A z(2i#m(4KuNEeOow#QTEkfAaq(Qx9yfmadz#$jgB|bDIaDKS?KOLIDD9g;@Yca||<) zdS`x7?!r-n?0>mA3tr5cWn@+%58;N_rfDmGTDaIi3q)SD*JgyAazAw)k*0m4 zT9nu{7=w>&u9mPxdZ4{hYWkAW*i}zk_d(3L;J)b9=S^uJRjFKyRznu+G>GX=r|b*- zN#XeLDZDS95ODHKbD6|grC)tS1Xz7*#HsAI5XXqrJWqrBnZd9pe7M_Y)Sk{Q&~GCO zXt?rcbNZkwXv&-F7!!Z}$W4Q{=20DrfG&8ap*;>c{0=g>yZt3ik|VUC9`}tC1!&i^ z;U!bxKb}=&-BzU`4 z>d%T;S`2IPxtPjlUt|WE5!XehT3WotfazEH-OLmQN%YkXWg8J_q&dT@m>?e@MoEt| zc1^qencH{r<*rV}{kw`5pRcYTO@{AR5OS{0oyKj9ROr$NK;o8zr`9{^UH6wWY9bZp zfX%k)=-tkkOZkaQ)AM3*yPE{tx%O?oB@|8YQRWW$5M2tLxcf$iW2QzF`9XI+Oww7d z1KOtEhCPEBub9ll@9vA$j1q77XkJ6ggSbI}U&luaErUPy?E=_^gfIOCabN&Rh`biP z-rKJ=My5YJ5{QinWdJdnC-^Q0u6)1Z5_&zBvi#09O&->ui60KJW-na!!+r)4!@|~T z>PF?guQyB)QPHI)%Ho+X(WTMITkD&nQ4Ns!n0LcAlNSL42zGScey8$3Jw1-CYoo?M z9skJuTdr5^EG^bnabnh4h8XrM-}ScF@m43F>?2P)D>{RE-32QxiZFA33t#b4Y49d$dOiNd zDA(L^dB(j2x3S%8xqjacC)IbUdD*Kn!sAOzU`)Ri6{e`3^lKBz}?D<{y>oe$qS;@7bAax8y1$zCnwRJ`& zK%h$&L-v!roSktsFX8NgwgI`YlB_k_9CB;UFhk*FS1SXFfV@4K^AVU-VpqIrjXmpb zLA7_S@bI6Kg19ImhmCvr>1pqoX`2Z(P^O5ScvRHK(j+5~_qJqObc z&}jTFTCOAD3r9JVc~bjXwnILNt8rNy=zuJjuxrDCQy|-Ft6gr#q-j@Xnkpwa_9H6u zFJHgSBn5CO)&$;x-Qc7(mnRwM-=F;^V$q|0Xi!VGv}&;Ve2Va?K^9*Bytz5O3u+@& zn=E7-B=p~cum8dclm#B<=~)+cGYe>heiPaK3r!F+Jc)wKQP98gb45ND?wbcMT@l?^ z9Pj>lGlC)-qIE)8Pq17co5WCTDBM*H>N|D&_MOcJYA>SPn4|cm*Ck4>F5uo{hm_V2 zbIEF`9=WjY`SFtD6CnAh$=GIx9^479XHI$rYRAd0H3+3?<|(zTgUM_J6$q#r?g4ETDe=+NaV0%4Ee%0nV1XyB>AFeen4wDiT;ev=v(F zBXKuCkE%)rj0Q)27_l8F)5PFw$mF-k7yAirMvRsK?$ z_1si)+aMo>{_XL*`Y6EnnUU@MluT@_4>c4Gr$6tLKkf7qd7}nbiOTI+Bc^m8;6<7l zL0L=&+i2WaJqBAhg{-d+4>FKEYdjFyKa-`f_}z+Q--E@S9mCC;Jxm;-)30+Z4B9kC z2Oy~GWeuQ0a&2zo*0$|XV|3Sq(1K2Mgz!YAM3R|nkCU7S(hKwYaYc|FeWu31E2+Qk zqR2QEKGo1AVF#F99{pS2}O5qR^#Nz%{Eb zfZ^&dvjs3ZF!QX9-N^iCs`8havN?EyKGnTsrdWWw?Lmz&6RCqTFXY?2M9Dy5|50xk zKCQ151ke(~`J~`wd{h~3xiM)5FD!dy4@`QA-+#<`9)El75iyDzIEK^qlA*Daf`}1^A3zRn`=3ocI?=Ud*hPwK$FkU-KN)2*|NfEZ5>zgIz^wjcMiwY22?qUnVA7i_Uv<%MYdSMm ze?lou1atnDD(|*NC+99a4R34xCWDORd`=hGZCjnLDk>$B3Qs*e-O6ySv?L)`4d$Iy2&k2+-YdmQqN_5c7prIew2b<3nlX9Sa$m1wxFLS~7Bn1*I8?wo`uK-aD^ns4V#AlTC7Tqkx~d4QX4 zZm+BSu1c#G$NFbaS1uM`_x+#Ufm-wey7XC>AF6nnR6u(Xy6;-A3Y_vkq{sPzDOA$` zvRF2JDFwkvtW;GAYSCJ6o1hV79dRw@H-}y_!1ZAWWZSdC|M5xDyE3G4@>e`eVH)Mo z1EZ>W`!YO@%b^kBI|l5c{H9pnwJ3_tS67V+I9kp|R}~Ew(|v$3b@-v+u-c$@l7uli8Qm<*>MsF9MbRLt|~*71Q+s;O%(oEw43s= zU3W(~puw8$!4gTgUYcl;??6R&h31vKIoDda?QAu?Gmx;gjB94oUS*(|Q74LL9-Ee_nJhmCvT&^C`UM>=BRJ+I~PFI?T zCC3i-mwJ`m2Z_~S@3ris*4rCD6$fuETEyl5jvWIJmwiN}2LB#ISx~c{RaN2tgjC;jgn4LILS(l0G#y|_21ok zPY2T|eSVFr{aaaz1))M*!8zTQo0Zew)!N#vKo08k5J>ccdGAUyVhvHJc>_^nO{Fq3 zE||staPk6piLIlbJsY=-s2QUBY)_0Rp{j)abnlWHt@Kx+)w=GTWS9+KG6qA^kMe(8 z^kGWZ+?U)CNd)NsBdSCG6!1Y2Jw1$ebrwG+V0$qh3ckI z@YT1*j}Paml%Mv6LVjZKa;f*Pt??Ra>@Mx-^%)lSl$Viz*(F377;u%L%ZSTRl#1+k zBr{kpNIcz=x0#p?9<$e8cwAiVTcSKm@Vsr(*pa&23B;AlC!GBE?1sCUm;PQE2Pm|$ z_Xp~O7mpZ$mW>qm+x3&p)494InBfZar&6ebulw;#2AwPDzU+LP8=0Q9uxOX{DN5g; zY(9@Es0^qF)9TZJzhC#~H(q`UoDvFMfRmqyfLs;Cbe<-Pdg&fJ8p=dqz$=8fksV*} z+ez87vtxMqCRX_F#_zoF5Ng1aqps38MI6A=z#7<;0>tKb*n^gA(jHB%B8g)6XTFX`i&$|7=)}U*86aFwaotUX5UUBAAG?{w@Gd{U9u`@ok+m`%JJ5xea z5^zXfKIQzvIO(u2_#mW0WcIQ1&(8isbjL@&=7cGW-ownVMARKad3JT1yQiu8SI_HZ z0mbpmLc|m`_Al}9Gag5z+Q>?4;$Hoz5D~eqIePp}<V@K5SX(3et$Omg@(?{e)GFjne@;e;jm>{$5QONs?OI=cW zHso-QS&BSE3ntt7!c(aa(IAV~OiARAs@=v_tPa!16Up5I^VlbV0a5yB$jC#}PWyJ{ z3p?IIH)S8gMTa6DpbhIa3OX@o^7e^T7xa3qN!3Te4w-(^u~9mNMEwIC(420Waxs$| zh-YQ~;9|8nK7p~Psmg0^vbB0%N%B1$%e;$?Q_G$40B2<&iIHyHfYD1sXEC9Sw!jxN zJ9bQ{u>q+>6hw)O8m-A#iiHWlzy^$X>kQN#mcP0Y@G?7~W&m%O+QlrG0McaS8CIFk zx=Mm0X;hsngv&~VddS!J1xklU&zh2qx7pFlfWqlEZ+lLp0%X>o`NyE_x-G2_H{y4w z0K-R0w8*hlXs5dcgV1oY-W3+VZyjl)`jfgmP2R%#y$t`kBT8{|IoEx3iZA5 zbRsl$nk_3e-9(A^hKyEJ>)yl3{wH*OVI2DY`9BG+8nL39M#iSjN@Z_$oJoP?$Aa6k z6!@R3vJvEgMHW15H}_NScMk=*_Nk2@XE!~m z)O|NY>{8paVbqPwDwSa_cFrXs1}P`$`##>@r`A+CGHuI@`8PK&}92{yUraLm&<0QHA`lSq1ip7^ndUDW@A zlm>(10;f!PpS&1wmCa(Z&WV>V`u3&ZCXfzf6(!Kuc@n+Hx~vO=!H7$+s!=BLz8|T< zOWY#_C&7PLP?aJP z^DL;zOwE~Exu324aqqivAG#h(ziO5y2se^a`w8{181d`4p(nPC76Dv ziB)ePrB&N~jRHkl3NqJy4zWeB!kaoxj)I&E@WMMJhY*NqY9i&|q}7Y1g+Z}#TdJ63 z;qB@K>Qsx3hbMi-gNQs=j(>*0c4xiY^V+s{7Ti-8Vzz(wylIuLQy=dQSXkp8ug1(= zF7BCcl~+QDq9&M%~)pg_UT}~aLjA@hM@S3TyQU6wxkGqGTJf1l=N6LYy0{2_M zNroilso+B82QOdl^Bt{y$GOZMTji)@Ibhy6k~HOj>ap3aUU8T<}MRlb)CNR!w$1nDFGqTyP_44=u3C+ZVE^(;G5$b8mnRmQ!nh&=Rv zW*jiet$nm+^N+7i(n{{0$z;@4Hzyzo(k3>qkr!7{M5F~wp7wn*H=Gmn&#bj3%8a<- zFmzb@&NjD%WhUO`qb|f3NYT%fnU~z4tRwAkW~zyCItTZ+LB@`kn1wxa9l0%<&pe9u z?o&zfT;wKud7lg+Li|M^cH?PTrCM)&6R%Svq{yhAF)bZfWSqz`?>8HRPLert?7t^P zcBt(bUiTZJC9p$^b+s8xCAPMLHzUE3!q@$aZUkpdn?b1}b1dLb+B@b2cgK$#KJze;0FwA?-W{kf75$R~l zYy|ye>^CrG0)~HM?ulc!Tk+}Cz2--b6F?)$-W1ngpHfQWIXR#T;*^okl;YJj{Yu+E z0Hbl@-P_wwZAA36SffFGEdW-&X_Wy*oU|DQ7-f)ZttSNqkeFmXvOZSPS-GCov5j># ze@f0feVI8r^~c&VI40Sr=5to?FyG7B%BcK4W*yXajx^JLy6jf7 zJLUM8!?w?DZtiy)qzJd5#Z}w7ToYQei`8O9@t8*A_Ide38B%P`huhy6Q{jQ)jswzZ2&| z!)RG#)4ktzdh+8L|H@W;tF9nULiOiGqTmdy-}-hTw{E$f%riN`Mmd+z;J?VoA~*B! zE)&RCWJ9s~JzWJ&skslDt2#qqyW=t~?iPZY4?k zYbEu}t%^PZ|5%V?M@BwYI&K=&i|qzw(GHFTX7^1+uCl>Eimb#eTf2W+1<^fY3LBm5Qy)8kVrSnkhVJ|mzl))UUaY*Wnra%&i`x0$ zEsHBR-*zSvj9TuZ@JEo$T?fLbR;_TEHGc16fDI`~`-^j)&4c*hd^KMU&4HfD2I88n zw`f9!z`L&Q@eckAN$5t=D&dB|4=>aHyhKD%=!|eIoSv~qOU1v-0Np;fJN4=0&Eyu* z#N-6fj^(#qWSh5;qs!@#w}~cw!Q3bC!m6hHolg7_ChT~24TFS9^Z7?r8%KCu>D+g# zA~Mx)CDo2ktaFc#=vqAbuiMAs@v~r7B zQcxYi*Oz~cTw;EI7No##>JiujsYq)c3X;Vy-{CD9W4+D3#p8L|NbI+qKTk)TCePaY zp6V}iZZp>D?TP8Ur$B|BSdQX5bBKsbLdmbR65IFIz|-?-QL&oiwF0j=wG#ZA=6AWP z^WC#677d#RKcR?MC7~3Ggg@kksA8P>p6Rz5ZDN}bfTYQOwP{Y_PJQ1Rc%xlxq{a(K z?PJ5DJzNQZ+iF0Da*<{rvE#aKKpEpJo-hdDgN)()wH2Z!bP}MB2LUi?n0m`pjr`5z zcb1h}3sE%Sre#O6cE=i6t@wF{Ma>Orr=XiVT^AO5)~puMt#wKY#P1A85pn-w*e0|5 zNQ@u>d?RW8A>W89zf7Vcfg7}Y9->~;ae`5T+HJMKW zVY78g_5>e>^eI*2 z9XkqOwQ5~*_E-rGCSwX@&E$wPQ2v&0Qoe8Vd!S*rLN%@GJ}X>2-~$rh-#?zB8UO9| zK0~qlJX;U9r ze+yi@^|XP%=+uVue83(u9Zrmj^eHCgBbqIpB}BZ1l83;+p&u;Gsd3v_H!9ym*EHHZ zN&;b%QoRfnIRwr?<_Xa^=$Hh0ofM3-mlOUaqbD;-xLer&oPIsU_(y^4kz3O%9(moa zzI&SkcHGItMVQA)3M$ay(iprYJ@z!e_V}!kG2aWXcEeBE`CsHcC7 zoeA$HHOz|PNhb-YH% zR&h=k-n#T?z?`7l2Chn< z?)BU#^6&3Z-DJa81Kdwf;Q;V&WY^guYzVyb2)*ApA-W#-od_C*J_QBPos<-NR}i{@ z0a+r6!_`-%hNYC7p|W(vL1gziyzQL488=JX{5=+b>{y1Lq>+n(6~;ap-$tbI^tZs*$J>~qg1v0 z`cH8dirv55yi`%fW5WGdrurBlpr4gB8m#0RzM(brxg{tBr~5vVv%`ygfx9f3qnC21 zOQO{qks?Hkf9FEA$z4od3wpgF4t@HeRp?F8L7q0r{e)=sM%{AVc1QMB(dpvME^Djs zYr2+|{I9FNzSdvIljOcebVDZ^+|iw^FYE?J^$L?qrX37(=4zQ^e4gvjqp8D7KtM5_ zft-wO)`3-5EfxT@q9~nr=9^5hpE*xEF6i_Nrbmw5=Wq{=gYf|?iryG@o@W^geb9@1 zAvzOEp>k@!bGPCJ0Ps$EYGNKRkaSePR+%5Q?nVV*TRIdN3n9YSzZ9TPK35}sI#iKk zqMjZ$@9&6Dtp5>bXI=In$1^KU2L8IP-2@T|u|Y`Q#g+O5GZJ-*2dP~lk_LBrg#MPD zupZ7;nvI(Fa_!!*ZORoyW}j9loK!8loj{d|;$bfOo9wbcS@@DOkEi4N&FI9K2 z%s!2e3Y=yKF^HU3=rsWo+7I~MIMK3dX3WtHnh%t{Xbs8kk-0=*DQmkF=~ek0Dr-fU zP}m$nXP{m#R$zK;er>9PSS`V)v|o>V)0A>Lf4hX9<%F^yfALosE%tfnE<7Uq3J6_A4ljjb5VP~{Q9EO*s6EBgaTX|8Hj*qXnHB$6hIbp-H1i7Z2JTeqMa?~ zgLldh>b_84`e`{?D&gqSL?)s@HH_k+0}jAW3CnHe&NfT?dz_!|HA?0Ytpx+&6czGBdU9ym><~@|l2~;UQ(jty(?#yJ-n2*|O&XgZKG@ z=pO)39Dv{a0~FRoSqq!K;(g?srp`=XljyJu>m!KIO-8Luh!h22=#JoE^TICMWt@Oo z+iUBUCTGMa+i(RQRq?}c5jU>#rl}FAS*R2)5+f#vxhsKl`}qXNwr=e*#~b+T)4J{t zftJ?MH)Ki@SS?-e#e>dklNMC}-SC_hOc`Dp!(fCJ9ic^dhL>fOv;t{S*QN@J_1zVN zOzJPPPqTQ~wUl%UP>V$O3|f|Il$xBGqQRQo4Ftd}p?=wsgAeX1Apro}U0n~EVU%}y z?a$!7XjE1Jh3Sv^&awcjl=O6t+u-J_7D%PT#j1JR?OYYzFs>DTdyeQ75oBy{x6|a| z@}2V}RMmi1nEu-5!msUaM=_Ic0H4sxZG8FzjU0B`!PB}m=8qJ>X{(3qC<}R$xvlCr zH6uj6!B7P@%%Vp|;wV2?63pQm%AoR~g8|Fy>SF3Td6F+_NgEgH#^N;kYe4_Pc3xEoM z-06XAF_6q+*00L=D$FC5B##G9m6DqiMo6V}xxz*%=J>v+^IpYmpzE+Dmlzc2=SUpY6~eHqxu>@m;-hnNPjuM^(msqxPpB4Fuz2R;G5JC z_&(pVXG$%tIZwOP@DP`x+LLGcQyVE=nNN`pM7x3Gp;)Bx;SZP3DlVSVXJrvWx}X!b z9jxT7vlH8~&nzGqEx^+b#R!KFV9FRNOaL~@(gvctX<{f9rnXd6v7)gi(22`z{PZ)o zt=xoH@1hu^Bu<(zNFrKB7CT}zuQYquOA%-)9`o9I7pbj(Ea-uaO5^VG9 zB`;9=?Q2Iyv|_Z9JMKfb68`-(jsMa9yk7=j({c{#I zStmh+LX)2vYXBay!a9E)=jxK^0x-U&j4S6{QEU5F`6H9ERZ|WWl9bD z)Hj&(H{<|}5w)jwl`o98F8X69!Pz!BOnxyS>?asdSu`yDliU|WbJ>=F@WGvnD!tB} z?{H^%2FQqMkENI&eUSpQyWT1T(f~DEIBLbFIb%ofyw0t#wlNV$rw2Vfx}D6`XaO)r zFmjuwf1B=H6nb4YS^s7Bu1GrSng!d{taHXE+tlp2_o&$zU8QQLNmCgx{bhBtaZFPz zbd`3uguInIR^clZ2tD}9Jkdm8Ci>B#D`a-RwgeXwt?)7o43qec{$xp7Lc7CT;SJJX z@Pf^GaiF2J9N4UB#e4UuZ6 z1@D%@ctgcRmHf%r{t+RFd)_1!jO{&XkGa|k02EIEpgY140GyeOkjEep9e{#RB>#6E zH}!pp|E}Xux1F;O0s?M}ptfdUMYz8T=U+!(QYF;UTk;&#U%Z88$1YEmD zTM_CVb`?VaEr4<%q1AAR+~(nK@l@i~-o#PlDS!4Y+N4=Y=x3f4iXK{It6upmCNgx` z{ljT!>L^R{Xv!;tLmFxWjDgtjZq6uB|JsjS+Uz3|{9xDCa(F)WlS7TcYQ+pZlD!+= zkLQaqmVaH$NM1od-I?VQi6ipPpk|Id$!`m3Q$V;}kr4Sa^!o2h8CMySbsvk4j*{8( zB~s~J5#QHjzG|#6=R^!M^AB;_CND_8&Kh`PbRuFRcIwvJ+V3Sxk~x}0Xm=Mg^_|A? zI<|QEh-5RE;00*{t{XUB*2qmDouBabIU3*`P6g6-AP7;WG{FF1Go1#nwb%iAPCNtG zUF1837Y8(%0y7(~^Ql z)Wjfw)l4|U_ZHmItU9L5|r%nZr z^=);V(q60&+f01tdSXZ(Re)%X75%$~C7nQf(X{tZ*$z%~lN|_=mhHg!V#PbQJa#{b zL;*%mo8xR|-J*0%xtYm_iOcybK2|v%O$XC>#+57{>*1`aIpHv5*$@F)(mZ;1+r9)m zxbr&?Z||z&BrVTQOif&O;<(i>J=Yih^uGooTOT3;GiR!5@H#avHfJaosOsFSNRUeB z#JeQ$eDe8G?bN;?A0;ay_2wk=r^c-?l_?v9J|v5WIcXA}Z}M7p*uBK2Cm=!u&kr@(get#zjXVIMA4cIIAeB*t68oukR#CekVJ!m&AcE08 z>u6>2?GKcJ6hp`&l2;m*8cZYUH+VAww7+Q9Z(C!qMX{tPj(Hy_f%ZP=9rTPjf{Lgw z3itcOHf07HK<*ztSI?fH&UU$eQ*3^ zo`2hbOjR1^uL3#sj?v!Q?=j9TKk(jcoqPK}{B3Npbo3@kka;m@2UKurc==Xo*IMs{GbN-PR{A%K3&N8GAd*dhMO~me$ zZb{_yo170ZI(>w(nTcKeeNRM?AXtCn6$(gE}UL$q%{5S&u3l(sg_KSVkm!Nl<$Ef0L!0{gtkzuvH_l6H2oH}=ki5ur$x5=>I`A`~zch+U z7idAoA=X#s1Ki0BAAiLwM{oc<>8jZHr!K+&K zl~PYvc<^F_L<^w4WjQePd(=zKV%G5n^&Z3Vvb1*~zDPYTwSOLbFbFWH=;Xhl&{wd_h0WNcr#* zklye|6_O1ubUm3;A4)K+VP~v#vC26yPv&{G-CEX*CGAm*W}1*algU*H&cD*g5+3v% zdE_ai?s+B)1Qx8!v)pFCMeX`@bHd^~DOGax7U>_lJhoo{?WFk|$Q&9>fR!RdX*8d^ zQa9)O_rzHz{PIec2q^yqK}$`~+iD*vwi(lzLc5|tw( z8m_Q(h5m=Bw~UJF{oaSq4Ba3pHH3t8cef~|NH<8Qz|b%>k|He)A|RcD2n-F z#AJJiVTR)3!AqjP0`W3z;(gV-<&@HyJ^ClWnjdxY$Uxqsy#w(?SpUEnWMIw8sM44k zSo_JamthDHhyOzd_|gs7IT)W5kOGeC3B5}{qE)33_8{voh?9KdcJIvPE!5j= z`|oY?#EW7Ambd^upn|T0Z>Xf7Nd@baewe8^H4*bctS>jCK#H4XG+m`@__4I^_Nzzh z$yWNi@ZT*9!s}Xeipu?w~6#1HC!;t~_-Qak1}$5dl~oZW-X z@`>~uh*X>5G%jR~RulV2&VLl$oy&>pC8=P5?@1lqX{nDpqJ9_x zz=?)ToB8S7kre<2u<>CcwT_@?Kmo-fR_P^DAZjQ;{<3Iq(`RAX{yG}WEYYm8C%f`^ zp9xXj`R$=V_ULyk6Y(h4q_s}784=V-gpmVd!M=T>E;CY`5^Q(+>N#?9YAfd_-sD3- zV~&eYrH{J}LCnBfuv(Y-O8QMsPAO3yc6K{=gQF(D9+w-7U?JQD^VJM zO8#cAl6P3TRvnYBOEynim7v_q8wLTx#0f&cK!F~H!YmVXQT=m78DYca4M%urwm87u(>|(EE>QmcXZ(#&Hro!IhmIZ-5W7bGcWw9P$HV#$jBMaecFq9{ z6JRpgVF3fE5s4l?&V0M|ko~rKssrY#=qgVTor>6ej|@nRAb?I!x?1JynUZn2+Bw`F%i>~U-aH&u%o zC5|4fWdlSTE#+qh&DdAwNTRc#0HDPWA$KkhIX%bQeV0d=z5G$A5_vF@NU^Fbcd)r*6 z7j+3H5;s&8C%dGxYf`bKei-XQogm+{^roc5-JI{Xpff1p7+PH5uZIEUd;z(z7b)N< zc0I+i-&U3>b=P;iyk#e&<3m;wwx37~9@t?}na&pA!L4&GMtMg0CK4s#2%0JMMB(kwYkRW}uxIqZok z{V6_&_J%4B-8yuyf{z# z@}sM=3+N!Q@XYQbk?Hk>Bh1CkMp@L@=;Mly{1$a_G-_U+!GN6$8$jQ9Lt(!o-`Jzs z`;}vY>!WfjNxgn29>BNEXKa98vHs3x*zj4hLpl4s1s|^OaxB^HANA!+ws*lvZ}6wd zMugk>vKQVWyQ{0m95AP4q?&u!w1zZ4;tY{r{2Yo2@=yHG!3Y4^fE?%$ZHy8|Kcm;Y zSiucwyESKGW=4YA*GG?0mn5tV+nvY7Ws6xOjel@G(@C%-cpAx+;4QUYLL zOsw{>(0AoVO$&{-r7nkKh2Cv!di~Q1CBJe{CGwdw8QYInkhtitqd;+;$1UNcjK8y%I1KHxf*lsjccHeOkON}Y zC))05!XPAz01>g+nD7QpC)RJ2hVUkV6q8a-^LxP#DWJB7yJ!)g`vh>`CQ4z9F?=V- zavT;pO6f^~JRjEA`zC}9*2ogyC)fJ+tE z#+Fz(SXB1<=553a+*l^tH4o;B}3ix4t z#AHih_$-}!mNC{=n!w9!zIB?k!LVT7fMhguYgKYmP)`4L=s2pGC*2f&6zaXt4Q7&} zv2Akyw&^7|w~l7e;(e$%`;2hku$J9y}fQztkcOa>Bt=r$e zqo~xYDD(C>8S#&fo{4}}>24;54AI#=u~n)tWtE^XOx1~rFA@iUd~jjE!W)c~(>ctH zZIOsvUfZL|im#seV_Nt&K&;sQF@x=BMpKd22f(CvS}HDh^q26C!Z$tcVma&CL{krU zRK`;;VTk4As|)1&hIkO%Ki0rOLoEg|U=!PbM+mqlY(C6P^cUTZHQ$iINnjXg8xSXBer38PNkTnMp=`f zrH}#<%)MUjOnQhUk&Pvt zB=RB2`GnS9nxvq`_S2$|69QZrijy#KT1jBIiX6BpQqArbZiiTSkHl=BN7Ylf=!sn8 zpdDGElt}+kn@?+q{UUl<2N&63FpK}iurg7BsxC6eytYC)iO%zJ-`=*OZ$$50P4akj z;hVQFnOC_Xyc*K**s4DNo+W;UJe1HNQk;6=1Az{b)}_aQHCBc@i)FZ%@_r+8A5u08 zq1{`nAqr)LHgSa!)?@$3tlln;m03*sL3AnQvn*bRXAv4pd}~Qt6R{GQ0PReBo!i%G z(7g>0l)}W&yExeXtTb1m`sHDJ5Z^$__B;|JyA&J|DW)fOs-smP0yGdx)r0~A*0qZp z?64Mq;C|Y1id7VqPxH{w7+A%bE>G5Aa_@v_jf(GkQGvztr;@AR)vNrFFS!H$6&sR|5Ob$;J@Hx+$k z_`zaDX(E;kWqc6Bg_Dmze#m-hSn;y03rVjr39f0uo$~d-t`FDR_eQ`*t~R8MU+*Sv zD@OJ9-`=t6`5@E9EsDS4*Gi%jRk_o?uo%U zjE0TUQR*=Cm~`4M#_9d57Pm7XKdNQ)QuJRXo@{4Fp#6TdpwadM>5^r0wPW<(4^Fo@ zjQVeSo?>g^wpmK374691=+|43?;!*nLMTFBfypNCu>g3fX0J!x8c7NkqVH5TA1G{S z*s8RlY2sab*tY6M$F|=Hogye$4j)GsqC^L9-9L}^qh8)&{i-M@+2P5}wBw;3?I>Ps zUX?&RaZ&DiFtz}2);O433mG}X1Msl{E(lX51^`!*H;M7?|ASsTd3bpvP4!%uaHZ~O z7YllEVEmq9gdQdL8U82tW%R9(!$;q{BO-&YW<#vvZey6_K4*Ts)9WOEN1(jp1Olob zh{^-B1$*vN^G=_Wtj|Ofw0S{ldal`{JVBNlFsx7$zAle~HHmP(`*FXp=^UhR*Q#Tm zDP7J9AE~(=t9;i#KWD4AAK#`bcNLSggM(rmjUuo7&dJ4aXt)Z{x-c>#l!8a-TN312SnD%>f~qJ-w|G0^3DQT5brO*%Gzf%3~QH$p`(DD$6m zhKfQ{*0@3EetOw5sQ9h;T4qm;xwY+1U5!58a8<@qA>~V4CdVep8E3i)`tK|DM)aFm zB?9D#ljj95NPQk_4=?Ft5rohI<>0yj`1>J#g_bLV0c*@XxRSjH^`tSN3`I+dYtr48X_DBgM+VtJt z<{d)7G#svo@u$x`Ic#IwLl*3Z*%)IaPyjd3%oi(O1?D{ES&w*J(O=W0%+klAtG@aNsh#mUPmImULwvf=PrLa{8HkBLVTI3WO-uTG z%r2>7${JsLtUGt}37CRHw9w(^UVs+g1o`ORyGSteq?+i99!^RH+Ps9U zhS!@pUVXHP>A0Fszd7RL0dGeYey!9{q7BCNY`N~W$HT(jd|Uxiv)$)U$=w#q z^&jI)?HWi6k;*;%{phhW*h7`m>w*(@MY=0}wp3>#(Dol#^ z;&@MBa>lP!ph_%xJy^@*6NOg(N9L)ro`4wr4p_&GReONbkI3a|BzL*AVt@%kGFFT! zyF?t;#5;f=r~bFciIu3)_2&(iOAN%k2=uXCaK%mP$3`NZa$78Vx9v-v`M%h*aGszU7`&yw3uY-y1@t z8wcFxeCd{I8SNGLRXxJCQ7ErgfnD z_M5mc>sWL~yd$H!#eeoW6|*|_&&$vl;8K!z`>g~6r*dif)a(*2PL0Mh_Ry?1=FZcG z&Tk)s4-wi7 zpb?SiMVDR_ zy5C{vM}&V4X9F0#6E>3aI^~9NcYR6v|M8`>Z&H3fAxoB-t5?~FCu-*N#ea<*#}}1Z zIK!=6m)~1b9hwfOc*)4j$o{ABFXUyHEcJr3z(p8Q+dR%;$}HzIb`>&m^*=D3p#<*G zFDJJO&UGO~UFu*O3$LZ>@2~5h_&i!ASgdD92f3Ax%`Jb%I)#nGx5*mN;l!2x%am4H ze5t?5!taZ@vfp(yGFdPJbL@@mzAx>6k{F>oUx!+IRqH+k9ZV<1&Ay@9eufR-e_??8 z6}=4^*OkV~!a-gky07OnEl!&ARfyz`x){9uQP`X;|sqAKQ+ERWBe)!`)wLG zLsS@km#<^7rOl}Aa$=&S&3pHbD($+d>kwxwE!l@3u2}Q?fr|fG=vF64@81&bs{k;= zkkz3zk*D!6hOut@^c};bgVSs-jJNb7%%4~A82_A7Ie?WVI|+fn3`i^o+jUSNFU5fe zYTd8#%0tbvxl_ZIYgKl*GGo~>{f{#K>VjR>;z2Ua(8#3SEpF9gWQ$KViZ zhMuhO>Q{RDT46||U}h88k$tG1aop~22;*hgvxo-=itt)UY!Apdq(e&xdo)V0a4 zo4@`90SBYA|4Bg=PZ?Rov$$ols@$TjaGlg8NFM^d;xC-A)rQ6PE1Aho&34t-XfV)3 zPeF#({nL)1xkR^K;w#0(ud-B^@Kpl7cU0edV@lAd_yxPv4FTXTRz5^-E%F%E?4#m7 zfg%im0Pg#)N{<;6AP%A!rjzvFzMl~fx~^Ektj|YA)u8%?j&-&h4I*9wApM-g!S6!H zqd5G1cIY#FV-Gjj`>b#!?mj^X`TlR7EAwSzAk8X>_0}V^Dm{t$GT))!hr?p$ z{cmx~Y8zt8di~Zu#`SE}LdgB%0o>Y_!HGB6!u+*Xz_>&hr7U|8K-NSVHt392NGqp4 z!FG@{NPzB)Qo3_HTvP|Ns(jp;V4H1IflZFB?+pj`E71bh9zGkA4Y@!6EZL+5DrBXJ zM-9emTyR-bC{<#0#JMx`KXn3=9fq9-otEPmf+*g{mUgR z;-N{IKqAKwikA))bNK`Ic{IDd!z5$Taf)bw8mq*oa@-F>J=iZc`iPO)f=VrU^!UJo zf6>;Nmm?m43md9e3TgbM2?9ngv)hb++k6;{wE|9-y8fgQ-0M4I=m5KG)N&a3Bvi0n z8{6XD1*0lfkX-V{P*j?eD)i<-az@4v@wF2%KQ8_0zmFZW_#~0^h!9|)Y%Ni8J${rV6Y+J~DI*?_HH{zh6aS83gR$`wk=SYrkf>UQ8xc5+9bmCpL3JdYWr*$uL0{JLc#}vu%eacp5gjHSy1`R zRxTv=Gu!p#8jfR#-%*7aE}-j3{}au4-7zZ|AopE^y@(<3Z07c>gX;brh?K62C1hYA z^F%DKXT!@l@1)Tb{G%>unt<+mG@-6w-%u!yaQZs|dJCD~+^}o_MwR%9fQQ#vtc6KZ z7riBFJyp_a1s$+2&~-H^3C;n*qE}Anch6A)NnWe9h1kSdFvo%c*a^N`8K-Ir?^i8l(u3t_96? z4KG5NEok2;P9`xlhL^c=Fz04L@0w8cubF@PHDPm#HHXE#P2uPu?t>j5jDdHzSWGn1 z+)W+nd$=Z#8+>(TXnztmC(ax>9&l@!k#8g#iS3flLOodL0#5l1##3xxN$1xrv8@Q( zNETm)Yuu~kgW5bR?|%o8{)D4ZrH1tg?0tjmQ!@unUw7$DHW58=2~4~r$_2f;3#?ru zz%UwuVJz&0VHCWU6*+%ldyfHxO(r4eq|YY^VZywDIQIQ$8FH|+)D77fxf&2`?aR)= zixURy&0>DEG;m(w?D+mOR~;5=*o4HI-}yeTy}YmVy^Z>yGi(OnW|5NAPg|=?XWt7`OF+U^7${#U2!V*(a-JYo5$8ct?bF~~y>>t|Ef0ToGbb432=;#uY z(|7O2aFPAuqS?rzQS>(2s)Ui*=~E_7;aCPDgu2kKc^;(UW-OGz$^{h_>Y`l zgZnNCeCB{=Rxd+(m=_X&+5tkX@k08fw1ihC3MnIURiH_Z!}g*L4kO35nSfRNyPe`SISd zd7rlRsCd(R>f4hyG=x~_r0kUm6wq28t60f~#} z@PpQzZ8aoMhKMz$^uLSJW+m*gCy(B>=U%;G_$UMMe^$My z0x|w61#mo2#1w9^?uc!$CU!V0T@@Tsv{OA3dg4aCdQOX zXGYfmlP@6W2BT1H_*19X_EOu_4YD}p_BhCqfX10Bh_`ld6?~66HVkbFt|p-$F{wr| zzht%E4~%qhUg>yg8~MIbbx*o>m;}c-Oi=;O?DpM(g1s7Z&)55Bq@~im-RquRc8vE9 z2qHYf@?u-==0BhQ%Rdb)+b_%;Af#{z%PCPM33nLlO{X#q$99vbdn=^R1C+Tyw((-2 z&TvC_KiadB=xnp58Ha;|9Hq zQh}eY%AS6B{tx{Y0w8o%L``-~Y;`-H4u^OS!Pq!y8w%WA7;n5Ky+Dr2imS5^# zdFW-kK)|dQ9^V*$Mxoq5E>iSVAZce6_b2ig^c;@_@j=>4p6+w!%Tfc^CX3(5#ES)U zAPZ!0NdW-vl`*@jd1-lc>V?hOk{E6sSUu+eVsd3&GAN#}-= zNHVxj$32$bwMSN?j@++N3bi8;6NB1&qO85HCF z0U>0fO*oa-r++%FT3$3wHWssKi8B)vW`F~_Z}b-C$L(5z2=mX+sZN=e6LrLemg|-y zeF?0ju73^qnhJg0qXP+@{I&~S^sDVWxKxyOIyhro`BrQYrGeRA@qvH&%#Paqeev99zde1NKq>L` zGFl%j6$F|sKN2T|*!(3;WHC^7qA;J;i21b)-CQ&i`XD#O@n}>3>~Vw}SR2vt$7T5P zWW!FOZgmxm9rfnuW(PIe>|sS>2>`^tuT5Ie03h}k%OYIfQwxt_6ab!q;bwXHi(W!S z(EvDhCm|UVP%|>&sU+Mi)r;)>wI$o|2BrwW5!kX_xMK~?yK1fdO}7}UY|uX6Sd<&!@_KmgUGXY! zmr-l%{2|98^+`{rCZawCWR(Vt}%;)(4n2gC+kf{ew>} zPXUv56xNtWTArV>JV#IgBX(bM=i^lDiE!Vdl4XND4&!xh*ftrLw~E$3YI^eVi3i?I zC+5jCXnr5IDnb{(1y#-kT;0Cc>glP@*K5^$e3?`r?mc$NyRBYSoK3G3Leg1#u7%h3 z8!L|5toCQTr@FnRS|z3i*Z_wtXr$szq1m_I$mcOVawW`;A_tYFQ|LeeQft^u;DmFy zjz1sxLc8<+a~Hr@zLU|~Ls3vvM)>XeQ_*`J+MT%L^V22n22&Dz=Rmf7)NIs)mlS_^ z;1W7^r5w5jx(w|S@%m19MkvV>+>jwzeZp$*330V7`cDUcC)fy-3O~LC0F4ms6U&G2 z+o0P6QrecjDnzAO$c|6+-}bg(a#VKceCujAFo8c=F5SZu zLJ16J{WjJOC9iFo0ZaPA-qpVY2hIioxHfYIC#pXMfI}VtfMW>4jxCoZR8{dSz}j?4 z1Mwil$u+``mDLti`$zwYV@pj6NjLY!!x>i%$nB8t_P_1qr$>q9h4DV5thr;ZB7z$3 zccyrmXozZ@-Thp9;slLf^)D2<>0KQduQp9>AJ-KW#we!oFyh4VS5Utu)^r_{}KE+(pNyD$3IQ@L3G1iqz@`XTnxd_VLA_I6dS87`34tx}N{|VE=#p#BHcreoYV+CVT==D?3dLTcVg&5yoeiJmH zAxq;vNI=Y<&5MwzQXQ=tH`H_gq*WS;fSmmpLlN>zO(^2G#VL~h^xCc%FW~e$@_Ry! z+3$}L04x!jeD{M&>)Y&i0LK21R`sz<=IQ*}-V*EM%WOi-FTJPdtyU{}K{sfU!3g@a z>z3U@je-_4!?V`~m>dub7*i)pLd?Xtc@1%DLv3H+JDrHS#x!y~ykSpzS&yp4fIT(Q zxZqOrfTxlOYUM=t{NjyHlkZPn}7Q&>8j|{xtffb@r3<5WB8{eM=d$hHGCJDT5npOl6l03*J`+ zV1PJ~xORop_s056el2ROkA02r=v0_#5O}%qPv}*ncY+c&Wla7ZE?s zMk!kh`i(X?s+D(t9dtk{6m_Njqol!j4atMD(vsI+)}sLhI)>HKTzDgdDt29K7C}o3 znZU@nFjcv|$oH;4CEay1P8EKbfRVf}Z>>p6aQ*@*pL=_;;%}t0FxTLj~j?O-BjJ$d%_Z|BC~Acj~L&W1qFWZHw6F~0wt>y2T-jW zF9;YdT7ir=64K&`&$v^CLq_G)_WW^YPYesoRC}FC`Z`B~Wp@xv@%9CGs$AT!66CxG zHY9ck|I%Z_1O~On8Vv9^?y&>4LkOJNSd2aqU^W2^3%ohX21XWRa-EI;lbud zMrmU+XPKqWy57vS)=N@f{j}2mx6vQFEk)?svP^x z9~b!U`sVy(blqRSaay950AdKdw6nEG81=loCCU&SGO_@mQfYG(&TjN~vf_p_FbZI} zVv{pgIK(~rM(H{B&|n(6%&vQy8H$Q?R#}{o-7ZZ~U7i;7Ns|=gt?)6KOODu1M7ip8}SvD||BWczQB#p63MMV?-ai1+5xOuyb~H-@+`Z#L}8 z#ngVbVH;oW5JclRW4v&X1UL+Pu-p;P3yLnaB5xv=uU45cVW&DkaON%+HY~sz*8&p& z3Iv}L93E^@{!+1U!o3I%bpqOPSkY~*4LxV6xizN%_w_R;+K^!hw&VH96rT+z(YE$? zobHSNLs&AdAb>gGaW|x)LO*|QXV24Th_vdZutb^TjEQpp7!Pk%h=-*er5(knYI83> zBGC4B)Ck&8PW^Fwv;Uv^yKjFfxek0XKAglq`k|o%2W<-WC4NCEX8bg6`*C6niHIFZYw0BvHvvvc6EH(4~@z_YWY+cc} zas~C=WXC#Cf$&qs<2`JcUyg>M!L+r{iM0ySI@JG7^?|?0!6*^fE@@kzI*bRoyC75sW}d`vCzi2s(7!%tgR8O?$3u-L{5`O z5Fx)xLoLEc*8nFlaIi7_&gc9bU4rTXz#dGI8OkM65q^K0g29)V{OGMk)2o?Z?2Z3K z;Y+mv9wxqJ@QRCbtF>Je4B7(*UL=_ihWwI&-SNZ#f7oWnBo6Mjh$@ z9y?6)+HEWc2=jp_ojAh@8vjVMN6~@Lxz)nNhNk6?UQm~-F&|{%W!_J>62}2LmgAz_5G&ld>uFHyH+lHXg+^))~!;^Id(H{TdSCB z>`H35qGut?ouAQT_>=StuZ&2a+Dv%KaV+ThlJ`Af8U|ULs`d%CqoqXQ!jY%r z?5GP*_y_eqb@jjce+(e6oC8^<4JxDfoB6`?wHKB95dPf^30`V-YzoRtfjTj01~`3^ zhhx!JN^-Fo@=Yw`#@Nqa)vm0Qhb& z?mDdz>(}tWT%nOE(MCSI-nRf1>2+H069&d8q%{?s?A217X zjvF@j_?M&W*ZRva5cB>5)l6Ug!rbO{smrW`zpWr3FX~%z7H%TAyLtI{FrYS`BeMev zxrms}k%A85pBaz2v}Za?qqI!mQd8oyWXOkGj!fB_)GF+zkk)D_>=^M>_8`ccOuzNS z;XtdenW4h`^Iky>Pqumdl8$%M#xbGC5?z~s%wKeL3Ddr5)y+UQ?qXU{nD59KQggQb z#IReZEzx4t53f zYyj8{zWs~~Qy)Mgno&@LN`O)X+lwQuN~b2f%dj3S$Dx8T3qQGZq9KYBF;qgq=E@cO zGrsV+O|LM3fkgmHL{#->_w1f;_Veh!tM-tGnuD8LpZblE*}mi;+1tmJB_XwJ?%&1c zpo<^o?ZNLJc|$By^kvy{3Dv37FgmWaxi+1I^E0`(U$}|eiG*?==_1EY*8)Hx*An5&`D)HR zPR-``88loScn>t3;Mx|Z@!aozi0;6R{{0B<<7G503L|2I&mE;J>v2Wi?Zs-c0w?y% zO3#n2J)e_5YEar3v1k>4jl?2azQ!ed47Q_%dSY}Be>_y{+giEaf}H)N0imkwjl7&s z`@chgfh6^p8oR;6H)R%Ec&V%c)!Ued1Y{z+1yPL^e&a@1&tWP{Kl9rH z;IIH5Bz$_t4V~J1Am4q)FgDnTBJ8t+?*V(7)ugIKK-0Vf^7P0-;z|5vmIZ zkh9l6(x9XkBj-CxotO-btE_lMg0BK(Q(eM5Y#Hs?JfSZN2%*SAUQ;i1>h>V)$J!n& zZFyo`x~pdY$F5;BlIG8SdgGn2E5(8x(QMyT4c*%A7;Io8PZn!;WB#Uh)?7hSYWn&* zSR5(eXRaWTpKo`%N_dVFjJT=!cl;)7K=S9AqRD}@@zLq_7Ya}!jFzjVy1&;>UiQ9u z{=TiItS!H8{}OV|YtP%hdUcJ8-hu_Z{(^j^_Ky^;77f@ClI53RU-69?|Fpu)LLG@3 z2G>H<{C3m5DV+Y?4U_DY0B&32yd@F;6Qv1{Iz~qhm02(sPtXCCbpop zG|GWH2vz<$JQL46gL|*qL*|F>I|qc|2gz0NAbkcW(2`FH{rb6r`NgpLW3So6VaOMQ zB$+e!3+A92E4?b18SlJRJby`@##gkvtT+%%G9PMKX5GT?82y>6EbN`SUe(*ya8w~K zRTkU-%HH4sVz_PR$5Af1JxA?t?uOxTO|y%OQ`K6caIaL8f#nV~tcb7ny1Y0yT?si% z1A&YpC{?P6_Yc$FGS;2(!=h(OvR3MsP0uMo}a`B7I!pRP|Zd@0AuKGYaO8R zUm|L;ptD$OcSR%Sh#+#{l3EkIL5WWZaY1qd1<2!YM}voU;;B}hf^{S*0IQ54C@SrO zal3#QN%S2%^IB31|7n!P(wEn=C*!hrc=vy_5beK+p9dbGU!Knm>2auy zRLoTpU3Z2ilq!yKDl%jmZ`k4k1(1RgUQ=W@A$6N&!rGr&K?VC*5|KWU2PS@;YQ{e*QD-+|$iA3kUKL`X<6*U3%{ITEtccu?V#p_Fd>X0w2ShvHO>Oj538yYz$-s{ zy37+FHnajMj9@(zQXUH3y#gbkD=T>~@S&rH&l4ryIM49;FE|^7iY%}+<5;jqrpm(j z9_SOvs$H{t@_refv4dg(9={Jbc{te2@jwlqCJewK(k2|nKjjOrmzxDq+ z?spm|``sKdE1Mkt)WyZ~Nl$ANFMgKbAmmOD#5h^|YPAwVi)E{OsPCr4A@6V8R(H!mfR{ftBAQMF4dEwBb zDcxkPpHuDZ628o>5g3U7(d}D*$VNC)*hGub@w(zC8JvI)95NjAm@QL`TXJ{E)qhZk z_Yqy~3G{KXEu@LP+f(S4__h zze%npw+N82Kb#t-ss^FPu@`k6mq>)y{PmpJMaZw+YzUR`XtY$QA-x*p7s2HgEYD^= z)B$E~8k(f9B6~zxY%uzE=)cOJF*r=i<_gZ-0SJu9W#3K+jYZTYgL5Q~uOBC+O*&ea zbyMP%O5e8$3SIXca@#8XiQy9VC(;jVGo>O52aOqK2XeRf>@?f^o!x{o(%DGXZCzPr zw5%HS{o!XXYSD8?6U3*lebT{PSY$!MWWNx9$q6@=~+V|EDq z58un02y!{TixXbJSj-3I<89aLq1qs$?-KtG_W44=o)HRpjfB1N5hU_~Uv(=_%m9V~ z_3F~^?kL9hoY|JNBOQ=ij7^Bj5gPhdRduj2t63{2mt_@365jm)@!^`_W=E#6U$MqNa<85ziHhi+~ z%{T_EN_K4=mH&>^WL(^sGrst!(@Dd+4FV>_N(~wviybcghd(!A+I?Xh+(Z*y=<8-p zA?efQdP96*>HO_uF@uXtoU>Tof;(Tcj`=GPbb|%=A@y&m09%tx(0=(@^luF>L1-}9 zzt$&`LEkU{4n1!DO3dsvDxho&go3T;_}Jch3OXY7|yw^^HP?RCgSbUH7lM%QZJ+vN5EQOo~Lz>39n zZdv90Byt; zSz%=@)3fJc^H~dC5=~pqRzUpCeW1AA$a|p#t03?zw>eKDw?;IjPo1n>y&3|_4*X~Z zzYNP?*B|K&Bqrt04Gjr8X-D8*t3r+!?a==Muy|c6f}bGZq{V~&^mdc~b!fIQe)%tQ z&RIu2x2DQ@M{&>8N_zm9I-U61LsE+6IGXPL!!!(=?^*HWVBSw8^Zkh`lF1W!|AXg7 z^+E!*`9z8BUW4fJEG~a>I0=d8b5vloZb9k#={Kkaq(#qPGq=lK3Cp%3o3{|EWvL%s z&x^)3?afNWx=^h7V>GkpRXJ%tb(bo0Sx$uWi*(QK$}U$S|5Yh880wILnz^DfdG4C# z6*P2~!}>9cAePwmlfa(5`Fx}${Sz|((eE`MDDjSFf*Q4Y5I+p>(NeH1(6kTuIbLX> zdy~99lIUX49e(T7Y&_D)KHl}E z(GElleVLJ}{iv7Yl>OJ~US*pG92E)W)$zO3C2HS>pKuJ3+DEN50LV2CLToeF&xxuP8fUc8X)hzid zjKeqv#}RFiMKMyAX7~--RVOiW-Hu(acUzz##V6R_E#x@lP9lRXph~qKMYH=pW4o)M z{kL|>2EE!SoskW3m~?(c!a#2s{R9_$SI+)=?s3a~DqrJpZ|_t4!_qHj`k`T3Wjf`~ z`8||zo3ZM{%D*Et(U)cUB@x62Xfxo^+6UjfZ(wqxXtMmp1dmTJd;&+{)OJczI}e9r2wN_Tg6cg%0zpX2!6_dhTXuGwp^wby#B^8`AE zF_ApEYkIxR;3ah;x{P6fAgSx;#tiA1lbesIWJ;yf41^|SQ|~vJqIi$F(XTgZIFF8w zmikg?)|N7(MvP2CuG-7HcEhd@*lVCo?Ds2#j_q)Ra1hqIXR0^C(ptLc79dF7>E%om5KW1dzwDEz-RH)Xv++{Jt{ z{6Jkq5%UM!^Xe*(I3NN{PSv%;i$22jR)SS<=4Qp@_aX%*N``fPfp(GSfcFl|hT8h< zsX%*=lx#E25++`(i}TGtgQuM&tS_(MTwPJ9G=?M^R7d@ccN%3#saeRSKhqUYe8Y}& zD*I>E)0^b{fP#D>oXXG2vGrP0)F7pgD2+zWSp+koaZ$ z1CX-!zsI*osC5jTet#sdRSeqm?$lhE=<62Or7_A}aDs)%LUKFqVbg_H;f}De*ew4+ zY?bWiAC-GY+wGD6J$D^9w4c-B&}ttCIRi`+lO>js0kV?sgcZTgf4B|}YOMroyA$AM1apN9^JJw%RI}`Q+6b^TdvzKppO@^;B^Y7;I)51sB5bgcEot za7_;68T0BuPzM#M+d>Bu4>Q>rDw-dw| zb%V;`PdSLkJNP(t@9>6m^ys?sWr^XlAsr^*pvejXjw(nwF?jI@7w--x`a)QvEaXt7 zp6ti_Ch;Ecr`4wqhT%F$!?pm_^vl)5=X3Z1C?b&k{6Kq%v&)}(_$(-nbeSWQiGHA2 z^PVu^Z7sfo5kO>HGe5!BE~&o0v_mc%Wrw!DU^jBByQ`VO9FC_}8@!JfYMn-digQHc z%$p1*zkbNS+`kGR3lWREM)pP}WPSVRrdi^y!vC(^GwHSszln?lic3!Lh;B9TvT*6S z%95q-Bm?OaV42ZXwJT43f>n(g2BUPO8=eSWktBo0>r@P8QZ_i*_(dNTX`Ropar2;!%szoWHS35SXB!z;^bQv4zjy74 zhVLy&et)#ZD*b5lRkC*}KrQQ@eA9F}9fgKjV9IqpKpy#`KPr<>BuDb>jV! zw`v*m5#`7Xamh{l8`hbl0T?*PLGlqXPikiLlKtqNcCD(gZ8O)9Y*~4zHZh59nK$L5WnWGA&_m($t(qbbr+SPO0WT+Awlm5=fkqQRp26mcs=uv5h z4LjUJNif_Vw%NHTY!N_N1aNamF%O?tUcO9FY(-b{?2LuQ(beC(quIWQwW26DAZXQM z(Rq>z4wv*R6Ud#(+QYe;+?`C-S%V1qF}NkDiW_^fR)@ z2`fI@FOKh*xMRl-v0#-Zq0bn7iI3WpR7#-GI~?jNbP)mPH4e-h$FfZ+poC4_%03sP^9*Z8<3QQ{$ty@;agJbApdi!8y^ zx+IL@seUmf6Y(~p)ir|{%`JP2XEw!Cf9dx;wV#7MBt(U(8?xJNPelV~LC^+JOMkWn z9F_z;IxyWgYD4w{D_A=^Oy1QnMZ>0bms7CP7yoHyrGkF59R;nI25GHnHV+?$CvtCc z%PK9xw><7~UP`8Q!VUXB#kcm+>cMFl(XPZ7hHy+nnBnu53M$~j&0e}jc#yYrhXR5` zfclis88`~Q`8^9@pjD1#hhMbo-E2uL6~4=)MNdhnO)HAKEpHOt9pL^vLePcvYWi1N zQRVc|h12Gsws!+j;q$}l8Z4$6EX5cQ}DnL~~k?>Dl7M<||3!S^Bsv#e1(k&jHBi=f@tw7xo26h)7`h-1CD43@=D zg7uK-2EjePMm-WgdTNu5Xa@ewQEO$sRP1?5NP@Vic->~6smKw9AlR)2c@4huV++zo zVg{gbF+`fJz8&)~I^_K%0HYOoQ|5dq{!hl5K!l*@e|+FGC2f0lxf?UxI21{%RUoB2`6spI^deE83ot*mv^|Yp(Y~LU^*3kG_6+$Jz%F zUvMGn%(>LBVKbOz<_&}w>v8Sev1~bod=^yQ^X1K1SzeU&A)wYR=@!ahF%E@iMFhoeN3Ln$KEd(YkJf^m6O@8=lbd-L$Y= zBFPn1j*osxxR=~{cFWg{J3hS5ejI=h=7b?PRXBEbZkHsQRXsoTR>>gl;L%&VjObC$3sLoz@M99nw-S>6ARvn zKf|%3h?v3gUsENS471Ok5naZf^ZYZXP&5M6df13Re{n4p1#P3})7ss;t+JcmaxUuN zBpM56U?BQiq9?pwMDR?x<_bD{jfy%6k|*2JJ@qqaaex~o`ywIHi+Zwp$u@hp%D5;l z+%sK5D_BS3MZN|`aLK>3rIppFRLEZU!uSe&sjre1J!5=M9+jy4=p_$6nv zB^Q#vg1#@Vszdj@XF(iGba)(?pOE%5@^IpqwSA2kc1v3+sV~p7<5@}6L5XbiJ8OL5 z&$3v(PqXc`MHFWEii!E=dPGGe9DMK1Zs(19t5iEuF>>5W^^zb48to&yc8(B!^x|s}tq&WlV>4zn zjoQ&bhvD9Vg_BzyCfY9k$qrRMbTh?|VbO^>5WWApdX|x|wN!h@ZG;-u#e8*j8G;*A zD*$v*(tABULBfkX`gBi^Vaj1%Tyst9-AK8cH^n*%8vy*!w54gxppJkUg2 z1O9kY;}-n;HZ+=efRhDqZ=cdgq}@i4MlPRR5vT1Sb|g9w=fA@fuOzta3=r~L$(dEb z#5K+7Gac_&gg^jJ>x6tAI!{GihipoOmctx#V$p)xSF<8~)Ni;G5*f#E5%Z|B5fTow zqXQ|s060cvY??U|`Ic*C)^j02k491ngE_RoObDM0+Qxh(C1_t^qXSeVGz}Nq_j`)t*kUID& z)XG3@X*M-T5Zp0Z*8_bKjh^pikY4D-cXSfFd0$#Jh_cQ3!{kxR!RGJ?|HF!VM59Ny zS(p8&5(d@eZU%eSaNorWLIf#5@Jv7RP86gYjqZ+FVr|r4jjUediHHOezStj2rLpITkIG&a+nR}( zh8Nx@^re$f1Z5t|!)kj1KskL|Tl3YTT zBOc1{u=44^vST8-y6F;YJ#AoqqN7G`yI%LzNzRD@DB4z?;|#C_GMB%%R!+UJd|mq6 z51Yn8f#QDMe~Tr>^rs>L7g=HCor~g!vxJ8iwBm6Ex>X!ZXlUGHoMZD{`0bSIBtDif zsx^h1K}b9&$o}s>;T#6kD(d>22&d0r`s7`8Zu^Wfh7oB`a0X?QIFf4F=aMJ@A_Hsp z_Osiz$)p0Ok=AzN+Qv*NW*FAe{zz;h9CWwMYBQI03>+2iKV70}V>ymnsf!g{_gelvBe>qlL{j)GVZU z2awS#x<=WJ_GVLPl5)Sx_BX6iL*4TE+Lgp2O^(?;1g>-yLVEoYXA^{3V#K6z!D^q~ zo-DuHz}lO2{L;6Tk8(@9EoP&CHL3r{(Alo{5q2m!@SiN2IgN1Yj@kd}Q95^&?J0nwG1%|R+Ca^PV=;k3o9t>+%_h6>G@S0Teh~4*@2|52pfvK|8fEpJ3It*L-wPv2U$Ho-vqB%NtE zKdy-cjvv*K(k(GIDI8hFc@hQgthj1yF6UNWR^rM%pN3v%hA1MYEVs8${71g9vabr< zhCAcy4fVkZ!;%;diH7;Lq$G52_`LGLUzZTQp80PXl0Zq-VV?s%9C1#YcN49hHnSmf z1m)cALL5y_nxW%W`AC2<8Nmty;DB-n0Px?0juFWWqkpqMzuncOP3am5dJ|Be8b78 zS>b+k-_T~+3YV7MBiG6On9EJnRzGvvMl5;LBKu!j^O`Dx?Sy2H%J84GS6_|>*bL5( zp`ZO;-Lk_nm(Y80u}~1aTSfrZEGc99r$BH`CnvZe&o{nV;QT!ZY9O1-<#+*E z*X^aIt^zGqen$o^OrKhTHz<8lvQ^|i`e0K)sR>3P4X}C;#O?+E`*Y|0s2F91+FHP# zV6fYp6$-KFBF;?;KLp&#t~NwI!NE;A$oIBB$Yd`}{1|G>p5`@$mxpdJH8~P)XTO&b zswoQqCJy;QMp0X~h`{hBJ}Z2>)Gkbm`%55AljV_5k@C1MElHkGxBRUV7@RXdOIab_TlL?vaAG7b$)uCQ`Qju8oBSzyK2Yc<}GiELYZY)X{&rDbAYk)u& zN4e|PpYK9B&2Lxf_WnU*j;Mc|LF{aC=IFuld)&LZ>3-;l?-k3*2OX0!mY(KW>Xj>x zQ4SHO7?9i~E_3!5C*^u^-?`~LODYK9PPvbUt)iq@Cuf2cnyta`vRnXa3;|hXi~n{h zwGJ7?XcNJ#wt6Mqph#-bNkh7$E;p5-QdIvMr~Eso7K#W=X4$3gmwlO4Z(ro6KaRSm zYXb){nry}Xdv#f2u=D>ljaP-*uOr^)`kdFmtadpAZ0dY61!$JM25s~AjBmWHH_fGR zomj!Zsh?Lx+?RS1Oh*tv0uH5WAp_n$xq|`Kck>j?&1i59)T7e`iLKgFiZ$tA=gN!5 zReviwF456EQw^C97btW5`SU2q4q%{jnRAaKShnlEbnGJldAKateR9+(^#|zTlo}rj z8n4EV)Cf8vcF-i*3o@nl^LVhc*dLr4rYdzA;(^D^8Z%S6D zVLe!`(%A13Sk+rTU|D|Q?M}_wfBaQ?I3mJRp}5(4 z`)nco>9hMMcLDm;Owg2@%4ai+9s!z7{}tct+xz@WZIakwVZ?w%8KWI;A%F7cZqtFS zuPA95f2%G{hrEz zTpSmu;&Tv@R4wh~{M@VoNFnC0yj=uJv)X4OcE7c{jN&(~9TP(RK~M%PmRH6$0^5*o z$dG3BPlIC1ZDH&E4`k!dJpJkijtZpOwg`04&J$A$-5uepwnq>&GgL&JsN6puQH&+R zCJFLp%HDh$rRnYw?gl15wts@9<$(majLH92dnBcsM%%t!=I-bR0rhlf%|#Wuydp)^ zjndu!{AniHGO*m0@bU3bKtLLs926QEAWBhXe&3vkNRr@#9Q2h-YPAP(Nj;Jk=t;`8 zRiTF|RzPX25ym3e371fT_)5vv*jnQ=Gl;lh=(ckHt-l(S2bUC4UGI z91xpa+_iK>@`2xSr)lC7q;CgVwOXG+HVO^nES1&d62r8Mv3m(oud{=E*6cw5$FxFr zCZ*F+(8$cMH^RrL0p(w2c8Gwz1Aq(28In~r(t`Vaf=YlBb%f;e29(c$6i-Tu6%AR& z5Z8421yz1E5t)(qCnE1$%tQvVJ=ebjR>|dgJYMX1%{8lR&w&L6l?Y6&G2inVERJvg zK)&BIqIvqXAIk?_R90hGE332Lr=tKalk{F z{3(R9Pg#vopH$B5+-KJQDf&d>*FJW^$t8-{9mZH(tp7dN3&BTvKxzXU2sKA@gIVeEDP33v+NY(GAh;1^*pFWPD zl^x^(tk?l*(r@Q=1u7qK4rKN^9mBb-YUAdgSb*`6h(45O;2rK0Jm*9jy_+`-4l!_s13h_>f{GEW6fU_{pfZDV2zp`iURu14m3;$f6#R0BcWYJ z9wv>~3_@_aKxXr98NQ1gip8eJ{I0iae+(3y71_t!A_5`|AWHZy6*jOagDOIHwZI_wXOl<}qrsOj96e?3i$K!q1QmpbIK zCM#}9`Q^}K5qRngi~^|tvJ`!5j7OzUocIG1Cc#gLLe%df7-L}eA#oC6Mg~M4uXsw8 zPiqPu`ig#4`wBUp-DwJhs9ZhNA$K@nRGPcrv%mTjveous!t|CLzfUes2Q-H6t-lN| zFsvdToA;({rpR6?5_t^FKFIEI=YBgO!K0Isu|Un)TYjr7>yJ6h1wO5Z`pkVoUyVnF z?_Zsv?up7{Pz&9*l_D5O5}&JN0I*o%Wkkc>if?ZVV0F70cpX<1?S;w_qBdkH9BT>?A7Jn5JXK1bYo;zHr- z(KkZ0c)@vc^t??HiR)L$488`S*8azk|KiQZbKnHX`4c(dc-|dDDRs3ejO}tyBi9qk zll1*KXLF9ro^0RkC(80Zm#ffON$vfeAYg}578>#mr8UNUgkPHB^)SP)I+lOi?q%g= zCf6(I|Av9>KjHG_kzB>J(K=_F1Z+`0r5t*TP+MImd*b&6G{}z%dt^*M1qGoS9Z(=N zRP0nUM@=@b<&Zvo6#@8DxkRXNP>)+rc5vj$$^Zh8(6KXooq%sYxtdF`89qQ44vk0G zDyt2}#Ye_^|0J`ZG^aj|Iou{aCJA(mxYFHQC7`anLi&lbf58AC{swW> zk2}6~zf7)Ha1zloMvAoqaeRnHxlRyi!+IKX!If{SP1}S|7$4Zqa@1qnN@4C*vPsrIO$rc z%>MgtZF*c)nL0h`<+!mkFkdU+JSDk=jo17Aoo*F7*$?v$hF0*P%$s!SH`&ts+3(su zuA#UEa)c+SQ_6n%%A_X5pNx+{tHh)F)+~K(%p=_l-Rc8Ctqps=>H4;I!l74-4{)KX z`d?;h06uNvsbPoe{DIYJu9m;^8i$WD#)WWcOg_JfpT7{MO7`3w`eO@gZk6I>kQVv) zd~+A;PUx2uiT}w$CjcWx27lXzVp<2ET|%m9-864y<1yjpyo4o*Dcx$FslR?MFL=PY zSCaC%Kot3bhslh0;E&LEbZ@h2QtU>=%(?#R#lzW)_Khg&FAx**?|L}Mn7@#6f+h_J z0T--%bi8}{T5mdjIw1wERC45p@c6%GzYW-Fx90{3qpH}XkN7nFDky{IhTZ36(8Cn5 zW#kJ{B`d=$YS2b$sTVhFWqLlpIrvjG!LQtQXRRo9{R)${8LW3r>D5X&rxQd8>@8!p zAY8@U^1aq-_a%*T42(n zIY6wj(?r;jvR5DqXx%9-lbLBB%~?m|;H(`Tkr)W`#?0sOl8}+T@B3Zgvo;sG)~KIm z@UXBLwaXLi(JoA#{#@+b^H{wtg#po}^PImy(_YT3#D7Ppab3~ihR!z|bdM__3_5?XO=9QMZE9rcJ30XH{)#QHd%qO!87l^a1*P=J|+^~kS#E&Q2w z@+m^5G4>353pr7;5264_2?uV*K^LWjOZ~Mm2|iGPzBYgHe|}%ZOZxGbdDd=GBw%vm ziUcJG`Qr@BU=i|QRFhxrKCXL8A|tKzF|=snzax;7E(GU`Fl5+$Kn$BeRu+9kFB}m= zp%p-<-M-3lf&XRh|H~AnZl9r)U1Xk>Ycn|Q(NLc#x($5w(+r+UB1_7TY0<*=bEL%c zl4$R{HwPxVS+kR(Sz_^OnG`T^d*es}rY;im1vTY*~0 zvws@e6OT9ufqi@4&V+!0H)`r99KZ*g^Gjcznw5{KheQc#U}y#63IBC73K;ks+o19u z6>j(v(5!jJvC7TR6!ylZ?)45)vh(H%LdB|f&(i^e<>PfB%IGCtD7Oxs#BsPE`<~0u z+v40qhO5UiTiR1$CX0yyLF}dIkRVCyP5ezkp96x}QAJZ96M}9qshJf8EeOK)_y|`W zu*OK0#4FeUZZF|Z8SItVl?I!>8FGQzgYTLQjB^&t_>61cr&yHT3Gk~If@htLH86TU zZ1(gfbGh%N!UIZdm8uaz3>a&ES6>c*pogoEuYPvm|8OS%Fvdu|=8LK$t`mflk2zu_ zgWR9M$XN68ibC#<#cVfbmq{zXjow z5%!H`9FEP4nDj<&PvWTbH)%ng@7hvEyXq&4Kb2zQ#4TGzH;s>URmWox4v(cq^Ie>LJS=+)i@4sX9%PFq=F1xFA|8k8E6(;FD01 zc0o!|XWi!nt=ko~EHxixjbx`bb_<^MbN}0B`7z7yWcfnru%zE} z-5k}}TJ<$ao?^JFTg+eBP+SxFHL~5}M*Cw>EwH!AHVK)@eQ8JiB<)NVLsVB`^5R?O zEMEkk<>BJvf~MxlIzR34#VV;7S-9YCz7HYcxTf7qlbf74w?q$r|C#v@J|4XGtFklu zO8*`GS=6AJ49FS1I{3stf&P>dRx%{mWnqqAr$f<3-1ULX$qt`69kEU?U!AmVHBwGa zqCYDDlvpG&0|r`meQ|)Rlc11FC^C>KxQEPTA&9@3lKPjuwgovjhjj>6(RVcu${YN-8%TI|8prXci$m+79s#Ux_n~7WP##wzp3pjgGD*JwjdT+e? zjz6*U%t(SGBdyoT5c{*l18$5@=BjCxM0k<-4W{_>V0(~8(Wr^r6KWTBNeQXnkXyj& z%Z$Kz`*S4>(Q{|#-dLfhEFX%66deB@;ghyRCJ*;aa_9MZK+DrcO{3EdT`UzT==m|g znyZx)?TvlRjXjL*z@EOJGLTB0#_kb zmFydOBgx&_+0PpuBL@!*;QCtY94oSv*UTGxTL6zTQ5Lbu%L+RGFUnsAsGR(Ws6F;? z6j}00ex~;s8B%KSYIxnGTAoc{jGEf8#kDEEW^l%IV`Z{NDT9vE)&Vyl!0maDJbhY; z681hra;z-x(;_5Mv5^4Q>CTJEXMOR;UWmFtIb^%G*WC5ysRmvXy5RuiTQdH^xBH)f zthK22#S+IM{m$#tcI+B__oO~1j64(^F}L}Qp4*f%>1oiSiz+##w6#gFZwf(eanWMg zCla>!($vo!dDU(>7XM6ejYMdWh8}itR1v27i@?lPHvKr zQf{H}z5^v%;D4*`vH8fp?<8v?uV2*((nn}1rb7ozVgXhfbf%4QIr^;0%#gtNN8>I; zS&R7s`VNp`)3zG3A16R9c5$rlwf^rz{H{$H%k&uu!=69rAl$LS(a6{t51t%)!W%T5 z-2*Z!shH;ozal9rDVh3MAj?`>I34z3>9zV0!Vh5zRNhfR_`dcn4h_#QPF_VTmgZ{u|u>yYZbRA zA-qsE$JQcB1xP>Q5th4Brkil#4x|{axiX|ukxQ=j&?Q^#Bh_*yaejD?j{cB#NH(XJ z5@M`cZ_+(H=L-ht*AnS=of$}_wG0iruhSdOXGBgno2lT!kp(=+$jHtYJ!qnrSKfXH z_?2r*8kXFm{ILzI58MG~$L(D>uuWK$g*#ztbeJ7~Tv1kAgyH?PVfWR(<+y|ofm(PU zF}!OR6i4NEDstDl`doCkcHz!eQAV|QQl*ZZY_{(&^MEcG=tfS=kSVMArDm$Z0 zYwzZ@01c*yVTL!WzRu}BvFxYf19NFkbN_aQA7F5MqG39Hch7Nc*T_wvm4} zVCPYRD5n6`K3pF16hVP1tYf}1sV`3Y(^f6Mv074~P5>O+Lc-F&5F6!9^jwn(oUd=& zdhJexYyIklivxZwpy`v5ZKSxIy2lU7z(NHEDQSE z#y65h(rsjjrgqd}Tb`>~Y1F#ZImy}bWj0{_vaz8)vUJvQt-N8SXU8J-9%WlT$+1pd zJg)ur@8|Oa-rcjK66dWNsX~Q>KZ&)_6gkPzPFXt8FLcQ7IZkq@1rl=1iJAgb#`>@M z*NFA@C#yTi} z;(SHKyjjP>y?cH&WkY{)8 z8iBokS@0?!Nur$INB6!+f?VW`L{7EqUL?LK<(t|1@ z)$x7hx?JS;>?FM5EKi}q$<-LCt}xt=BaSvvYq?3&5#`pUBd1ZI0Lyl%?4n?orn=nlCXTF`H(2_ls zgWHA}K9g_N4Bwc{ewu7Nm6C{gMHS++TpEG z{Grj$FjEqs>LRuHpsovGW(0@3{fk1rIq-FO) zEAMBA+|!1@ayQxH-5eud7u@T6d$#S^9&=l<(yKGw9hq2k_S-V6w_oD^wQ`nd*zezJ z6K8m3+c_bO{c@H#ZW?A7;9ji&4V z)0XhlfZNBrs7imrVT)2*P|GSikDC1YUVO|Pr4%pUZ-a_AbU%$aqIO3VH}*AZybgN! zT<#Gp9YA)16jZTqcm^jLJ{Jloo+*%!7L?n=N7xTN!l~7P{FWQnuU??FNM_Hqg;0iS z`oU*6G3%}0B7>9~PQ*E~vx4&oV*s>JSV~Z~dG9YtVUP5`STr0|)w4xBmYCNkOMgNX zW_QjLOBGTKS0LqtU9}X^*jvs!Tij32qphasW1&n(+K4y!Fef%pA^p_~Ex zQCf@v5E8MoS7ZH?Z~bh3K{xTG6=Mm#Z3_19iv?)R9vQfupRAv{S06^5Z@T)&PEtho zoj3ciT5eY!@75;5@AfVT9Z0vyF?L5XI-`hHHuiaWNsd|Hyf1JU7NbYF76c%Lj<}i( z;8oiWS!Cm1I3Z2^L$TpHb?WMy+;y>Tb?f}dZFp;lsfb-?T@XukJ*`odmw0brtQ7fNPe9+PP)KK$Y*WowP_(+ zi?10bjvA>cU@3CvlI#W0_aG7v2#e3X3U> z)qP~Spf5Vumr)pvZrdy`M~9B4O&jY+fAj91DxZL@}ZUSmaP`s2|e0xtCKZ72r+R$^7g z{?|iu`;FuB%fOrPuz|Calau!5*S{Yhr*3Kqe<6bq5hJR4crUr)X(x0Ux;rJ3Tp}xa zzBR|x`C2XMiV^_S-^f5vF4Xf)&%kKMK$veanRN6p{Q59_WK+%%jXghi#(tr}rMo=q z;c?_UxLXZ`-JVZ#K9k07kqyjoCyylp)O@^hmQf@mHcvKKPF7eq4TL0fReQ!u)UcUUD6&l`Kg2Vy7L&S(+%kM!Yq#=nOK7C>)9GXp^I;kFiLY6IG3 zO1HTcvVI}Z43kOWr3GM|YD7Lyd}{GEM@#=ia||*COJm-ej~iB3soCb@r3_#xnYh@z z=GBl@EqPnz=7==wxYYI3g)k$)kL`md$hFH3W@JFWYl>6i>Wmx7oySyjc#S$t^O7F; z)V|gm7x*gH-g6q$I@_fn+V}Ry`M50A#o5wWV9hO01o#v0dB9rUKvMXcD``z|+thD=|;D9;Cz^;6i zz3e}jb(9$PUREwTP#1|R_iayAN}M`3XY#m z)ox5cM}a+fh}P?NnQ9Zo@d=lfF{`sAs&eiAb0B4tsP@l^fj2Q7%xIswjbg51Tu1}& zPy(UtPygEc?E)h*@H=@H2P`JF*u%XpLxgA2xzomtyPj5T_X@Ev&Fr7L1{t|U3_^+d zs;V_RH*~<4WE3A;Nw_gZZ>OB~L|qApm6d6-o!4-E(?48JAdlsXSA137Y0pETHbCt{ zS^EHdf;*?YEEb}E6NK#FA6|$hzX(-1K3h3;*i-%)Nf_#eACW~QyNEoQoBSAvnIs6G zEa|nw5a+t=sX-UY>`Bg1L5g9565OUWKVm$93@*h)wNk!$V1j?GIW$R1`yO08m5zx} zEUU8B)9t|bR7FA}Btzl(j3j^+(nORuKeEyOlnEo{YB)Nw#6b_?P9t%40 zNaisyT>!Vsxw3w(`71892;)0KHck#2t0}0*fPI}_1=O#Q`WA7OtV=$}_e-gT1vY2$2&h6h%-EhTN^1m#KB?!~h^LkFw+O~bTQnMa5}mp~$bztKM`Q5(GTG`;vU(NLt$y+7%?Z`k-+_Y=tG z5I1KL0eF3<<{lPI0zzar9SX|U1>;3Y>9++CR|a0nHda?fy0G?5?Q!vx@DCLSjf3$0 zk*E(z?#^R~#4|9~5(|T03B7Wn;qb?)!2?nkHbH z>4e{yJ_SXHyriL;)ywhlO`V+T2eg{p@HTs;1-Ci|7w zGd)*&Tf;=Sf?pem24*aRB%yrqKV6N+5_dXIaTgcs={Fnd7Z85FSTZ5x?0_Obu~jc& zQUjfVvWyTEd+eL5Jo(3^E@LOgf&fj(#|@zgmYk!c0LIN6Oawtxd5=Zw@H2m^?@-xU8;@G1L?GB^iHHB(<98gn%4Q95ZsTqv5Ty^@!!C{&1{2kyEolI_wT= z@#m!vSH#8YukzNXe`{Zkf3NG23D$;@UZmH@sWq3 zSX|uP!30Pyb;t;5sHn^ZL;6S15}rN)!pwmV3>X<%5$sP;3#Yz1Na&uKH?H}rr)L3F z!Fzj*PO4mm}h zuSYO}9U31$#Hks!^ldQ`m8$tVuYCpu_qF6>QRjC=kZgP}*mBt;lL)eN#vP9Fwi{XP z>04f0{0^9Z|Ih=i2Lb>5&~+8{O|*Cb2KYA zR9^OQ&XWyaT+Q%)a?W-^#&`Eawy_X^Ph~TvQ^Dbbe4Z;jNQ*sIot;GnDV;-j2!MT0 z0DAe@yI!`9X%!ev!2MS1<*<;m>6HNT7XFG%QFACGw!P##NVncVDzzlv^WkF=*{ks#M-kI zp}LOv)q5EMXNa~X*zmFQv9S%l13}WYEB;72q^z=0S_wm0Y6~E}zDNV0!9f`cKu#FW zsj5+cC;$x$E+bH;BJJT64@77x19u1zRt5OVA8q?7Eh)zuShA{(%MRr3Wl)iaGJloKV<$DO!HG3$O&{p zY)Y`E78uCae4ToHho!ah3Ji^r4=KV!PsPNC$#Fs%^ioc{QrlCI)sWa~Bdkq39LV%K zbI!H@I3lZvMr~}BtW1_S{I9={g58GjM^^N9{Pwr=?yCzvTSe_J=uG4ggoJNN)Njm< zz1O4x?dqH4wJWNyOfo4Jt?r#A_p+tNn=t^=x6Fn}VceU@tg_%?G^Z`4j8>SrejwTW zJ_+rwB5W(}1=a9*g4n1|Q*8iok2OL6SJ<$8Xk5i-XG_{Xoy&6on%fdHpG$5aDiIZ# zAi5v}ofE+8w)unI6_6*=$#U=p9)nNpYo07J*Nw(sSWr^N^OUo)z{ML4`AV=KG77U1YS zO7D=k8-}45sZhu=TCHKg9$+0P65cqhwxyT=vOI%462_^X{n`XOPF>FOTRq`BeIHns zn=cVNzGYGP`8=^ow>$Yri*5iC*))TV+G|*E;G+awI>+@{Pv|ER@CnfR9WQ^yH~xwb zludB=dM{L|Cl`koJ>jQ(IQrEs7)qih)q?u=O!pVv?e-rk*frn2M>AFy zS7|UTwUEc>E5*disl;=`-9hpT`E?Rm8CaFAFk#eu+z#X#rKG2AXXMZ=L9iHD>7GHs zywP>U#gReY5BVEJJcU;mv6KDY!wj8R;)S&3A=S`$JY)F!)6$GfUVGtf$%W z`7P1OiWz)WfpIfs*1@~cr6ICcK6J*E+VmBKVp!M9#)BZ+=LEAsjY+|=&W6bsr1K?Y z^#LCCqR(CZ3DquoZ^qlOkIH5l#%81#&!EMi9`S{%_c{Er#xew3b;w_KRK~Jv`Au*X z*CJ)j;2Kybqz>t!;(@YDibNssw45#!rR;!9rQaHs^Bb*b8Pe>7lVB)|3cgpwZc_ZQ z3yVCJw9onep(2on<=->R?W-=poQA!ha@NI<*#LbSAb992OgN?TPN@tyef$4EzFdC| zHmtt)eqkwte>8V=w!Ja1^3sy9Ja;TFjQ{!n@$?pcQGQR@@V!fSBi$w4NC+#P5(3iQ z-AFGY-6`EjNH<7_bax{qDc$w#_xC=}`w!fovu9`K%*=JoHSowf)OBmoiiqP~s?9|x z%^s-9EhAbT7n+{m!ciQ;34xk5^M6^~q^Oy=$Mv+CMC)P7ty+Iju_s^Wnpm$t67;cgVoNKJMU9c}369kuszo?;blG)9gw0ZgwEWBY3OThFD)uw9TAfE^> zFuiNJ_%(;m;h@i)|PS zVX8ZdvB!GkFMs%^(ot;mwGK7HyX@}a;|L*Opimvn2#bem4U7#7LejcRZ2)k1Im0E- zKl0vt&+D7jeKr(ew#9Q&0XA<|$yW{Z`fNL2Vx4Z5l#Psxpgj~R|JeRS8a|-4JwH4C znMV@q+3z9*v<%LjeQJWS-uTVx=*ZkrvqQb*gv>V=ohbgse%vfVD^A0gC-$4M&Bt+{ zbVj?o-gr56y4i{h6HZa%iPGjBKqsxv7gFp5ePcT~!kY-(sgmOiztMD=<>t#9szyQp zbTw)fVZ4rWS|+6&sZGpkYPDar(2jAEe2eH)3@yT1cwm(^@%75HpL72qMX5UFdV5Ed zf~ThHx%jso;zw*!atYDxt(H%pzMPoKaJ_?!J|i2{1vc0qm5y?Xo?qs4*SJoYSUuoZ z=@#R4?|(bXFi-mY#_6QJX{z#boC2N^RkCELoMHNYf4-djN$kiAD@Nwtk|S)8gHJ6P z+-~5LHO>!PglVV*r_yDapM!cs0yt&Jn0JVre`uVfGn?F)=KS95 zLuqbQWL9U^XuF;AI$U=2OgpzzrApzCBlXYA<6t`o+` zzQat~%B#L@NXV~mquE0V^TPE*3d1h-!~4csdQykNl$Z|>D#6qkTqZY*q>uVIMk64C zfu-H%dBEH==C#w~!%1tX^^*B)8JD*n5b^MOkwwi@@$Xh#-{<6MFe2?5aW&9c(a;ye zBjul~HQIIKI_h!5|DJ6D5BMtMCRqwo?J0VE-X{%t4Yfl+uaL zN8tyXWEibbl64K6O}kG2;V^3DYAdWq(=@f%tf1^y`{%>*;C3%*ZjoySTWn?b{ z3?_>Q$Q2I^?46hVI;20V^9hy3;_?!D%{WlbX8%nRV1s}%rTj3XWfCnNT5(JThh;Q~ z53qlLvDQOP*h%;_rOg2+tm%XAn#<0q!aW&C>Exj_`s&@=+tmmEV?0~RVxO+uPK=a1 zo-=XdqJ}fzjp55B2kf<9=DwxT(4FlcT8b=m@IB_)&Nl$y*N}ID=au880vq9j;j^RgUEq3CMVtvkW@2s7ntiWH z^2ZR&dI=^~SPWn7K*S5i-89Z4`1;6*fc%U0uMg9n&}MWujH5Az+TNK|zZV`^?T@EJ z^SXh4|B(W3^z#{ALofCaZEPd0s`P@1y~&~)7(|91)vQz3wo~cm#fiMA65oM=WDD}( zK)I`EivG!2XFK+do;9pj63x+wBH3c|7;RdaDIAyh&GMlR7e4`X!Uf!Gk zJ$`@VcZ%IBBgZBYyIKAk)pdxMA6#V98|UZW`fc~!1bT*g1Jgf<#wSe!el4B+Tj(@O zOC=`l`fK2m+`j+lq8@?pWP!GO&CFaA+;hk4zq=4XPKzglld;rC>K-Tlty!b@caQxS z(p&6#IoH77pzid4G`Bw=+mm)}9lq_qj+_=gapd#=hBe>@z}9PDe0fTXmA?tRb#;6T zr&gM?c(R4fBneS_#lt1NZZY4$&V!Xi&%m4w2Ht@3*3Kmd4JX=uDzT`h5QTSD?p)vJ zm)_T)fXmR%Sj;r;maau3oEY1>_7k0!s1Z-nyUoUdBY*6(hRcXiMWwB$rI{~#qpG7Z zgevtCX8K4=iiE*-*}M4)a1w*N7rqly^{AlFHm1aMvl8EAF*nnnWa+_NFL*6xQw&s& z=!lALV&~7-05D1IVw$l+e^QMQrx{|L$IBnRt=tJ~2loxbux3YnBpa4NX@XS3p%)z{ zi@H%b>iJG}FG>7}-;({rYLd1454FrxeuU9~z#{sbU;g27F6lHkU2AT3|JPz`7dBfU z*gSS{CAM8yhZ6I~)n!$Zz{cz-P*yMjAsp>PX{$Sm(H?jg37%9DZ?cAD;ndeN8O{Re z+$__~dszhN*G?ihd0+tl1q-dEq`$0Bcmc=q(J`}iMl^| zdZoq=<^&418CnJ$1v(X`?OVo0(n^WtFn&g|?B}HS&!!bS{ki|Fx=$)jY7HMhNScuq7qA={D(wa5+#VJ4 z`43bM%k|KsT4A#hHH@>fWv8l)a+O5oBUBwkm2b3wQf-T)=n%ubowItCs)GxtM9Tbp z3g3|U+Fw})x^m=wksFZt{xy^2vX^#0CtFHbA6`v6^=$^5&4D-0#HP%~BWB0NU&F5J zk<)HRyE8pME=Sj&(8_^nZ}O(oIj$y({MEQo@2Y6-9dY*1yl#K=xH*?Rtbtha{(GKc zXP0{DlqeE$Mu_ST1uad{Hf|FQZHVZxrmP;4xtXLnOvZB1^%)*&CjRw>UD5wWO#Mi< zi+ULks1`$P&?q6nmN}EK`FXdm;e$A^xKRNVljqZnfkVlF(rhdh81L;r?ENTb5|OPPUx-ch;X9|<2)`p24`<>2>d*1 ze(v@(^47q&*9Cy^bZohZA!w_ZVjm|~Rv5PoN___ps*e%sfO0m()gA}!`^KMhW>nvF zxGs9zBHPYH_|)Uaxps4u@Q-k+7!~{3 zYVGyD@SSt=&tNmsgtBsqK!oar`y0sfOYee}oY$q`}(E;;kp= zZj$Y4y~`KOA4Q*eV{$qN3$#)a|Jc##fTbO>`WeU?sQlnD^n2rrlYj51Q+vU*8&gyO3>f>@xAn` zxBXd7t9)#reVH`~Jp{=PTT7y&=_;ZZPIEs8tg&{pe%u_rzqFdQY4+JBQELz^?0w(| za_7cmC&UC1s-y3U7hhMAio$B(0H;0W84zm}ZRg*Gqf)Rw-y$L)$^4yS=R+|@tp0`7 zczbV}kY$f*UynF`VUT97+hs7lvUbt7kSyNkyc22y-kt7=G*cwF?N3YzJ1i{?Q$gv; zd+4d;E}+6`9@|T9Z zcUrUil;*uU1aU#al%2BAY7B}2Hgm$py(8Ztj|3{vTDvqos2o_5Mrnn54Y61HedE*_ zIBA6RZoa8Ax<&VMe1r{C(K6GreY5uTf+KB|iCt1)1d{p+Lyvk&*6~NhXcM~~nh;e4(XrL#bdh-H@lTK;sDgb}+Gm>|y|WbqKz3GI zeWHNv8*QOSD?Aq?_M66%^yoGfct3~r848uzO=1v5l0g8%7-YH)oA69}f#*S3)}X5x zB4iWl5HjeC1V+eqYSP6^_U1-snj|#akBN_R>k33f?U39E@ zpz&f>AuIzy`H{EgL%9Q{G^^J@>=6R}43kv`KP@__QebGf~_Ow`9=7t{Lk&nCzkj9m&h(zOHn#pbIN22mTAe)l!<1 zaAd)ex9r~nEyNWNG(pAi#i!Z3(8rTQFrruNV>eB#_M8FHTj~6E)`vXyrl_#gm zKfxVo3#j_Xt7xD9qO+ZGD+6{bv)7PeUjoQ2t$c*Pj7iKG$@~h(4}>hAQJomNhAN zoC?ZKufb0saQ8?Vr&#jI8?Gi^y!@qO1zfbE`UY^~EZ!VU>o9v9ve$*GbsCAM>4=%k z&OFrMW;uYIus4_wA|ErLlscj90FZM^@ob3tpx1+Fy^i)r30!j3=3WH#In#U4Osg_! zab*b{*NC6^BFUxHe#kpQz^Ka#UnpdOYEM)8mO@%MiLY*2STkoq8Oc84-wGq~&0~Zp z5inUoyH+fIJOdM_X8@};Ncd34mBza?n^AR<0KBRtci=WHq@RGKJ*Ba%Zz99j>Y&9z zqvPYq!5GB?`(-W5fT#>vjla;as4_(}Zox`mG3KXPKr%i*o&^HHDX4yL=@uJ}9z9JM zGT!m^cyiW%WbV<=5ux>eDN%;;1VL`@W|PihW@kwB3MG{zY4s;@GrZ7uLkWvtXBj6v zshw02az9KLdr&;rO}M^t+t}sTI-xlG!BtL!ayQvT0B-nvfCiND4a)l`woY5WrxOd1 zT{6VmV{)=HAH#(RUVe_UuJzrP4{Y4jDDr9tNH{0OJei>HsjyX1aw?4Jzm-uMZ*Mf= z7)(D-Z?t4)!UKJS#haZ3xx1NjHJ7AiDL_?dnWj_!S7uCH{4c2D4Wb^uN~ZsQABIEn zp*odxucr{%D}QKGRV%E<}=jRbJFy(y}nVrIMam*1uWRBIhsaNa2Pjs+)#eG z^XY55rWSXN=fWL%;DcI9~ z0Hi_ks+CjQX@JP+I~>I5-PH%~q1gwyB|&ttYn0S})xAVs!m8W`4_KH==0j7H<>?I6 zAuS|KRre{}RJJE1j@H1VDw~rM!L;E?Tk=OI_aRw&nOet#wUdzyV21zhOznM(aOHY? zNYT&JTr2m@xDz6RAotiL`6f`ZkZw=*9x5bE8k~6dd3Xyl-b%80%R9Fo{!Dp|!Vz0q+V)Nx5i6kHW)An|b2R1Rjfx zgIL;nG_A~EXpYwmUoXHTn4j8v`Rzb}_ID6ev18B-HUp~3@CH1x%=)-hsLZ zwH8gL#41NN!p$R06bv-$?}DwQ>+bV8iv@;KGzfy$V&)2i4A4*;wp zX5ZU>SNW-l<4w>!MZ#?{YJi<)hlxoH#G}zQwW_T?z8OQ>eJCLSFq|5q%fDU1`c7_7 z*3N^9xA0Jk>viu0ga2^p={f&F*NO^`Jl|7>(ceO9bf{)-T1Ze3a9bmh5=x(S#||Ka z@3MIFw|FCH6Za{J`u4_}a8lkFC+4)L&;2E~Olk0o0wCtY!r@LxrGQ%yN351LdtlN$ zrMoH6rCn&2fqP~BLk|Z`K&*Uw&_a}br}zG50YRd5qly_`4uI^sPm`G$0etScD6Tdg zhTn%9W*sk{TBAI(4w#L424EBIs}7rl@HKOZbbZe(0FsV^1D`$4ZDYH1;E$b7Rs8~c zw^Sua?tsw*D*diP7bN)^!`K!zUgMmG0u$IjdYc>5wdx0S*;0$W3ke*;L*}MkEN`m* za>U%GgJ9o@+SDFyhdQ{N^o)npWsU*xKgksnp`S?t%799S;&0=k_74uBqVkEwT)uk< zL~ls~e6Jp_APYa5W+wXnWAjY(nLiz5Oa4@qHoc_yx~mJRL+3V_5(2>2m5`Ny66@?6JwA^_Y-Id-LZGE}9gOwXs}1i;}r zqt8yO-FV&kH1npUMgxG^lf37rZM8o&FNgxvBUCU=(?dWAjb;`Z`*{jp`eXM$`2jQ# z%FqW5PrNpHgu_?Ml*`Pt?h1qKh z&yVc}1;j*2_X=JeLHN#S_${i;H{_~kpSlCY0LXUgL*_3!NPkZ5!Y~X^L#6Zo=8M$F zrGmyJWpz(2zdgX|dn^K@l4vfBXc=TmXstm1e2(Kg9MpMhmc@Gex`Z4tl-zUY8HO!O z0Q`H6WaWL8 zY!cl9BnqGY#MQS!&^Qo;hkugufs50NOvWOnpvDd3K`8bL1rN^HKsqv2Li*g2J%!O@LfB>ms!e))^J&>yrvxq#ckv!$ zK5bZ=i`dA0!uzlAF@Dq1LjbY0*}Z%NQW>vdF4c zo&w^+gOOYT%z9r%S^S>Df9Iz+LSMOY5CS?>mpR3`_0+0!B|70UE{J$LS~!3>#SY=~ zYI{`35nzWxgE9xv10eu|Ijw9EL`X2L<)r5^@#qAHk-a$rpGzbiu$esN$QS3z`tMN~ zGx{|gOm)P{RLgnifS?zt2#5)gVI6 z%FbXTQylgIvoyyyN9qY;(Z2xbj&XaJ49{V%Ly`)Ka76rpDKhiVu(A=W1;Y4$^)1E9 z5gyztzG5iVEFlGT>yn6lGF{r$B4kZrK4tJ_Vb<1s5))7w5b&i>83cWf{9)55+AtTp zfmwj{Tkm^|xAE4eM)?mzg;Ir4V$-ZQY_~1!UeOQjnN=fqwDvXe77cAXzo)yfm_c}# z1~pG!eQ|}(*0a&lBn>aX*j=Iu4uWDtUU*rkqPkUs6zJn}QixL6)wizMKNnwN(oY_8UfGW2EQ~bVt*~1nT*K3G+LXQr(6F z@W~{OErGK!kbNnIWXGOig}T=`aW&N)j?^!wW`zSL(e38 zMmgxyY1ynIy(8*_cY@(<-mhnW0yiOkxv3vUi4WOA5+oWkX)GFmmFU``O6(KR;CDku zm0PpoLhj_DAN``LNh%INB`=8(ac168p{YijTWA3J$Nafdg3YM#K;8ijuLn^FowBKA z+YWmmjKWA?qsWd+%?S-gj-dwnxP=CZ=+^LD2`g~D`9hcyMiUOu0EMEW-FyK=Lb_Jv z)f*WA@QHu&(DlOr)aqk+vq|i4abZL9M@j_HX82<$8~*VS2;;=nplc-5 zVg|}^2}4<*6)d!+mp?eWksUk{O5DRew>^xj;&WHjh#Nv2&9@$U1=PaBilm{P?8Odu@uuIc$ zqNBKP{t@M%Qkfvr&37dPmyL>X;c*a`n3dq?zFVBJ#g$_n!TgCU7{7CeQ`u**UnTOp zQ6b#$2!*a4v5{lBn;BRQw;&YNP!zwR4l7mvSn2iwexq88FZL^%;6Si!5JO+7+6NGH z7R6nq=r}?8Ac1s+!s=SQXi1s)rxU!DGI>dZ4aIZJe1L6K%zC_Nco|qaqcWW6-PB&X zy@%_u4X%n*@Noo2qAi|2Iao06-`^?cbHB3<4~+WR3i zjJflcX=wc+(c_J4Aa6F)l)QY^15x2nl>zV20a$053?B^Cm+^ATf7Ly(3-1re+%k%N z^2{yPaxBjJUpe8k1z~|;wGA)hk{r373HB(_Z-=njAhBMAKYp%XMyKy(ifCS2RWI*RNg zjD9yP$+;y90#MS;HWly?>KUszP@b_rt-+IZNKeynDSl;s_@Y=@&-s_8CY~lYMQxn` zaBH}2aGLs{17N|n8uPxbPPAh;{I354xJvyos6P|CTs7hq?*Z?_zyv@PWU^6>88PmC zbeDxcBHnku<$dO#7Z8{#)0`|%nJTwKe%!cPtWBML4Lkn32oKPmC7#7Df+Fv*(9Gjo z64IZMyr_~wxV~%&F1AbucJ#JqdH;WxzxhWKDl@NRRk_;z`?^U`p%4jAOjd&w>IE2w z#j$$AQC3hvg7(UJBse2JRj-1NS}bSOUw%xQcKvX1&Cg6n|AcSHS|2A4^di5DEhr0$ zWE=A$-$drEev4^6oj5~z>r{%)GVaBi^Yi!N{syMffu&!5h2Y~3O|28A@ZMYU03Hku z%s-w8p5OQ=q~F$?e&r;;b1M8cVH2G6XNIY;(q-`6a{x5g)(Ov6Vber_Eyd>S1En_z z@gST%boSBz!hl%TwEa_@4C+x#%CzfVi-ph{24+IC(*A8HBu-6Eqg3E2Y0oRMDBI01 zna4TQ{v|a-x$4xQ>b(kDSKM|HYM>k$hmE@O^M6%G z%+rv}beU2OCT0dAU{B6 z@Nu$r@NNg`jUrf@ugKiJpY|!mKqK@guj?>KskaJJ1$MgQ^D!~}5SYyj{9IUvU#7P7 zwNB}NqrrC$qGAWq;1H}3arohK?Z3y3V|5SX-+}(>sCO_R8*|1{O>0M>8{cir9=Cod zf5jaAh~695C7vd1o}%Wpm^}r<--cr8eBaKbC^oRX9WBx?g@w2|`G%Gaze%Ox!K5WT zL*<(8w=49T{N@LJl9s~SW$IdCgQ}Hic64`r_B4Nn7=Np;fBvAGc;xouqwBiPcSATb z`wLpC%@@Si@p&n3iR9b0jKh*|C#|$@3{?Ue3{ei9y6!%y)>X-8Zs>H3zv|yYV&;(U zTIC|cT8QOyVp;eKK_4F7d{eWKtrPX&57tam-TcB5^C0mZzca&6X&z=&kNpj3%jBKx z4O(tWv6Y?!8oBbt!d-EHizBKR1kyyW64>lLNXxz^H;ES~iYx9(%8ndx#}yvYs*USO zK~QUqsX6ugew?v}^?vA1ho+u-ou#|;GG`!{9qsdK#`Eb8E^RKoqT?W}u_~*nz`Ct~ z2x19cw$z~x#1Z?UM1uuJ4+-iRnsHK~Jsy}`@n$*W{LeG6>THzHY)MEXwK~oTm-7a? zmmEH&8CZ;%)5ZM;S>rQ9Xzfh<6$-M(YlO42hNw@PpSq?i{jc^LM~NDVY59*UVLJ*T zH;A&elS>XBBcw)0+{m>0miPEynu29_v5OV9N|QhWQaLSItc@Gy^!cL6Cqc5w0Vr`y zv^309(#}kM&IIs{l#*L(?h5|j$qO}VWLgXkjvY_KPa97iy7syyWiZXkl8x06pj}#_ zR}_+bRllsgHv10FWJ?}AQE%PW+@L#(y5W>Hi=T##y1vI8$-0BJN?DuGg`~f!vuZ(a zaPsp$7B$Sj-ndc$U1b5YLiw*tH3u7)8b5{+4)$bl)L0SPOrvLCkHSITY*_)t5=Jr0 zTa}e2`v0S`IXzgJk8t=XRO=G zPP76IsWS2|wP$Z)4q7(1G(;;YuEP(cKb7!K++YO}gDI`~r<9~Wc3E{KE?2a=i{t>* z)fZ2e5dxUcABPNpxVuIEu3y5zI}u@r`3pO$j~C~>r@i{8(4zq)KaFI({VXc=#dJ^f zaX0Maqd|r`z1gfolRZZ%NKnSx(fD}ek*VkkDk9_3j2LdQtU1nuGX2nOD--s}-7Cic6-`vJMOY2;OBBVg^Ski~Lbjbalz+uo#IWbh@*_ zdHOYXwj!6j@!0iLH%bo!Qod|CN624%cTk}k>>;CE$ZfXiC&Mr=ZnGzW9#ZazK_C)- zl=)pj3l~#%jnyq4SoRk^Vf=AQaDoESilVWK3|I?e3ilg%{7}G5DP*_wO%Q8xvaT_i z@!1Xo>N;x;%cVpmqrXYln6h{7bJXmxBq%A8TCX=jjD5;IAwRgsHblNsDuf$ zJmq-Wn_a+1T{^9jkq!LWoFH5%k0~uygJ+&j!mu*q*A=(kd%GhOOW}s%{dlcuwD8}| z)q1pZ2>}&N?m~&t?hR52+lKf!uQ3d|HyqBlr;doHcfvMpFux#5vbH1wQd5*t#PybU zYJNy+%5;kkX<7ntL~9BZOy9%9gV$A4ntiHQvD{r^n|TlrmiJQ=>DqQyBJy?9gJig& zlPxww3o;^6Im;slPYD)Mu@@h7HeOWMw^a>Uq8`|qy4u&3cl??n(N5rjhxV%nPGbIZ ziR~J6;E;u>UO?3eeTN6LwguM~c$bDwrT_w9Xk?)2ay{mUeIHqK7^74$aPhnJ$TzM>L(RrvC6RCGsj`Xp7iPlJ}+=ztaaWNqoy z=|zsnYt=v72N5NP@`W;|2Wh9Bo`FC3i18k^vEIbqRRKN!1%>Q0(oJLKfb-wNS~Gc>(3{J#W%S)?AabO+IQ2E^jj*l?G08=w#(DV4jBv@u;{IMD-|3*0ipx?+}VK<&Uk8`Xv z_yOt)8b6@QIcov|9-16i*DKLgc>yxro=qF4D8TH?Eao%;Kmk|2FjZboO`bI6sIKZZ zGiZqd;3q%ij0H>|cgnuVn=1sxL3bM@%t9Hs{LVkEs?8954J!9^%z?3s8vn;G;-IiW zm``yiX#0XU^`Kw4LQO`){PxKEv)!QG?zfmqm5W%^VcRQD>t_~%yJ+s?>WB{o;js1Y&{}}u-VhgT0^9Q5 z@`A$k^^OAn>6r=|ep zrPN?csbPt%WIlrHbNHqzLf2TgMH3GKkW|m{_SJdGa3zbol(YNnbCF7R@JA-t0L!G$ zIReEYyr-8cH|gxRb~7(6%hYsuS;whs3Y8tfHTFrzPRjFB&H;zF0K~RREMv@D%PK7O zNL`USIXR(-!=35G0 zoXZla?saC-QWl8o7)+_!R`$_6iar1{vF`0=VG@kRj5hgbh zu&q{GhAzSmf^NCPMCLt8{Y|AWoz~_2} z@~Tm+0w@-{bi@U$FuRO_Nq>cx8L(_D9$=So`I+anwKfhOVG#thS-@F2P|aAIP?6?K zc8evR*t}j!Mx{R&YhpGX~TB9)Zgjh9#d9_iSL3J&G<$vc?yG?w)U75p2j-Px+LYS-G2 zwH;Nmtb8D&^fY|rd~@Q63XoZh{^J~Y<$OR6CH^!EKwNq1_hbEI*MJhu=YmVw3+hGb zFN}cI>>oZG&UVy`AF=Um;lAV24BI_5dWC6MGPiY6&r|S$8yDEW?F%mu(8=G&hJTu% z?srIvZK`ljJ(^s({r`1PU!rqV7gr&!t`x46?ZL~#xYK6iCM{u~_~%7(%`Jdp;QQiu zW3S5(62K1U@ul--{86xSd$C7p2OS%o3I%tRsz0}!@vu};_hraDc_g6rS&yA1NovFd z+jX2OToNAKw>6g*iI`E);&Uo}{4cXY+_*+y%$H|Ta0VtP4yw+!^POHwOMP97fy#C+ z@4*9&lGjSloi*robh|Zhm6%jF3c5%Zuioe;B;%h^2EEgsFO#O&;OZM%+#2WHmeJm? zV7B#d9bYC1PYAxShZdnfc?S^q+2Bn3C!|nzF(CK6FGuL6@9~aQ%Bz093_&n5HXt;d z7;fyhCXO>FKH6Y-4r-rX*eS$(erkCGD zg=@G7abMk<$$8g2mIs-ZR%oAp-46Z1>WmMJU(38-XyuXe4nT#1|pZSI$$ z<#uzCJNISQq8n9-bctSiqVeER#j?HX$zyQl&UAL3;!pjM$>-Tx(~9@WA{#nk)0vPH zK^+Dbz)6oyRtrgHO((z8hcPOlP})b^!k@Cf*=<)~?cz%-Yjdg^j`=@y4R=HFDN zIQONpGsRF5IRqZsZcx<#22R%)V18QLR!{eL;`JlLO{_3u_x5C>Tm!XaP^SXR-6UKgaB_U*S6;5jYnOY-CEh z>B0)=Xdy#&%x8ZRW4oGW3{YK(xH|;B)%nh8SN5l#y9}i*Qv^x-nq2@(eBQ5VtC`() zr}Wcu3v~cg3AE|aCrS32FgiAY<^lh7ne)mz5KHMfr|x3wwh+hZ0Lu}mz?a8PT|!wF zw>mUv`ESTG=UFdn#Rwuv_KyMa+sO}aN5s|SGkrC+GtR$gRtD%6*NcFp5V}?fwDrAc z>(CUqg#}LeukJ?-UuY5&d5;841FYw`KLPbNBm9u|YJ|gU+l8I}*`zjuFKlbFzSGHe zo)Mg4P1zeu#^Nxf3}}WoJ2|$T`R!mH#7gh-$TL7dD%{)#ao>T)5A9x; zKSTmv^!EP#O)R%W-i0ZGNS7HruCEJBpl?(bHRU4@Zk1m*?fH}b4%>D(+Qnd0upJ(6 z_54ZkIUvLYGeF1l=n z0iQy=1QlFHZ^HCFXfC90a!9GF^0^_!7&nqgtc?NJ#cZn#B*?P zu;jK{7sQXqi41 z5P(9h1Q-#cb09;jI$v}!$=<2dJ)HlhQ(*?7Le;|0pH|^F@2)O(6z?5xV=ETE$aqu$fnK7*EER{jjEwNJt7%N_%oz@j;VKJz3! zkor2cfP{p!8_CfTcYc2E^0VtmHun%_cx5q30_xy&R04nCbCp36V6?DEmkY;&DC4d; z>he?$Z&(V36wpn(z-fVU4?-)fs==^1A;`_~60PNUX8hVO&(CTY1`1#e7%r`%k=d3; zpKI8z-&i%j?H<-i`sWygE}`GaCW1`-X!Q&pjZW^!C1T)Zeey#) zNeRvDZz4sLpe2Tbp^R%THhIXYbs|l$8t5m`h1*rB|10xy<4

xtSTA@{|`Q%4{%z z0MX|hc#a$S&M^`z_R{N(Et=eA5%+_LTj&Cso{K;qFp<`FY3xz1aUDxR7=wO~i=+1Vmn1?t(lgfc> zg%8FDqNj1$^kNJHo;Ca*4j2U<7gQkbD!m&*pKcL=xTIeol@_?LPQG%7V_cHsbM2Z! z5#6am{_%jHBgLgIFzZ_wn<3Ij|C^^C+UWuh92(uqReJ%Pcc#yj;LWRpnTyAb*Y)dH z3%S=e0>AGQ`c?&yB`qu8)hs~Gg zN3a-RCfUn6!~oypEJj1c`;*<0lZBCn%4} z`=bA^(0+tzr5+~ga0=gWLhw3aRhFe_!+NkQSC&Dw+!0ZP{)F3moYj!qi z^_QnIg{bd7cL6meAPIHYGra`xN$VvP;QOCG+)n&aX@Sv^he2%dRk` zSNF!Ba2@LkRUgu7`R~q0I+MpE8wLf91Z0P2PKO1HQ-S&s)JFX)SM<9FI1qs7^dRhh zm~;u+jD#nNhS^g=gDhGKk~K6QlV}_|Gcz-eQ-s4tknYPEW>)!cM*RvXB!Mo3&q5)Sky)rR_ zut1>*BC{>FIrIJm@P2`75I>K@BY&$JaQ6r4JB|thR0rf{@iXYh1Kb_vCuZ!Y@<8pV z3*-g6`T+{8q@k>{yO zD7x>LdNSH)IeDWdh7zAGaxA_Y;8bt^PMCyd*GFkhYB{WW%yhe8aBi zZzvu;Z*vyX6N1$l(U^7JVv0LCwGldYoR9+1uDPY*Yx$n`)oN-T&zpB z2&e<7c7D0>M%Ed(C zCsSrZo{G{Q-va(CwfI24k59^yVb#qg5iFnxA1yq+BD=r8o%_swyad&?e9STrG z(w)VL%`RwgxIo1conEXmNd!yia$)03s)1t#IL|%6mf-H;sA{(W7P|b|?N=I;^(+h^ z;A<+FXJHNd{$>Du1HD{~a5xA8!bRF3BPj^eo)`-jG`f8vk-v#zETMr*IlI2mLz6^a zt` zFQEK-o9rn>3T>dtaf3ZEF>xHp$k(?mVe3){w?y#2fJM6p#|j!vh@;!xcztQo>-1mi zm!UOA^|v*libkINFq-~yxp!Nok(x^>oITgdIr4_5|ILaW)6sg~_90wcicDUnPl``8 z`^e&vJ0W>%u|pS3YH;}8Xzco>!Rzh;GeEQ4s)sUw7{>PUBhJ}wLWMp*-lC1Z{_;Fc z2@DK$nK~E3EkT1Fq}6Co!WVo7*QEw@PXWefO*a9;0~CAlXZHHB0$I@q9Ls zjrn-FKO#PwR;E1+TPN1jgZ0y=8vK>8%6%)a0C=blQVh8;!-oH31zrQJ1}MPG1+1*OV)=KHvc-sRcqT#o0N~eWjyVyIFlt~(-B~*k(@ky zG1Lu`yqf3bb^phsgkWieJMGuw%}&P+QA=0>5KwwhM%o}&qgSB>1?M)bG#T3p@bGNc zf=%86!o|kF3)4W?O%7oNbso0V)h1LE%7(!a-~$0)!9&?zRgeX0`$xU?z%Tf9;<>xMe7s*qC08>YA}`N z>%&6l@K7S7;N4$aaP}Mk^DB~E91}Kh4^XB5i$Mz$%9q>O8Nl$J_NXi&n{$b@}8hhw3zCkErMd4*@OZxf=C~UGy>CM5sXbu`H z#a=#9UU)etjS0x{e<$Gqil(Poo!qb8LNCT=1Fd4^@C5}cySINQM*6ygxJ5+NEhNFH`n!&?BK1$g`7T?pHH*&aJ#gVomt4?>CV+qe5?WXE%t3932CGR9U=E{^j53 z6ncq{iW=VOU+WI;q7yk;SE3;HB$H|hT2&x(LnXPBmETz$5car-ss%^Hm)HJ7keBCg1g}9UN@#yd2U8uI$=*vT$=|D;5dmqh@ z+3((NKi+=V5y@5tV@SdLKQBEfxcd!fhg&=ikuKtPq?YA_7Utwt*Zk0g17QKU%YiLp z;VP$ryrMnUJ7t?EBXT_;<$cw1#m_o@a^5*N{bNCGAL<=*4QqW?9*icK*o?>IhZd5F znhXSMpKn`F=d89jpJ&9#UeAJFkg8rUJ0G)-7h66(JXk$c)&HONuKXYB@B6=I48|@B zg=QoqLb7i&wkSd+dr`7Wy|ZMSF|wt_2w9S?LcMKcYlxVNMr4SxFH?47XNIwUU*7Nj zgzrzE$9o?4hx_{Fp2s=&o^zk)dG5V~3Et@eVM3q7Zuol>G&`F-t4n2Wk!{&~Md$Rz za3^5c3!arQ4@yxNnyd-K?fm(V<|| z5jt^^aPFR!nq$x@=aJ3VfAKW$`Z)HdM`X_0X3U1767u%I3k4ZxJjSE=^b)^*74%!= zEXXYl!cXqZ?gzt>CT6`8j9&;|i1t1F_zf;5hLtFmi_&sjdj$(v0?~Ze$kfRPnqN!T zy~8#2y4NaB>i8;)eAD}Bl*7<*)Dur%;l*No!`=q2bo35Eo{h-RLfhnNL-l0C^|e_g7M7^H3qzVy+eFM(5bth?Xv~zV3b?>x{jzJg;yyr2of{Xh z3q!SI-}cf&J__X0m_bu$?N!B8S*3%5jn5LCdJKMb%#JNUntc`@y;ecM>z48DDIx+a z-VEa8-qpIG)~AvtS4$&&nQg)x;FVoYoQ>C4p9#aVtzSAgBQG zaGmHL0SBB$ySq=xSYnZ2I#`>@TxT%+0)H~Y1>Wpq$-nc)pLiPsyTB4_@b*SI7hjWb zCGVyd)hCG5>4F&0SF*MVRQlm+U$EuylbEzM%ia6%W#`UwW1!Ev;oZ@^6OcWpCrO?8 z5b?DVC951jdzBpafE9kBiRn7O2cp1dDqLk!k+H|YohGsUlL6D2(RX6nd2ch#pSuYQ z5g}3erx!(C#4CNXfe$$sj-(iC24H$r9Wgp(K;P`$$q=lKA4?ctW+q< z9@8h~DCMp-NI0NXy;iQNO5zm5!tF;JFlM{E>wEqUkd2Diw~od*9*!T=z(LdAzHT*m zg&E8tvMP9^SR<4x_u6TCLp7|j@9Y5gSLe*$mDyrlx!)3tbVj{A8Ff`?>CA3kJAtw{ zk+wIcyu-uCXJ%sJ(Y~pA+Z^h64hMCSn_2CbIzUQe49ykmgm0j+wZRv`HCK1owM-B2 zen*6op6}3WP*z*4bP5$AKTAzqVAzW$#sYl*b2ehk5YqYM>VBYMh{+ zxI}I#=qKgw?DEshl_5>d@D0M_C-bQc25-S;Nl+Yh=SVE5?PnEMuB14iVO&^P*vXUH zo=F_ zxK_9J;Tqdh>!_B@O7sP~{d{JsC~_@i`pg>74}{_qUxEepq_oO1{w(YCVtM&#P3&BH z_-4NcWzG`6S1dHP?7k0B=1z%tF+DsyhOR+SI|2Fy1qDv;)VNi8z}Oi1-W;%QmIs0e z-&(o&EBJ3-P5x=kU}~Ls>tdv8pTZzNr~tGEJh5{UaxENJjz@S9~;CT{z;c zCRc#_(IY>)e{XbCs=Y855!EW5K}K}Za@x*&6~F{_$o|fTw*ThiGh2&8)opH>-vk`& zw}W56o=1Z7aHdM2%`Sxmay%1V`DQCizYJyIgfCnNsE$B5SwpqXu>-p!f9k14`4Hem zo6mo~{OF3>!I<22B1_f>lYxr3>{kWhVHc$8mh&~|XOK@K)z?}dj`7(G%#~s_7ChDs zovri}?RcmYdqJNgtF8tuj?CZKMlm-84~vKeqyi15NFi_sEUyaS>J@ZeBCu_5jN$Ln zXUi<$0YO2xuo;6=fVN0#vP^D@4)mdpoUCR3g;(oDA8I}v81=R~7cvJpwPIGjEXOU( z#4)dT63u|dK)88=BxNrXwXL5Zrg`j@c97rMM=6*5vdy6F=AhLx9Pw_W$8nMDne4yV z53?MQRZ^vY5+~L&t^jX15NGr-WtF>${a3S?tzUT(-Bml?qRzLshwfFShscE*l&?#G zn7;JN*AErS%>J==;dveokle)*H$aF(|pqfRqlVTgF& zv>kTd7LOc^G?+3?xKLG(cPfK8)S*Du{s4a`gqJt6BL|hnC9Kc_5}P+eH=mhJ3p|8( z9!53ca?aZ&b1?(DgG7IL+ z=Yt0ynZk#QhIF8zWmYdfXm#g5)3p?9e7;(8r<1l#Q~lP-38*eRE-x)?s@glsndT9s zDaQy3U8qh)$i&!2VM2s%h}cW0BI*I5(W|<&KFh z1U5zc-a?I$L2z|-_1+iQqBe&^5!y4JbmMEQWMXQHOxyTvjL2F@bLqu6E$+u5f)J)N z%MlOf;{F|<6+8G3Bm7ouX|Iu9s8}Ut6ns+=J9;12+0ahwZ7!iL4ihaw_$5(jk#%>F z$+)9ED!psz{=H})cMKSXG{#EeKF+mgs#DZ~HmGHe-ZMv{pH`fHHEjAwqv}UmSRI{! zIztZB5*f4)ZBazt63RJLxHu(-KHQZm?aQXaop?mePG0hQi(;YXkY5BPAs*~VK}Sz_@@|C6 ztN8OxNVGtcQwz}^dyLR(@7Km0)41n!^Ds=Ra3cj|#xa;!PPp6=757n2&Tov8d~_PW z%Ov>-%6&(PPOK)Li*RmSz0_`>k0mdBI9nhvrj6<;-?g>wNu zCEN!ofgpQWnNw|r1Tf&l3#nJ3W%G_VXzI#6BptIk{j@sO*&;i#xZp?Fb!aaQ#M_Jm@VGEKq%t>}yrEu_9VwL7+=AT|Jv}gl!%&b?4Z+j<`DpKt# zHkLIws`goWn_Koha>)SOi;RrJA!#%7L7C z*UHM-(v6!Jm|10L(cQZ*Ne=L01g`xI|G+nsj`mD;(k4858*v_JDgTQCxva=m zcaMAwRK%0;3K9Z!A46E-f}S@rV=M7#tjQ(u35MCoblfxnsF|o_m_+ zOy$rr3$IxBbp$bUYZp&cnWRJ7(f2cb-~^pzMT#nZIM|!|CS(9)W)X`!cki-Ef3}fs?CD%Prml`r4LrzBU7@v z=A~|X&yRc^c!~}L$uH|PnZ+Ihn39G>IKLT->8bE3#;uHutiPg^@4~0eQ3nh8x*Nsc zL^gNGx)`n+BzVtiq`ULL#fg70B#I2DH7KjSYbAy`x~Vb=qm60pYr+*LkCO!j_X+~@ z2n!=o2L#q#p6q?*L#1H07@F)TEk<=G>PS(A8)%Am+`5RNX;{F!qBf}A5i~Ev7qvY% zb2%d`>lq^zvF_Y6Sjcd+#gcGK{y8a4g5J6KT*C-skLM69vVOe&UtI~I? z`fDA|J#3zGJm8YWTzlSBpR-|moXnLui49k4xa}m(do;z6ov)Sg{o>5xB6vKict^O+ zt8*Ija6&TjEJ)>dnwEU5P?3jlUsBp@3}<%P!;b2Pjvr%BGz4Vh($dn@DmbN~$XoH~ zEOrdJp{jZ>5g??-s1%~bJ$J@>YAvo0>Hv(I=S%ZP8cMZavrGACUtJ2f!3`p3V53vf6j6H%ZuRXc({ghDhJekoNrjWr%8WY9@}6A8;Lf%b~WUvl;&f`7@CR?8mn+m=VD3qbTs_=-D^b@^{c z{s8;WNlT{yuY!ockxB}-IhAA0?uM!~e7Z4Hpy*@k*$=-EVaiF+j8IP6u<>CxHKUSirAQ3(N&~Z7m1Y1&GXBnuYF;e z5^gXKOC7EMOAmCQnux`0E-54M`WkzpC7RuRJ2pcn zgGYuE9X#U~t#_9DCAL6cSLW;Mb%uJcD}h`Z#>ika%vju~i6&s;1)Y@#od?b1xt~Th zY7c0?E^8cZrhSgu+Zca6CnBCN6EVKWQjB#4Sq{%{LD%0pJRmvbA#dB-x*e5>;)-Vl z%%BAD>>Ym(G+Mxb--Z7Q2-ey2j11%LNR*hYx3xgPWVSm54wmP8Hv}(72>cz_TW8(i zQ*rHtsbg4O<^=xnaY|SnIjD{CbY3BauYYTaWf6Om<~oPv3iPzecLR@+RGD9{IM!|i z2tnizAaej1ki?@8lUGovS-*p{E(@_^wdS67@mu9cNj{`_i*}7TIO455T_lLm5g8mv z<_UhURrkX9WnH1kX8F6uUmy7(U`1Yf;o=f(+hW5w);e| zN#Wae9S9MTzA6LH0z=;23%%m@R8w$08VxKJ2e}@=JrzHL1r=ys+TN~T6-1Xpd<|ee zAG^9Lw!$}m%Gm}JtvkOjMB^ObRW|8gebmsybpToEP2=EWayp|osj5D`-!<;T!b0hj zQ}^QBf;~-RW8+?Ufs8RJgRy*cWXF%=#-MgY%$Jv~U5Nn4K}j@(w5t#0Igb`+B>KW7 zV)$W-1qCkxfrM}c3H))6IHi`s&JXM4@tZh{p6%q-WU1(zQy*`M^2QNPy3`HphOJA} z)>&Bmdhi)~V{4*S$ppLORuIrsoYdt@0&i3y^wwSoq9AO}O5=>~{JRra`fR?uy!`u) zJKR{goDd*X{2_PZ+Ef;V>{M$oD z!uO}CZ@O5S12i4jtN;Svzr93s^nSSX4Y0}hGb&gPWB+%2Q=|b1G7qR}6`B8$0TQ7s z|4KW~F9F&LE}C^k`X6b?{V4dSC-5KK=stk$ueHA { - const db = oldSolsToDB(); - deleteDir('solutions'); - writeDB(db); - dbToFile(db); -}; - -run(); diff --git a/src/lib/@components/Logo.tsx b/src/lib/@components/Logo.tsx new file mode 100644 index 0000000..563e201 --- /dev/null +++ b/src/lib/@components/Logo.tsx @@ -0,0 +1,16 @@ +import Image from "next/image"; +import { ComponentProps } from "react"; +import LogoImg from "public/profile-512x512.png"; +import { Box } from "@chakra-ui/react"; + +type LogoProps = { + size?: string; +} & Partial>; + +export default function Logo({ size = "120px", ...restProps }: LogoProps) { + return ( + + 로고 + + ); +} diff --git a/src/lib/@components/MainLayout.tsx b/src/lib/@components/MainLayout.tsx new file mode 100644 index 0000000..85fa149 --- /dev/null +++ b/src/lib/@components/MainLayout.tsx @@ -0,0 +1,121 @@ +import useColor from "@/lib/@hooks/useColor"; +import { + Box, + Button, + Flex, + Icon, + IconButton, + Text, + useColorMode +} from "@chakra-ui/react"; +import { + faGear, + faHome, + faMoon, + faSun +} from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import Head from "next/head"; +import { useRouter } from "next/router"; +import { ComponentProps, useRef } from "react"; + +export default function MainLayout({ + title, + children +}: { title: string } & ComponentProps) { + return ( + <> + +

+ + {children} + + + + {title ?? "codeisneverodd"} + + + + + + ); +} + +function Header(props: ComponentProps) { + const { subtleBg } = useColor(); + + return ( + + Solution Pass 어드민 + + + + ); +} + +function Menu() { + const router = useRouter(); + + const menuItems = useRef< + { icon: typeof faHome; title: string; href: string }[] + >([ + { icon: faHome, title: "문제 보기", href: "/" }, + { icon: faHome, title: "풀이 보기", href: "/sols" }, + { icon: faGear, title: "풀이 추가", href: "/newSol" } + ]); + + return ( + + {menuItems.current.map(({ icon, title, href }) => ( + + ))} + + ); +} + +function DarkModeSwitch() { + const { colorMode, toggleColorMode } = useColorMode(); + + return ( + + } + onClick={toggleColorMode} + aria-label="다크모드 토글 버튼" + /> + ); +} diff --git a/src/lib/@hooks/useClient.ts b/src/lib/@hooks/useClient.ts new file mode 100644 index 0000000..c9b2a04 --- /dev/null +++ b/src/lib/@hooks/useClient.ts @@ -0,0 +1,10 @@ +import { useEffect, useState } from "react"; + +export default function useClient() { + const [isClient, setIsClient] = useState(false); + useEffect(() => { + if (!isClient) setIsClient(true); + }, [isClient]); + + return isClient; +} diff --git a/src/lib/@hooks/useColor.ts b/src/lib/@hooks/useColor.ts new file mode 100644 index 0000000..d964607 --- /dev/null +++ b/src/lib/@hooks/useColor.ts @@ -0,0 +1,17 @@ +import { useColorModeValue } from "@chakra-ui/react"; + +export default function useColor() { + const bodyBg = useColorModeValue("white", "gray.800"); + const subtleBg = useColorModeValue("gray.100", "gray.700"); + const alphaBg = useColorModeValue("gray.100", "whiteAlpha.200"); + const accentBg = useColorModeValue("gray.200", "gray.900"); + + const getCountColor = (solCount: number) => { + if (solCount === 0) return "#ff6b18"; + if (solCount === 1) return "#47c84c"; + if (solCount <= 10) return "#1bbaff"; + return "#2189ff"; + }; + + return { bodyBg, subtleBg, alphaBg, accentBg, getCountColor }; +} diff --git a/src/lib/@hooks/useProbs.ts b/src/lib/@hooks/useProbs.ts new file mode 100644 index 0000000..c6d3c81 --- /dev/null +++ b/src/lib/@hooks/useProbs.ts @@ -0,0 +1,35 @@ +import { Prob } from "@/pages/api/prob"; +import { QueryClient, useQuery } from "@tanstack/react-query"; +import axios from "axios"; + +const queryClient = new QueryClient(); + +export default function useProbs() { + const probQuery = useQuery({ + queryKey: ["probs"], + queryFn: async () => { + const res = await axios.get("/api/prob", { + headers: { + "Content-Type": "application/json" + } + }); + return res.data; + } + }); + + const refreshProbs = async () => { + axios + .post("/api/prob", { + headers: { + "Content-Type": "application/json" + } + }) + .then(() => { + queryClient.invalidateQueries({ + queryKey: ["probs"] + }); + }); + }; + + return { probQuery, refreshProbs }; +} diff --git a/src/lib/@hooks/useSols.ts b/src/lib/@hooks/useSols.ts new file mode 100644 index 0000000..1146346 --- /dev/null +++ b/src/lib/@hooks/useSols.ts @@ -0,0 +1,80 @@ +import { Sol } from "@/pages/api/sol"; +import { useToast } from "@chakra-ui/react"; +import { QueryClient, useMutation, useQuery } from "@tanstack/react-query"; +import axios from "axios"; +import useProbs from "./useProbs"; + +const queryClient = new QueryClient(); + +export default function useSols() { + const { probQuery } = useProbs(); + const toast = useToast(); + + const solsQuery = useQuery({ + queryKey: ["sols"], + queryFn: async () => { + const res = await axios.get("/api/sol", { + headers: { + "Content-Type": "application/json" + } + }); + return res.data; + }, + enabled: probQuery.isSuccess + }); + + const addSolMutaiton = useMutation({ + mutationFn: async (sol: Pick) => { + await axios.post("/api/sol", sol, { + headers: { + "Content-Type": "application/json" + } + }); + }, + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: ["sols"] + }); + toast({ + title: "풀이 등록에 성공했어요.", + status: "success", + duration: 3000 + }); + }, + onError: () => { + toast({ + title: "풀이 등록에 실패했어요.", + status: "error", + duration: 3000 + }); + } + }); + const deleteSolMutation = useMutation({ + mutationFn: async ({ solId }: { solId: string }) => { + await axios.delete("/api/sol", { + params: { + solId + } + }); + }, + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: ["sols"] + }); + toast({ + title: "풀이 삭제에 성공했어요.", + status: "success", + duration: 3000 + }); + }, + onError: () => { + toast({ + title: "풀이 삭제에 실패했어요.", + status: "error", + duration: 3000 + }); + } + }); + + return { solsQuery, addSolMutaiton, deleteSolMutation }; +} diff --git a/src/lib/@utils/storageEffect.ts b/src/lib/@utils/storageEffect.ts new file mode 100644 index 0000000..018b658 --- /dev/null +++ b/src/lib/@utils/storageEffect.ts @@ -0,0 +1,37 @@ +import { AtomEffect } from "recoil"; + +export function sessionStorageEffect(key: string): AtomEffect { + return ({ setSelf, onSet }) => { + if (typeof window === "undefined") return; + const savedValue = sessionStorage.getItem(key); + if (savedValue != null) { + setSelf(JSON.parse(savedValue)); + } + + onSet((newValue, _, isReset) => { + if (isReset) { + sessionStorage.removeItem(key); + } else { + sessionStorage.setItem(key, JSON.stringify(newValue)); + } + }); + }; +} + +export function localStorageEffect(key: string): AtomEffect { + return ({ setSelf, onSet }) => { + if (typeof window === "undefined") return; + const savedValue = localStorage.getItem(key); + if (savedValue != null) { + setSelf(JSON.parse(savedValue)); + } + + onSet((newValue, _, isReset) => { + if (isReset) { + localStorage.removeItem(key); + } else { + localStorage.setItem(key, JSON.stringify(newValue)); + } + }); + }; +} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx new file mode 100644 index 0000000..7a4e0e2 --- /dev/null +++ b/src/pages/_app.tsx @@ -0,0 +1,17 @@ +import { ChakraProvider } from "@chakra-ui/react"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; +import type { AppProps } from "next/app"; +import { useState } from "react"; + +export default function App({ Component, pageProps }: AppProps) { + const [queryClient] = useState(() => new QueryClient()); + return ( + + + + + + + ); +} diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx new file mode 100644 index 0000000..b2fff8b --- /dev/null +++ b/src/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from "next/document"; + +export default function Document() { + return ( + + + +
+ + + + ); +} diff --git a/src/pages/api/prob.ts b/src/pages/api/prob.ts new file mode 100644 index 0000000..4f03645 --- /dev/null +++ b/src/pages/api/prob.ts @@ -0,0 +1,47 @@ +import * as cheerio from "cheerio"; +import { promises as fs } from "fs"; +import type { NextApiRequest, NextApiResponse } from "next"; +import path from "path"; + +const COURSE_URL = "https://programmers.co.kr/learn/courses/30"; +const jsonDirectory = path.join(process.cwd(), "data"); + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method === "GET") { + const fileContents = await fs.readFile( + `${jsonDirectory}/problems.json`, + "utf-8" + ); + res.status(200).json(JSON.parse(fileContents) as unknown as Prob[]); + } + if (req.method === "POST") { + const $ = cheerio.load(await (await fetch(COURSE_URL)).text()); + const probs: Prob[] = []; + + $(".lesson-title").each((i, $node) => { + const title = $($node).children("span").text().trim(); + const link = $($node).attr("href"); + const id = link?.split("/").at(-1) ?? ""; + probs.push({ title, id }); + }); + + await fs.writeFile( + `${jsonDirectory}/problems.json`, + JSON.stringify(probs), + { + encoding: "utf-8" + } + ); + + const fileContents = await fs.readFile( + `${jsonDirectory}/problems.json`, + "utf-8" + ); + res.status(200).json(JSON.parse(fileContents) as unknown as Prob[]); + } +} + +export type Prob = { id: string; title: string }; diff --git a/src/pages/api/sol.ts b/src/pages/api/sol.ts new file mode 100644 index 0000000..c625db7 --- /dev/null +++ b/src/pages/api/sol.ts @@ -0,0 +1,74 @@ +import { promises as fs } from "fs"; +import { nanoid } from "nanoid"; +import type { NextApiRequest, NextApiResponse } from "next"; +import path from "path"; + +const jsonDirectory = path.join(process.cwd(), "data"); + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method === "GET") { + const sols = JSON.parse( + await fs.readFile(`${jsonDirectory}/solutions.json`, "utf-8") + ) as unknown as Sol[]; + + res.status(200).json(sols); + } + + if (req.method === "POST") { + const newSols: Pick = req.body; + + const sols = JSON.parse( + await fs.readFile(`${jsonDirectory}/solutions.json`, "utf-8") + ) as unknown as Sol[]; + + sols.push({ + id: nanoid(), + author: newSols.author, + code: newSols.code, + probId: newSols.probId, + createdAt: Date.now(), + lang: newSols.lang + }); + + await fs.writeFile( + `${jsonDirectory}/solutions.json`, + JSON.stringify(sols), + { + encoding: "utf-8" + } + ); + + res.status(200).json(sols); + } + if (req.method === "DELETE") { + const { solId } = req.query as { solId: string }; + + const sols = JSON.parse( + await fs.readFile(`${jsonDirectory}/solutions.json`, "utf-8") + ) as unknown as Sol[]; + + const newSols = sols.filter(sol => sol.id !== solId); + + await fs.writeFile( + `${jsonDirectory}/solutions.json`, + JSON.stringify(newSols), + { + encoding: "utf-8" + } + ); + + res.status(200).json(sols); + } +} + +export type Sol = { + id: string; + author: string; + code: string; + probId: string; + createdAt: ReturnType; + lang: "js"; +}; diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000..a5eab09 --- /dev/null +++ b/src/pages/index.tsx @@ -0,0 +1,32 @@ +import MainLayout from "@/lib/@components/MainLayout"; +import useProbs from "@/lib/@hooks/useProbs"; +import { Button, Flex, Text } from "@chakra-ui/react"; + +export default function Home() { + const { probQuery, refreshProbs } = useProbs(); + + return ( + + New Template + + + {probQuery.data && ( + <> + 문제 수 : {probQuery.data.length} + {probQuery.data.map(({ title, id }) => ( + + {title} | {id} + + ))} + + )} + + ); +} diff --git a/src/pages/newSol.tsx b/src/pages/newSol.tsx new file mode 100644 index 0000000..70712d2 --- /dev/null +++ b/src/pages/newSol.tsx @@ -0,0 +1,81 @@ +import MainLayout from "@/lib/@components/MainLayout"; +import useSols from "@/lib/@hooks/useSols"; +import { Button, Flex, Text, Textarea } from "@chakra-ui/react"; +import { useState } from "react"; + +export default function NewSol() { + const [solutionInfo, setSolutionInfo] = useState(""); + const [solCode, setSolCode] = useState(""); + const [isValid, setIsValid] = useState(false); + const { addSolMutaiton } = useSols(); + + const checkValid = () => { + try { + const info = JSON.parse(solutionInfo); + const valid = info.probId && info.author && solCode !== ""; + setIsValid(valid); + return valid; + } catch (e) { + setIsValid(false); + return false; + } + }; + + const handleSumbit = () => { + if (checkValid()) { + const info = JSON.parse(solutionInfo); + addSolMutaiton.mutate( + { + author: info.author, + probId: info.probId, + code: solCode + }, + { + onSuccess: () => { + setSolCode(""); + setSolutionInfo(""); + } + } + ); + } + }; + + return ( + + + + 풀이 추가 + + + 풀이 데이터 +