diff --git a/.github/get_problem/main.js b/.github/get_problem/main.js index cdfd0c6..0a10d33 100644 --- a/.github/get_problem/main.js +++ b/.github/get_problem/main.js @@ -1,73 +1,57 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const { Octokit } = require('@octokit/core'); +import axios from "axios"; +import {Octokit} from "octokit"; +import * as cheerio from "cheerio"; async function getProblemUrl() { - try { - const response = await axios.get('https://solved.ac/search?query=*g5..g3+s%23100..+%21%23math+%21%23geometry+%21%23number_theory+%21%40kjhonggg+%21%40ddingmin+%21%40dydwo0740+%21%40inbloom+%21%40pon06061&sort=random&direction=asc&page=1'); + const response = await axios.get('https://solved.ac/search?query=*g3..p5+s%23200..+%21%23math+%21%23geometry+%21%23number_theory+%21%40dydwo0740+%21%40inbloom+w%3Ffalse+%25ko&sort=random&direction=asc&page=1'); const html = response.data; const $ = cheerio.load(html); + const problemId = $('#__next > div.css-1shh4uc > div:nth-child(4) > div.css-qijqp5 > table > tbody > tr:nth-child(2) > td:nth-child(1) > div > div > div > span > span > a').text(); + if (!problemId) { + throw new Error('Failed to fetch the problem URL'); + } - const elementContent = $('#__next > div > div:nth-child(4) > div.css-qijqp5 > table > tbody > tr:nth-child(2) > td:nth-child(1) > div > div > div > span > a > span').text(); - - return `https://www.acmicpc.net/problem/${elementContent}`; - } catch (error) { - throw new Error('Failed to fetch the problem URL'); - } + console.log('Got problem id: ', problemId) + return `https://www.acmicpc.net/problem/${problemId}`; } async function createGitHubIssue(url) { - try { - const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN }); + const octokit = new Octokit({auth: process.env.GITHUB_TOKEN}); const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/'); const today = new Date(); - const options = { timeZone: 'Asia/Seoul', year: 'numeric', month: '2-digit', day: '2-digit' }; + const options = {timeZone: 'Asia/Seoul', year: 'numeric', month: '2-digit', day: '2-digit'}; const dateFormatter = new Intl.DateTimeFormat('ko-KR', options); const formattedDate = dateFormatter.format(today); const issueResponse = await octokit.request('POST /repos/:owner/:repo/issues', { - owner, - repo, - title: formattedDate, - body: url, + owner, + repo, + title: formattedDate, + body: url, }); - console.log('GitHub Issue created:', issueResponse.data.html_url); - } catch (error) { - console.error('Error creating GitHub Issue:', error.message); - } } async function sendDiscordMessage(messageContent) { - try { const webhookUrl = process.env.DISCORD_ALGO; const message = { - content: messageContent, - username: '오늘의 알고리즘', + content: messageContent, + username: '오늘의 알고리즘', }; const response = await axios.post(webhookUrl, message); console.log('Discord message sent successfully:', response.data); - } catch (error) { - console.error('Error sending Discord message:', error.message); - } -} - -async function run() { - try { - const problemUrl = await getProblemUrl(); - const formattedDate = new Intl.DateTimeFormat('ko-KR', { timeZone: 'Asia/Seoul', year: 'numeric', month: '2-digit', day: '2-digit' }).format(new Date()); - - // GitHub Issue 생성 - await createGitHubIssue(problemUrl); - - // Discord 메시지 전송 - const discordMessageContent = `${formattedDate}\n${problemUrl}`; - await sendDiscordMessage(discordMessageContent); - } catch (error) { - console.error('Error:', error.message); - } } -run(); +const formattedDate = new Intl.DateTimeFormat('ko-KR', { + timeZone: 'Asia/Seoul', + year: 'numeric', + month: '2-digit', + day: '2-digit' +}).format(new Date()); + +const problemUrl = await getProblemUrl(); +console.log(problemUrl) +await createGitHubIssue(problemUrl); +await sendDiscordMessage(`${formattedDate}\n${problemUrl}`); diff --git a/.github/get_problem/package-lock.json b/.github/get_problem/package-lock.json index 319a039..fb1eb35 100644 --- a/.github/get_problem/package-lock.json +++ b/.github/get_problem/package-lock.json @@ -9,370 +9,345 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "axios": "^1.6.2", + "axios": "^1.7.2", "cheerio": "^1.0.0-rc.12", - "octokit": "^3.1.2" + "octokit": "^4.0.2" } }, "node_modules/@octokit/app": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.0.2.tgz", - "integrity": "sha512-NCSCktSx+XmjuSUVn2dLfqQ9WIYePGP95SDJs4I9cn/0ZkeXcPkaoCLl64Us3dRKL2ozC7hArwze5Eu+/qt1tg==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-15.1.0.tgz", + "integrity": "sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg==", "dependencies": { - "@octokit/auth-app": "^6.0.0", - "@octokit/auth-unauthenticated": "^5.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/types": "^12.0.0", - "@octokit/webhooks": "^12.0.4" + "@octokit/auth-app": "^7.0.0", + "@octokit/auth-unauthenticated": "^6.0.0", + "@octokit/core": "^6.1.2", + "@octokit/oauth-app": "^7.0.0", + "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/types": "^13.0.0", + "@octokit/webhooks": "^13.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/auth-app": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.0.2.tgz", - "integrity": "sha512-HYuRX3Fvhs2y9i7a4F8f+A5HWfacRWmpERHGBEOtgvKVjJkOQZKUY2v6HiSszYecHAF8Ojqngp2iraSP3SvNpQ==", - "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "deprecation": "^2.3.1", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-7.1.0.tgz", + "integrity": "sha512-cazGaJPSgeZ8NkVYeM/C5l/6IQ5vZnsI8p1aMucadCkt/bndI+q+VqwrlnWbASRmenjOkf1t1RpCKrif53U8gw==", + "dependencies": { + "@octokit/auth-oauth-app": "^8.1.0", + "@octokit/auth-oauth-user": "^5.1.0", + "@octokit/request": "^9.1.1", + "@octokit/request-error": "^6.1.1", + "@octokit/types": "^13.4.1", "lru-cache": "^10.0.0", - "universal-github-app-jwt": "^1.1.1", - "universal-user-agent": "^6.0.0" + "universal-github-app-jwt": "^2.2.0", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/auth-oauth-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.0.1.tgz", - "integrity": "sha512-RE0KK0DCjCHXHlQBoubwlLijXEKfhMhKm9gO56xYvFmP1QTMb+vvwRPmQLLx0V+5AvV9N9I3lr1WyTzwL3rMDg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-8.1.1.tgz", + "integrity": "sha512-5UtmxXAvU2wfcHIPPDWzVSAWXVJzG3NWsxb7zCFplCWEmMCArSZV0UQu5jw5goLQXbFyOr5onzEH37UJB3zQQg==", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^12.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-oauth-device": "^7.0.0", + "@octokit/auth-oauth-user": "^5.0.1", + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/auth-oauth-device": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.0.1.tgz", - "integrity": "sha512-yxU0rkL65QkjbqQedgVx3gmW7YM5fF+r5uaSj9tM/cQGVqloXcqP2xK90eTyYvl29arFVCW8Vz4H/t47mL0ELw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.1.tgz", + "integrity": "sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg==", "dependencies": { - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.0", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/oauth-methods": "^5.0.0", + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/auth-oauth-user": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.0.1.tgz", - "integrity": "sha512-N94wWW09d0hleCnrO5wt5MxekatqEJ4zf+1vSe8MKMrhZ7gAXKFOKrDEZW2INltvBWJCyDUELgGRv8gfErH1Iw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-5.1.1.tgz", + "integrity": "sha512-rRkMz0ErOppdvEfnemHJXgZ9vTPhBuC6yASeFaB7I2yLMd7QpjfrL1mnvRPlyKo+M6eeLxrKanXJ9Qte29SRsw==", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^12.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-oauth-device": "^7.0.1", + "@octokit/oauth-methods": "^5.0.0", + "@octokit/request": "^9.0.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", + "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", "engines": { "node": ">= 18" } }, "node_modules/@octokit/auth-unauthenticated": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", - "integrity": "sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-6.1.0.tgz", + "integrity": "sha512-zPSmfrUAcspZH/lOFQnVnvjQZsIvmfApQH6GzJrkIunDooU1Su2qt2FfMTSVPRp7WLTQyC20Kd55lF+mIYaohQ==", "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0" + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.2.tgz", - "integrity": "sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz", + "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.0.0", + "@octokit/request": "^9.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/endpoint": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", - "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", + "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", "dependencies": { - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz", + "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/oauth-app": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.0.0.tgz", - "integrity": "sha512-bNMkS+vJ6oz2hCyraT9ZfTpAQ8dZNqJJQVNaKjPLx4ue5RZiFdU1YWXguOPR8AaSHS+lKe+lR3abn2siGd+zow==", - "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/auth-unauthenticated": "^5.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/oauth-methods": "^4.0.0", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-7.1.3.tgz", + "integrity": "sha512-EHXbOpBkSGVVGF1W+NLMmsnSsJRkcrnVmDKt0TQYRBb6xWfWzoi9sBD4DIqZ8jGhOWO/V8t4fqFyJ4vDQDn9bg==", + "dependencies": { + "@octokit/auth-oauth-app": "^8.0.0", + "@octokit/auth-oauth-user": "^5.0.1", + "@octokit/auth-unauthenticated": "^6.0.0-beta.1", + "@octokit/core": "^6.0.0", + "@octokit/oauth-authorization-url": "^7.0.0", + "@octokit/oauth-methods": "^5.0.0", "@types/aws-lambda": "^8.10.83", - "universal-user-agent": "^6.0.0" + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/oauth-authorization-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz", + "integrity": "sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA==", "engines": { "node": ">= 18" } }, "node_modules/@octokit/oauth-methods": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.0.1.tgz", - "integrity": "sha512-1NdTGCoBHyD6J0n2WGXg9+yDLZrRNZ0moTEex/LSPr49m530WNKcCfXDghofYptr3st3eTii+EHoG5k/o+vbtw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-5.1.2.tgz", + "integrity": "sha512-C5lglRD+sBlbrhCUTxgJAFjWgJlmTx5bQ7Ch0+2uqRjYv7Cfb5xpX4WuSC9UgQna3sqRGBL9EImX9PvTpMaQ7g==", "dependencies": { - "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "btoa-lite": "^1.0.0" + "@octokit/oauth-authorization-url": "^7.0.0", + "@octokit/request": "^9.1.0", + "@octokit/request-error": "^6.1.0", + "@octokit/types": "^13.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/openapi-types": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", - "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/openapi-webhooks-types": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-8.2.1.tgz", + "integrity": "sha512-msAU1oTSm0ZmvAE0xDemuF4tVs5i0xNnNGtNmr4EuATi+1Rn8cZDetj6NXioSf5LwnxEc209COa/WOSbjuhLUA==" }, "node_modules/@octokit/plugin-paginate-graphql": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.0.tgz", - "integrity": "sha512-7HcYW5tP7/Z6AETAPU14gp5H5KmCPT3hmJrS/5tO7HIgbwenYmgw4OY9Ma54FDySuxMwD+wsJlxtuGWwuZuItA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-5.2.2.tgz", + "integrity": "sha512-7znSVvlNAOJisCqAnjN1FtEziweOHSjPGAuc5W58NeGNAr/ZB57yCsjQbXDlWsVryA7hHQaEQPcBbJYFawlkyg==", "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", - "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.0.tgz", + "integrity": "sha512-n4znWfRinnUQF6TPyxs7EctSAA3yVSP4qlJP2YgI3g9d4Ae2n5F3XDOjbUluKRxPU3rfsgpOboI4O4VtPc6Ilg==", "dependencies": { - "@octokit/types": "^12.4.0" + "@octokit/types": "^13.5.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.2.0.tgz", - "integrity": "sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.1.tgz", + "integrity": "sha512-YMWBw6Exh1ZBs5cCE0AnzYxSQDIJS00VlBqISTgNYmu5MBdeM07K/MAJjy/VkNaH5jpJmD/5HFUvIZ+LDB5jSQ==", "dependencies": { - "@octokit/types": "^12.3.0" + "@octokit/types": "^13.5.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-retry": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz", - "integrity": "sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.1.tgz", + "integrity": "sha512-G9Ue+x2odcb8E1XIPhaFBnTTIrrUDfXN05iFXiqhR+SeeeDMMILcAnysOsxUpEWcQp2e5Ft397FCXTcPkiPkLw==", "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/request-error": "^6.0.0", + "@octokit/types": "^13.0.0", "bottleneck": "^2.15.3" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-throttling": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.3.tgz", - "integrity": "sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.0.tgz", + "integrity": "sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==", "dependencies": { - "@octokit/types": "^12.2.0", + "@octokit/types": "^13.0.0", "bottleneck": "^2.15.3" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": "^5.0.0" + "@octokit/core": "^6.0.0" } }, "node_modules/@octokit/request": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.6.tgz", - "integrity": "sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.1.tgz", + "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/endpoint": "^10.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.1.tgz", + "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==", "dependencies": { - "@octokit/types": "^12.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@octokit/types": "^13.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/types": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz", - "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dependencies": { - "@octokit/openapi-types": "^19.1.0" + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@octokit/webhooks": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.0.10.tgz", - "integrity": "sha512-Q8d26l7gZ3L1SSr25NFbbP0B431sovU5r0tIqcvy8Z4PrD1LBv0cJEjvDLOieouzPSTzSzufzRIeXD7S+zAESA==", + "version": "13.2.7", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-13.2.7.tgz", + "integrity": "sha512-sPHCyi9uZuCs1gg0yF53FFocM+GsiiBEhQQV/itGzzQ8gjyv2GMJ1YvgdDY4lC0ePZeiV3juEw4GbS6w1VHhRw==", "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.0.0", - "@octokit/webhooks-types": "7.1.0", - "aggregate-error": "^3.1.0" + "@octokit/openapi-webhooks-types": "8.2.1", + "@octokit/request-error": "^6.0.1", + "@octokit/webhooks-methods": "^5.0.0", + "aggregate-error": "^5.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/webhooks-methods": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.0.0.tgz", - "integrity": "sha512-M8mwmTXp+VeolOS/kfRvsDdW+IO0qJ8kYodM/sAysk093q6ApgmBXwK1ZlUvAwXVrp/YVHp6aArj4auAxUAOFw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-5.1.0.tgz", + "integrity": "sha512-yFZa3UH11VIxYnnoOYCVoJ3q4ChuSOk2IVBBQ0O3xtKX4x9bmKb/1t+Mxixv2iUhzMdOl1qeWJqEhouXXzB3rQ==", "engines": { "node": ">= 18" } }, - "node_modules/@octokit/webhooks-types": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz", - "integrity": "sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w==" - }, "node_modules/@types/aws-lambda": { - "version": "8.10.130", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.130.tgz", - "integrity": "sha512-HxTfLeGvD1wTJqIGwcBCpNmHKenja+We1e0cuzeIDFfbEj3ixnlTInyPR/81zAe0Ss/Ip12rFK6XNeMLVucOSg==" - }, - "node_modules/@types/btoa-lite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", - "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==" - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", - "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", - "dependencies": { - "undici-types": "~5.26.4" - } + "version": "8.10.140", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.140.tgz", + "integrity": "sha512-4Dh3dk2TUcbdfHrX0Al90mNGJDvA9NBiTQPzbrjGi/dLxzKCGOYgT8YQ47jUKNFALkAJAadifq0pzyjIUlhVhg==" }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/asynckit": { @@ -381,19 +356,19 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==" }, "node_modules/boolbase": { "version": "1.0.0", @@ -405,16 +380,6 @@ "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", @@ -452,11 +417,17 @@ } }, "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==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, "engines": { - "node": ">=6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/combined-stream": { @@ -504,11 +475,6 @@ "node": ">=0.4.0" } }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -560,14 +526,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -579,10 +537,21 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -630,92 +599,20 @@ } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "engines": { - "node": ">=8" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" + "node": ">=12" }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, "node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "engines": { "node": "14 || >=16.14" } @@ -739,11 +636,6 @@ "node": ">= 0.6" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -756,33 +648,25 @@ } }, "node_modules/octokit": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.1.2.tgz", - "integrity": "sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==", - "dependencies": { - "@octokit/app": "^14.0.2", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^8.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-4.0.2.tgz", + "integrity": "sha512-wbqF4uc1YbcldtiBFfkSnquHtECEIpYD78YUXI6ri1Im5OO2NLo6ZVpRdbJpdnpZ05zMrVPssNiEo6JQtea+Qg==", + "dependencies": { + "@octokit/app": "^15.0.0", + "@octokit/core": "^6.0.0", + "@octokit/oauth-app": "^7.0.0", + "@octokit/plugin-paginate-graphql": "^5.0.0", + "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/plugin-rest-endpoint-methods": "^13.0.0", + "@octokit/plugin-retry": "^7.0.0", + "@octokit/plugin-throttling": "^9.0.0", + "@octokit/request-error": "^6.0.0", + "@octokit/types": "^13.0.0" }, "engines": { "node": ">= 18" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -811,78 +695,15 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "dependencies": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-2.2.0.tgz", + "integrity": "sha512-G5o6f95b5BggDGuUfKDApKaCgNYy2x7OdHY0zSMF081O0EJobw+1130VONhrA7ezGSV2FNOGyM+KQpQZAr9bIQ==" }, "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==" } } } diff --git a/.github/get_problem/package.json b/.github/get_problem/package.json index 6c95259..98a4ed8 100644 --- a/.github/get_problem/package.json +++ b/.github/get_problem/package.json @@ -1,17 +1,18 @@ { - "name": "automate-getting-problem", - "version": "1.0.0", - "description": "", - "main": "main.js", - "scripts": { - "start": "node main.js" - }, - "author": "", - "license": "ISC", - "dependencies": { - "axios": "^1.6.2", - "cheerio": "^1.0.0-rc.12", - "octokit": "^3.1.2" - } - } + "name": "automate-getting-problem", + "version": "1.0.0", + "description": "", + "main": "main.js", + "scripts": { + "start": "node main.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.7.2", + "cheerio": "^1.0.0-rc.12", + "octokit": "^4.0.2" + }, + "type": "module" +} \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index cbf757b..582ba45 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -8,6 +8,6 @@ ## ⌨️ 코드 -``` +``` python java c++ ``` diff --git a/.github/workflows/get_problem.yml b/.github/workflows/get_problem.yml index 0e6a1de..0d3ffc5 100644 --- a/.github/workflows/get_problem.yml +++ b/.github/workflows/get_problem.yml @@ -6,30 +6,28 @@ on: workflow_dispatch: # 수동으로 Workflow를 실행 jobs: - get_problem_and_create_issue: + create-problem-issue: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v4 + with: + sparse-checkout: | + .github/get_problem - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - - - name: Cache dependencies - uses: actions/cache@v3 - with: - path: ~/.npm - key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }} - restore-keys: ${{ runner.os }}-npm- + cache: 'npm' + cache-dependency-path: '**/package-lock.json' - name: Install Dependencies - run: npm install + run: npm ci working-directory: .github/get_problem - - name: Get problem and Create GitHub Issue + - name: Run Script run: npm start env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/update_readme.yml b/.github/workflows/update_readme.yml new file mode 100644 index 0000000..d687fe4 --- /dev/null +++ b/.github/workflows/update_readme.yml @@ -0,0 +1,27 @@ +name: Update README + +on: + schedule: + - cron: '0 21 * * *' # 한국 시간 기준, 매일 아침 6시에 실행 + workflow_dispatch: # 수동으로 Workflow를 실행 + +jobs: + update-readme: + runs-on: ubuntu-20.04 + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.10.12 # 원하는 Python 버전 설정 + + - name: Install requests + run: pip install requests + + - name: Run Python Script to Update README + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: python script/update_readme.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25aa05a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +**/*.iml \ No newline at end of file diff --git a/README.md b/README.md index f05bddb..c7bdf39 100644 --- a/README.md +++ b/README.md @@ -5,23 +5,168 @@ solve problem everyday - - - - + + + + + - - - - - - - - - - - - + + + + + + +
+ +
+ kjhonggg95 +
+ +
+ dydwo0740 +
+ +
+ qsunki +
+ +
+ ddingmin +
+ +
+ kwYoohae +
kjhonggg95dydwo0740ajsthflduddingmin
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +

+ +## :heavy_check_mark: Solved +| 문제 | 난이도 | 풀이 링크 | +| :-----: | :-----: | :-----: | +| 10429번: QUENTO | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 10710번: 실크로드 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 11607번: Grid | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 12764번: 싸지방에 간 준하 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 12834번: 주간 미팅 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 12886번: 돌 그룹 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 12908번: 텔레포트 3 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14497번: 주난의 난(難) | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14618번: 총깡 총깡 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14658번: 하늘에서 별똥별이 빗발친다 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14718번: 용감한 용사 진수 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14722번: 우유 도시 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14925번: 목장 건설하기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 15809번: 전국시대 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 16197번: 두 동전 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 16569번: 화산쇄설류 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 17299번: 오등큰수 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 17305번: 사탕 배달 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 18188번: 다오의 데이트 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 18430번: 무기 공학 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 19538번: 루머 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 19845번: 넴모넴모 2020 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 20440번: 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 20924번: 트리의 기둥과 가지 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2140번: 지뢰찾기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 23740번: 버스 노선 개편하기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 25319번: Twitch Plays VIIIbit Explorer | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 25391번: 특별상 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 25710번: 점수 계산 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2655번: 가장높은탑쌓기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 27942번: :danceplant: | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 28017번: 게임을 클리어하자 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 28291번: 레드스톤 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 28325번: 호숫가의 개미굴 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 30023번: 전구 상태 바꾸기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 30108번: 교육적인 트리 문제 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 3221번: 개미의 이동 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 4650번: Jungle Roads | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 4920번: 테트리스 게임 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 5502번: 팰린드롬 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 5546번: 파스타 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 6086번: 최대 유량 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 7983번: 내일 할거야 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 9077번: 지뢰제거 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 9489번: 사촌 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 9694번: 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 9944번: NxM 보드 완주하기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14597번: Quilting (Large) | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14945번: 불장난 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 15924번: 욱제는 사과팬이야!! | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 16167번: A Great Way | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2171번: 직사각형의 개수 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 28270번: Marked-Numbered | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 4095번: 최대 정사각형 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 5547번: 일루미네이션 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14369번: 전화번호 수수께끼 (Small) | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 1464번: 뒤집기 3 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 15551번: if 3 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 16765번: Teamwork | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 16932번: 모양 만들기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 17953번: 디저트 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 18231번: 파괴된 도시 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 20033번: Square, Not Rectangle | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2226번: 이진수 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2370번: 시장 선거 포스터 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 24463번: 미로 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 24727번: 인지융~ | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2513번: 통학버스 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 25682번: 체스판 다시 칠하기 2 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2746번: 좋은 배열 만들기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 27924번: 윤이는 엄청난 것을 훔쳐갔습니다 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 28359번: 수열의 가치 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 29618번: 미술 시간 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 31063번: Candy Cane Feast | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 10993번: 별 찍기 - 18 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 1132번: 합 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 14395번: 4연산 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 15482번: 한글 LCS | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 16169번: 수행 시간 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 16437번: 양 구출 작전 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 17208번: 카우버거 알바생 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 19639번: 배틀로얄 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 20209번: 스트레이트 스위치 게임 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 21941번: 문자열 제거 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 2313번: 보석 구매하기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 23742번: Player-based Team Distribution | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 23883번: 알고리즘 수업 - 선택 정렬 3 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 30105번: 아즈버의 이빨 자국 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 30805번: 사전 순 최대 공통 부분 수열 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 3089번: 네잎 클로버를 찾아서 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 3107번: IPv6 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 3806번: S를 T로 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 5931번: Cow Beauty Pageant | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 9011번: 순서 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | +| 9082번: 지뢰찾기 | |ddingmin kjhonggg95 qsunki dydwo0740 kwyoohae | diff --git a/ddingmin/baekjoon/10429.py b/ddingmin/baekjoon/10429.py new file mode 100644 index 0000000..49869b4 --- /dev/null +++ b/ddingmin/baekjoon/10429.py @@ -0,0 +1,61 @@ +import sys + + +def is_numeric(s): + try: + value = int(s) + return True + except ValueError: + return False + + +def solve(n, m, arr): + dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] + visit = [[0] * 3 for _ in range(3)] + answer_cmd = None + + def backtracking(i, j, cmd, total, target, depth): + nonlocal answer_cmd + if depth == 0: + if total == target: + answer_cmd = str(cmd) + return + + for k in range(4): + x, y = i + dx[k], j + dy[k] + if not (0 <= x < 3 and 0 <= y < 3) or visit[x][y] == 1: + continue + visit[x][y] = 1 + if is_numeric(arr[x][y]): + if arr[i][j] == '+': + backtracking(x, y, cmd + f"\n{x} {y}", total + int(arr[x][y]), target, depth - 1) + else: + backtracking(x, y, cmd + f"\n{x} {y}", total - int(arr[x][y]), target, depth - 1) + else: + backtracking(x, y, cmd + f"\n{x} {y}", total, target, depth) + visit[x][y] = 0 + + sx, sy = [0, 0, 1, 2, 2], [0, 2, 1, 0, 2] + for s in range(5): + xx, yy = sx[s], sy[s] + visit[xx][yy] = 1 + backtracking(xx, yy, f"{xx} {yy}", int(arr[xx][yy]), n, m - 1) + visit[xx][yy] = 0 + return answer_cmd + + +def main(): + n, m = map(int, input().split()) + arr = [list(map(str, input().strip())) for _ in range(3)] + ans = solve(n, m, arr) + if ans is not None: + print(1) + print(ans, end = "") + else: + print(0) + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/10710.py b/ddingmin/baekjoon/10710.py new file mode 100644 index 0000000..5b056a3 --- /dev/null +++ b/ddingmin/baekjoon/10710.py @@ -0,0 +1,24 @@ +import sys + + +def solve(n, m, city, arr): + dp = [[float('inf')] * (n + 1) for _ in range(m + 1)] + dp[0][0] = 0 + + for i in range(1, m + 1): # 일 + for j in range(n + 1): # 도시 + dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1] + city[j - 1] * arr[i - 1]) + + return dp[-1][-1] + + +def main(): + n, m = map(int, input().split()) + city = list(int(input()) for _ in range(n)) + arr = list(int(input()) for _ in range(m)) + print(solve(n, m, city, arr)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/11607.py b/ddingmin/baekjoon/11607.py new file mode 100644 index 0000000..ec70706 --- /dev/null +++ b/ddingmin/baekjoon/11607.py @@ -0,0 +1,36 @@ +import sys +from collections import deque + +input = sys.stdin.readline + +dx, dy = [1, -1, 0, 0], [0, 0, 1, -1] + +# input +n, m = map(int, input().split()) +arr = [list(map(int, list(input().strip()))) for _ in range(n)] + +visit = [[0] * m for _ in range(n)] + +# init +q = deque() +q.append([0, 0]) +visit[0][0] = 1 + +# bfs +while q: + i, j = q.popleft() + for k in range(4): + x, y = i + dx[k] * arr[i][j], j + dy[k] * arr[i][j] + if not(0 <= x < n and 0 <= y < m): + continue + if visit[x][y] == 0: + q.append([x, y]) + visit[x][y] = visit[i][j] + 1 + elif visit[x][y] > visit[i][j] + 1: + q.append([x, y]) + visit[x][y] = visit[i][j] + 1 +# answer check +if visit[-1][-1] == 0: + print("IMPOSSIBLE") +else: + print(visit[-1][-1] - 1) diff --git a/ddingmin/baekjoon/12764.py b/ddingmin/baekjoon/12764.py new file mode 100644 index 0000000..3aa651b --- /dev/null +++ b/ddingmin/baekjoon/12764.py @@ -0,0 +1,38 @@ +import sys +import heapq + + +def solve(n, arr): + ans = [] + hq = [] + empty = [] + + for start, end in arr: + # 이용자 정리 + while hq and hq[0][0] <= start: + t, seat = heapq.heappop(hq) + heapq.heappush(empty, seat) + + # 남아있는 자리가 없는 경우 + if len(empty) == 0: + ans.append(1) + heapq.heappush(hq, [end, len(ans) - 1]) + else: + seat = heapq.heappop(empty) + heapq.heappush(hq, [end, seat]) + ans[seat] += 1 + + return ans + + +def main(): + n = int(input()) + arr = [list(map(int, input().split())) for _ in range(n)] + ans = solve(n, sorted(arr)) + print(len(ans)) + print(*ans) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/12834.py b/ddingmin/baekjoon/12834.py new file mode 100644 index 0000000..6fccd8c --- /dev/null +++ b/ddingmin/baekjoon/12834.py @@ -0,0 +1,45 @@ +import sys +import heapq + + +def solve(n, v, e, KIST, CRFOOD, house, adj): + return dijk(KIST, adj, v, house) + dijk(CRFOOD, adj, v, house) + + +def dijk(start, adj, v, house): + visit = [float('inf')] * (v + 1) + visit[start] = 0 + hq = [[0, start]] + while hq: + cur_cost, cur_node = heapq.heappop(hq) + if cur_cost != visit[cur_node]: continue + for next_node, next_cost in adj[cur_node]: + value = cur_cost + next_cost + if value < visit[next_node]: + visit[next_node] = value + heapq.heappush(hq, [value, next_node]) + distance = 0 + for i in house: + distance += visit[i] if visit[i] != float('inf') else -1 + + return distance + + +def main(): + n, v, e = map(int, input().split()) + KIST, CRFOOD = map(int, input().split()) + house = list(map(int, input().split())) + + adj = [[] for _ in range(v + 1)] + for _ in range(e): + a, b, c = map(int, input().split()) + adj[a].append([b, c]) + adj[b].append([a, c]) + + print(solve(n, v, e, KIST, CRFOOD, house, adj)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/12886.py b/ddingmin/baekjoon/12886.py new file mode 100644 index 0000000..001a69b --- /dev/null +++ b/ddingmin/baekjoon/12886.py @@ -0,0 +1,48 @@ +import sys +from collections import deque + + +def calc(x, y): + if x < y: + return x + x, y - x + else: + return x - y, y + y + + +def get_abc(i, j, k): + result = [] + a, b = calc(i, j) + result.append([a, b, k]) + b, c = calc(j, k) + result.append([i, b, c]) + a, c = calc(i, k) + result.append([a, j, c]) + return result + + +def solve(a, b, c): + visit = {} + visit[a, b, c] = True + q = deque() + q.append([a, b, c]) + + while q: + i, j, k = q.popleft() + if i == j == k: + return 1 + for a, b, c in get_abc(i, j, k): + if (a, b, c) in visit: continue + q.append([a, b, c]) + visit[a, b, c] = True + return 0 + + +def main(): + a, b, c = map(int, input().split()) + print(solve(a, b, c)) + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/12908.py b/ddingmin/baekjoon/12908.py new file mode 100644 index 0000000..db5c990 --- /dev/null +++ b/ddingmin/baekjoon/12908.py @@ -0,0 +1,76 @@ +import sys +import heapq + + +def get_node(nodes, cur): + if cur not in nodes: + nodes[cur] = len(nodes) + 1 + return nodes[cur] + + +def calc_distance(si, sj, ei, ej): + return abs(si - ei) + abs(sj - ej) + + +def solve(adj, start, end): + # 다익스트라 돌려서 구하기 + costs = [float('inf')] * 10 + costs[start] = 0 + + hq = [] + heapq.heappush(hq, [0, start]) + + while hq: + cur_cost, cur_node = heapq.heappop(hq) + # print(f"costs[cur_node]: {costs[cur_node]}, cur_cost: {cur_cost}, cur_node: {cur_node}") + if costs[cur_node] != cur_cost: continue + for next_node, next_cost in adj[cur_node]: + if cur_cost + next_cost < costs[next_node]: + costs[next_node] = cur_cost + next_cost + heapq.heappush(hq, [costs[next_node], next_node]) + + return costs[end] + + +def main(): + sx, sy = map(int, input().split()) + ex, ey = map(int, input().split()) + teleports = [list(map(int, input().split())) for _ in range(3)] + nodes = {} + adj = [[] * 10 for _ in range(10)] + start, end = get_node(nodes, str([sx, sy])), get_node(nodes, str([ex, ey])) + for i in range(3): + tsx, tsy, tex, tey = teleports[i] + + # tp 이동시간, 직접 이동 시간 중 더 짧은 시간 + t_node_start, t_node_end = get_node(nodes, str([tsx, tsy])), get_node(nodes, str([tex, tey])) + adj[t_node_start].append([t_node_end, min(10, calc_distance(tsx, tsy, tex, tey))]) + adj[t_node_end].append([t_node_start, min(10, calc_distance(tsx, tsy, tex, tey))]) + + # 시작점 -> tps, tpe + adj[start].append([t_node_start, calc_distance(sx, sy, tsx, tsy)]) + adj[start].append([t_node_end, calc_distance(sx, sy, tex, tey)]) + + # tps -> 도착점 + adj[t_node_end].append([end, calc_distance(tex, tey, ex, ey)]) + adj[t_node_start].append([end, calc_distance(tsx, tsy, ex, ey)]) + + for j in range(3): + if i == j: continue + ttsx, ttsy, ttex, ttey = teleports[j] + tt_node_start, tt_node_end = get_node(nodes, str([ttsx, ttsy])), get_node(nodes, str([ttex, ttey])) + + adj[t_node_end].append([tt_node_start, calc_distance(tex, tey, ttsx, ttsy)]) + adj[t_node_end].append([tt_node_end, calc_distance(tex, tey, ttex, ttey)]) + adj[t_node_start].append([tt_node_start, calc_distance(tsx, tsy, ttsx, ttsy)]) + adj[t_node_start].append([tt_node_end, calc_distance(tsx, tsy, ttex, ttey)]) + + # 바로 가는 거리랑 비교 + distance = min(calc_distance(sx, sy, ex, ey), solve(adj, start, end)) + print(distance) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/14497.py b/ddingmin/baekjoon/14497.py new file mode 100644 index 0000000..024e8f7 --- /dev/null +++ b/ddingmin/baekjoon/14497.py @@ -0,0 +1,56 @@ +import sys +from collections import deque + +input = sys.stdin.readline + +dx, dy = [1, -1, 0, 0], [0, 0, 1, -1] + +# input +n, m = map(int, input().split()) +r, c, rr, cc = map(int, input().split()) +r, c, rr, cc = r - 1, c - 1, rr - 1, cc - 1 + +arr = [list(input().strip()) for _ in range(n)] + +visited = [[0] * m for _ in range(n)] + + +def jump(): + q = deque() + visit = [[0] * m for _ in range(n)] + visit[r][c] = 1 + q.append([r, c]) + + delete = [] + + while q: + i, j = q.popleft() + for k in range(4): + x, y = i + dx[k], j + dy[k] + if not (0 <= x < n and 0 <= y < m): continue + if visit[x][y]: continue + + if visited[x][y] == 1: + visit[x][y] = 1 + q.append([x, y]) + elif visited[x][y] == 0 and arr[x][y] == '0': + visited[x][y] = 1 + visit[x][y] = 1 + q.append([x, y]) + elif visited[x][y] == 0 and arr[x][y] != '0': + delete.append([x, y]) + + for x, y in delete: + visited[x][y] = 1 + arr[x][y] = '0' + + +ans = 0 +arr[r][c] = '0' +visited[r][c] = 1 + +while arr[rr][cc] == '#': + ans += 1 + jump() + +print(ans) diff --git a/ddingmin/baekjoon/14618.py b/ddingmin/baekjoon/14618.py new file mode 100644 index 0000000..0ed6394 --- /dev/null +++ b/ddingmin/baekjoon/14618.py @@ -0,0 +1,54 @@ +import sys +import heapq + + +def solve(adj, visit, a_type, b_type, start): + # dijk + visit[start] = 0 + hq = [[0, start]] + while hq: + dist, cur = heapq.heappop(hq) + if visit[cur] != dist: + continue + for next_dist, nxt in adj[cur]: + total_dist = dist + next_dist + if total_dist < visit[nxt]: + visit[nxt] = total_dist + heapq.heappush(hq, [total_dist, nxt]) + + # A형 집 부터 갱신 + answer = [None, float('inf')] + for node in a_type: + if visit[node] < answer[1]: + answer = ['A', visit[node]] + for node in b_type: + if visit[node] < answer[1]: + answer = ['B', visit[node]] + if answer[0] is None: + return [-1] + return answer + + +def main(): + input = sys.stdin.readline + n, m = map(int, input().split()) # node, edge + adj = [[] for _ in range(n + 1)] + visit = [float('inf')] * (n + 1) + + home_node = int(input()) + k = int(input()) # 종류 별 동물의 수 + a_type = list(map(int, input().split())) + b_type = list(map(int, input().split())) + + for _ in range(m): + a, b, dist = map(int, input().split()) + adj[a].append([dist, b]) + adj[b].append([dist, a]) + + ans = solve(adj, visit, a_type, b_type, home_node) + for pp in ans: + print(pp) + + +if __name__ == '__main__': + main() diff --git a/ddingmin/baekjoon/14658.kt b/ddingmin/baekjoon/14658.kt new file mode 100644 index 0000000..d39525f --- /dev/null +++ b/ddingmin/baekjoon/14658.kt @@ -0,0 +1,40 @@ +import java.io.BufferedWriter +import java.io.OutputStreamWriter + +fun main() = with(System.`in`.bufferedReader()) { + val sout = BufferedWriter(OutputStreamWriter(System.out)) + + var line = readLine().split(" ").map { it.toInt() } + var l = line[2] + var k = line[3] + + var arr = Array(k) { + readLine().split(" ").map { it.toInt() } + } + + sout.appendLine(solve(l, k, arr)) + sout.close() +} + +fun solve(l: Int, k: Int, arr: Array>): String { + var count = 0 + + for (star1 in arr) { + for (star2 in arr) { + var sx = minOf(star1[0], star2[0]) + var sy = minOf(star1[1], star2[1]) + var cnt = 0 + + for (star in arr) { + if (sx <= star[0] && star[0] <= sx + l && + sy <= star[1] && star[1] <= sy + l + ) { + cnt += 1 + } + } + count = maxOf(count, cnt) + } + } + + return (k - count).toString() +} diff --git a/ddingmin/baekjoon/14658.py b/ddingmin/baekjoon/14658.py new file mode 100644 index 0000000..6a2aaaa --- /dev/null +++ b/ddingmin/baekjoon/14658.py @@ -0,0 +1,33 @@ +import sys + + +def solve(n, m, l, k, arr): + answer = 0 + for i in range(k): + for j in range(k): + cnt = 0 + + # 두 별을 걸치는 가장 왼쪽 상단 좌표 + sx, sy = min(arr[i][0], arr[j][0]), min(arr[i][1], arr[j][1]) + + for x, y in arr: + # 구한 좌표의 최대 범위 별 개수 구하기 + if sx <= x <= sx + l and sy <= y <= sy + l: + cnt += 1 + answer = max(answer, cnt) + + return k - answer + + +def main(): + n, m, l, k = map(int, input().split()) + arr = [] + for _ in range(k): + arr.append(list(map(int, input().split()))) + print(solve(n, m, l, k, arr)) + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/14718.py b/ddingmin/baekjoon/14718.py new file mode 100644 index 0000000..9a1f0e4 --- /dev/null +++ b/ddingmin/baekjoon/14718.py @@ -0,0 +1,29 @@ +import sys + + +def solve(n, need_count, arr): + ans = float('inf') + + for i in range(n): + for j in range(n): + for k in range(n): + can_win_count = 0 + for idx in range(n): + if arr[i][0] >= arr[idx][0] and arr[j][1] >= arr[idx][1] and arr[k][2] >= arr[idx][2]: + can_win_count += 1 + if can_win_count >= need_count: + ans = min(ans, arr[i][0] + arr[j][1] + arr[k][2]) + + return ans + + +def main(): + n, k = map(int, input().split()) + arr = [list(map(int, input().split())) for _ in range(n)] + print(solve(n, k, sorted(arr))) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/14722.py b/ddingmin/baekjoon/14722.py new file mode 100644 index 0000000..dc11d7f --- /dev/null +++ b/ddingmin/baekjoon/14722.py @@ -0,0 +1,26 @@ +import sys + + +def solve(n, arr): + dp = [[0] * n for _ in range(n)] + + for i in range(n): + for j in range(n): + mDp = max(dp[i - 1][j], dp[i][j - 1]) + if arr[i][j] == mDp % 3: + dp[i][j] = mDp + 1 + else: + dp[i][j] = mDp + + return dp[-1][-1] + + +def main(): + n = int(input()) + arr = [list(map(int, input().split())) for _ in range(n)] + print(solve(n, arr)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/14925.kt b/ddingmin/baekjoon/14925.kt new file mode 100644 index 0000000..da0e1bb --- /dev/null +++ b/ddingmin/baekjoon/14925.kt @@ -0,0 +1,31 @@ +import java.io.BufferedWriter +import java.io.OutputStreamWriter + +fun main() = with(System.`in`.bufferedReader()) { + val sout = BufferedWriter(OutputStreamWriter(System.out)) + + var nm = readLine().split(" ").map { it.toInt() } + + var arr = Array(nm[0]) { + readLine().split(" ").map { it.toInt() } + } + + sout.appendLine(solve(nm, arr)) + sout.close() +} + +fun solve(nm: List, arr: Array>): String { + var ans = 0 + var dp = Array(nm[0] + 1) { + IntArray(nm[1] + 1) + } + + for (i in 1..nm[0]) { + for (j in 1..nm[1]) { + if (arr[i - 1][j - 1] == 0) dp[i][j] = minOf(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1 + ans = maxOf(ans, dp[i][j]) + } + } + + return ans.toString() +} diff --git a/ddingmin/baekjoon/14925.py b/ddingmin/baekjoon/14925.py new file mode 100644 index 0000000..d372112 --- /dev/null +++ b/ddingmin/baekjoon/14925.py @@ -0,0 +1,25 @@ +import sys + + +def solve(n, m, arr): + dp = [[0] * m for _ in range(n)] + ans = 0 + + for i in range(n): + for j in range(m): + if arr[i][j] == 0: + dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1 + ans = max(ans, dp[i][j]) + + return ans + + +def main(): + n, m = map(int, input().split()) + arr = [list(map(int, input().split())) for _ in range(n)] + print(solve(n, m, arr)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/15809.py b/ddingmin/baekjoon/15809.py new file mode 100644 index 0000000..e8736f9 --- /dev/null +++ b/ddingmin/baekjoon/15809.py @@ -0,0 +1,67 @@ +import sys + + +def find(parents, cur): + if parents[cur] == -1: + return -1 + if parents[cur] == cur: + return cur + parents[cur] = find(parents, parents[cur]) + return parents[cur] + + +def union(parents, nodes, a, b): + ap = find(parents, a) + bp = find(parents, b) + parents[bp] = ap + nodes[ap] += nodes[bp] + nodes[bp] = 0 + + +def fight(parents, nodes, a, b): + ap = find(parents, a) + bp = find(parents, b) + if nodes[ap] < nodes[bp]: + ap, bp = bp, ap + elif nodes[ap] == nodes[bp]: + parents[ap], parents[bp] = -1, -1 + parents[bp] = ap + nodes[ap] -= nodes[bp] + nodes[bp] = 0 + + +def solve(n, m, nodes, parents, cmds): + for cmd, p, q in cmds: + p, q = p - 1, q - 1 + if cmd == 1: + union(parents, nodes, p, q) + else: + fight(parents, nodes, p, q) + visit = [0] * n + answer = [] + for node in range(n): + p = find(parents, node) + if p == -1 or visit[p]: continue + visit[p] = 1 + answer.append(nodes[p]) + + ans = str(len(answer)) + "\n" + ans += " ".join(map(str, sorted(answer))) + return ans + + +def main(): + n, m = map(int, input().split()) + nodes = [] + parents = [] + for i in range(n): + nodes.append(int(input())) + parents.append(i) + cmds = [list(map(int, input().split())) for _ in range(m)] + print(solve(n, m, nodes, parents, cmds)) + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/16197.py b/ddingmin/baekjoon/16197.py new file mode 100644 index 0000000..e724358 --- /dev/null +++ b/ddingmin/baekjoon/16197.py @@ -0,0 +1,61 @@ +import sys +from collections import deque + + +def move(arr, n, m, i, j, x, y): + if not (0 <= x < n and 0 <= y < m): + return x, y + if arr[x][y] == '#': + return i, j + return x, y + + +def solve(n, m, arr, coins): + dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] + q = deque() + q.append(coins) + visit = {} + visit[str(coins)] = 1 + + depth = 1 + + while q: + if depth > 10: + return -1 + for _ in range(len(q)): + coin = q.popleft() + i1, j1 = coin[0] + i2, j2 = coin[1] + for k in range(4): + x1, y1 = move(arr, n, m, i1, j1, i1 + dx[k], j1 + dy[k]) + x2, y2 = move(arr, n, m, i2, j2, i2 + dx[k], j2 + dy[k]) + nxt = [[x1, y1], [x2, y2]] + if str(nxt) in visit: continue + if not (0 <= x1 < n and 0 <= y1 < m) and not (0 <= x2 < n and 0 <= y2 < m): + continue + + if (0 <= x1 < n and 0 <= y1 < m) and (0 <= x2 < n and 0 <= y2 < m): + visit[str(nxt)] = 1 + q.append(nxt) + else: + return depth + depth += 1 + return -1 + + +def main(): + n, m = map(int, input().split()) + arr = [list(map(str, input().strip())) for _ in range(n)] + coins = [] + for i in range(n): + for j in range(m): + if arr[i][j] == 'o': + coins.append([i, j]) + + print(solve(n, m, arr, coins)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/16569.py b/ddingmin/baekjoon/16569.py new file mode 100644 index 0000000..c3db8f7 --- /dev/null +++ b/ddingmin/baekjoon/16569.py @@ -0,0 +1,88 @@ +import sys +import heapq +from collections import deque + +dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] + + +def flow_fire(fire_q, fire, n, m): + # 화산이 흐른다. + for idx in range(len(fire_q)): + i, j = fire_q[idx] + for k in range(4): + x, y = i + dx[k], j + dy[k] + if not (0 <= x < n and 0 <= y < m): continue + if not fire[x][y]: + fire[x][y] = 1 + fire_q.append([x, y]) + + +def hole_start(hole, now, q, fire): + # 시간이 다 된 화산 분출구를 q에 넣는다. + while hole and hole[0][0] < now: + t, x, y = heapq.heappop(hole) + q.append([x, y]) + fire[x][y] = 1 + + + +def solve(n, m, v, sx, sy, highs, fire, hole, visit): + ans = (highs[sx][sy], 0) + visit[sx][sy] = 1 + now = 0 + fire_q = deque() + people_q = deque() + people_q.append([sx, sy]) + hole_start(hole, now, fire_q, fire) + while people_q: + now += 1 + hole_start(hole, now, fire_q, fire) + flow_fire(fire_q, fire, n, m) + + # print(f"{now}시간의 화산 상황") + # for pp in fire: + # print(*pp) + # print() + # + # print(f"{now}시간의 이동 상황") + # for pp in visit: + # print(*pp) + # print() + # + # print(f"정답: {ans}") + # print(f"이동 큐: {people_q}") + + for _ in range(len(people_q)): + cx, cy = people_q.popleft() + for k in range(4): + nx, ny = cx + dx[k], cy + dy[k] + if not (0 <= nx < n and 0 <= ny < m): continue + if fire[nx][ny] or visit[nx][ny]: continue + visit[nx][ny] = now + people_q.append([nx, ny]) + # 정답 갱신 + if ans[0] < highs[nx][ny]: + ans = (highs[nx][ny], now) + + return ans + + +def main(): + n, m, v = map(int, input().split()) + sx, sy = map(int, input().split()) + highs = [list(map(int, input().split())) for _ in range(n)] + visit = [[0] * m for _ in range(n)] + fire = [[0] * m for _ in range(n)] # 이동할 수 없는 지역 + hole = [] + for _ in range(v): + x, y, t = map(int, input().split()) + y, x = y - 1, x - 1 + visit[x][y] = 1 + heapq.heappush(hole, [t, x, y]) + print(*solve(n, m, v, sx - 1, sy - 1, highs, fire, hole, visit)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/17299.py b/ddingmin/baekjoon/17299.py new file mode 100644 index 0000000..4019663 --- /dev/null +++ b/ddingmin/baekjoon/17299.py @@ -0,0 +1,59 @@ +import sys + +MAX_VALUE = 1_000_000 + + +def solve(n, arr): + # 갯수 배열로 변환 + cnt = {} + + for i in arr: + if i not in cnt: + cnt[i] = 0 + cnt[i] += 1 + + cnt_arr = [] + for i in range(n): + cnt_arr.append([cnt[arr[i]], i]) + + ans = [0] * n + + stack = [] + + # 뒤에서부터 스택으로 해결 + for new, idx in cnt_arr[::-1]: + # 새로 들어오는 값이 더 큰 경우 + if stack and stack[-1][0] < new: + # 값이 더 큰 값이 없을 때 까지 pop + while stack and stack[-1][0] < new: + stack.pop() + + # 스택이 없는 경우는 그냥 집어넣고 ans = -1 + if not stack: + ans[idx] = -1 + stack.append([new, idx]) + # 스택의 가장 상단값보다 새로 들어오는 값이 작은 경우 ans는 최상단의 실제 값 + elif stack and stack[-1][0] > new: + prev, prev_idx = stack[-1] + ans[idx] = arr[prev_idx] + stack.append([new, idx]) + # 스택의 가장 상단값과 새로 들어오는 값이 같은 경우 ans는 최상단의 정답 값 + elif stack and stack[-1][0] == new: + prev, prev_idx = stack[-1] + ans[idx] = ans[prev_idx] + stack.append([new, idx]) + + print(*ans) + return 0 + + +def main(): + n = int(input()) + arr = list(map(int, input().split())) + solve(n, arr) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/17305.py b/ddingmin/baekjoon/17305.py new file mode 100644 index 0000000..b4087fd --- /dev/null +++ b/ddingmin/baekjoon/17305.py @@ -0,0 +1,39 @@ +import sys + + +def solve(n, m, three, five): + pSumThree = [0] + pSumFive = [0] + + for w, num in three: + pSumThree.append(pSumThree[-1] + num) + for w, num in five: + pSumFive.append(pSumFive[-1] + num) + + ans = 0 + + for cnt in range(len(pSumThree)): + if cnt * 3 > m: break + availableFiveCount = min((m - cnt * 3) // 5, len(pSumFive) - 1) + ans = max(ans, pSumThree[cnt] + pSumFive[availableFiveCount]) + + return ans + + +def main(): + n, m = map(int, input().split()) + three, five = [], [] + for _ in range(n): + a, b = map(int, input().split()) + if a == 3: + three.append([a, b]) + else: + five.append([a, b]) + + print(solve(n, m, sorted(three, reverse=True), sorted(five, reverse=True))) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/18188.py b/ddingmin/baekjoon/18188.py new file mode 100644 index 0000000..b7c0e42 --- /dev/null +++ b/ddingmin/baekjoon/18188.py @@ -0,0 +1,55 @@ +import sys +from collections import deque + + +def main(): + input = sys.stdin.readline + + dir = {'W': [-1, 0], 'S': [1, 0], 'A': [0, -1], 'D': [0, 1]} + + h, w = map(int, input().split()) + arr = [list(input().strip()) for _ in range(h)] + + # 다오 제거 + for i in range(h): + for j in range(w): + if arr[i][j] == 'D': + arr[i][j] = '.' + sx, sy = i, j + + n = int(input()) + + move = [list(map(str, input().split())) for _ in range(n)] + + def solve(sx, sy): + q = deque() + q.append([sx, sy, ""]) + visit = [[0] * w for _ in range(h)] + visit[sx][sy] = 1 + + while q: + i, j, cmd = q.popleft() + if arr[i][j] == 'Z': + return ['YES', cmd] + if not (visit[i][j] - 1 < len(move)): + continue + k1, k2 = move[visit[i][j] - 1] + + x, y = i + dir[k1][0], j + dir[k1][1] + if (0 <= x < h and 0 <= y < w) and arr[x][y] != '@': + visit[x][y] = visit[i][j] + 1 + q.append([x, y, cmd + k1]) + + x, y = i + dir[k2][0], j + dir[k2][1] + if (0 <= x < h and 0 <= y < w) and arr[x][y] != '@': + visit[x][y] = visit[i][j] + 1 + q.append([x, y, cmd + k2]) + return ['NO'] + + ans = solve(sx, sy) + for pp in ans: + print(pp) + + +if __name__ == '__main__': + main() diff --git a/ddingmin/baekjoon/18430.py b/ddingmin/baekjoon/18430.py new file mode 100644 index 0000000..c46d760 --- /dev/null +++ b/ddingmin/baekjoon/18430.py @@ -0,0 +1,43 @@ +import sys + +dir = [[-1, -1], [-1, 1], [1, -1], [1, 1]] + + +def solve(n, m, arr): + visit = [[0] * m for _ in range(n)] + visited = {} + + def bt(power): + next_power = power + for i in range(n): + for j in range(m): + if visit[i][j]: continue + for dx, dy in dir: + x1, y1 = i + dx, j + x2, y2 = i, j + dy + if not (0 <= x1 < n and 0 <= y1 < m and 0 <= x2 < n and 0 <= y2 < m): + continue + if visit[x1][y1] or visit[x2][y2]: continue + visit[x1][y1], visit[x2][y2], visit[i][j] = 1, 1, 2 + if str(visit) in visited: + visit[x1][y1], visit[x2][y2], visit[i][j] = 0, 0, 0 + continue + visited[str(visit)] = 1 + cur_power = arr[x1][y1] + arr[x2][y2] + arr[i][j] * 2 + next_power = max(next_power, bt(power + cur_power)) + visit[x1][y1], visit[x2][y2], visit[i][j] = 0, 0, 0 + return next_power + + return bt(0) + + +def main(): + n, m = map(int, input().split()) + arr = [list(map(int, input().split())) for _ in range(n)] + print(solve(n, m, arr)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/19538.kt b/ddingmin/baekjoon/19538.kt new file mode 100644 index 0000000..57a8262 --- /dev/null +++ b/ddingmin/baekjoon/19538.kt @@ -0,0 +1,62 @@ +import java.io.BufferedWriter +import java.io.OutputStreamWriter + +fun main() = with(System.`in`.bufferedReader()) { + val sout = BufferedWriter(OutputStreamWriter(System.out)) + var n = readLine().toInt() + var adj = Array(n) { + ArrayList() + } + repeat(n) { + readLine().split(" ").map { num -> + if (num.toInt() > 0) adj[it].add(num.toInt() - 1) + } + } + var m = readLine().toInt() + var start = readLine().split(" ").map { it.toInt() - 1 } + sout.appendLine(solve(n, adj, start)) + sout.close() +} + +fun solve(n: Int, adj: Array>, start: List): String { + var answer = IntArray(n) { -1 } + var count = IntArray(n) + var visit = BooleanArray(n) + + start.map { + answer[it] = 0 + visit[it] = true + adj[it].map { nxt -> + count[nxt] += 1 + } + } + + var dq = ArrayDeque(start) + + var time = 1 + while (dq.isNotEmpty()) { + var temp = ArrayList() + for (i in 1..dq.size) { + var cur = dq.removeFirst() + + for (nxt in adj[cur]) { + if (visit[nxt]) continue + if (count[nxt] * 2 >= adj[nxt].size) { + visit[nxt] = true + dq.add(nxt) + answer[nxt] = time + temp.add(nxt) + } + } + + } + temp.map { + adj[it].map { nxt -> + count[nxt] += 1 + } + } + time += 1 + } + + return answer.joinToString(" ") +} diff --git a/ddingmin/baekjoon/19845.py b/ddingmin/baekjoon/19845.py new file mode 100644 index 0000000..7395f84 --- /dev/null +++ b/ddingmin/baekjoon/19845.py @@ -0,0 +1,23 @@ +import sys + +input = sys.stdin.readline + +n, q = map(int, input().split()) +arr = list(map(int, input().split())) + + +def find_x(arr, value): + left, right = 0, len(arr) + while left + 1 < right: + mid = (left + right) // 2 + if arr[mid] < value: + right = mid + else: + left = mid + return right + + +for _ in range(q): + x, y = map(int, input().split()) + answer = max(0, arr[y - 1] - x + 1) + max(0, find_x(arr, x) - y) + print(answer) diff --git a/ddingmin/baekjoon/20440.py b/ddingmin/baekjoon/20440.py new file mode 100644 index 0000000..6237de6 --- /dev/null +++ b/ddingmin/baekjoon/20440.py @@ -0,0 +1,44 @@ +import sys + + +def solve(n, cmds): + dic = {} + + for s, e in cmds: + if s not in dic: + dic[s] = 0 + if e not in dic: + dic[e] = 0 + dic[s] += 1 + dic[e] -= 1 + + ans = 0 + ans_range = [0, 0] + prev = 0 + need_range = False + + for k in sorted(dic.keys()): + prev += dic[k] + if prev > ans: + ans = prev + ans_range[0] = k + need_range = True + elif need_range and dic[k] < 0: + need_range = False + ans_range[1] = k + + print(ans) + print(*ans_range) + return ans + + +def main(): + n = int(input()) + arr = [list(map(int, input().split())) for _ in range(n)] + solve(n, arr) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/20924.py b/ddingmin/baekjoon/20924.py new file mode 100644 index 0000000..8d68c55 --- /dev/null +++ b/ddingmin/baekjoon/20924.py @@ -0,0 +1,48 @@ +import sys +from collections import deque + + +def main(): + input = sys.stdin.readline + n, root = map(int, input().split()) + + # init + answer = [None, 0] + adj = [[] for _ in range(n + 1)] + visit = [0] * (n + 1) + q = deque() + + for _ in range(n - 1): + a, b, dist = map(int, input().split()) + adj[a].append([dist, b]) + adj[b].append([dist, a]) + + q.append([0, root]) + visit[root] = 1 + + while q: + cur_dist, cur = q.popleft() + + # root -> leaf 최대 거리 갱신 + answer[1] = max(answer[1], cur_dist) + + # 기가노드를 판단하기 위해 count + count = 0 + for next_dist, next in adj[cur]: + if visit[next]: + continue + q.append([cur_dist + next_dist, next]) + visit[next] = 1 + count += 1 + if count > 1 and answer[0] == None: # 기가 노드를 식별 X 상태, 현재 가지로부터 2갈래로 퍼져나가는 경우 + # root -> 기가노드 거리 측정 + answer[0] = cur_dist + + # 기가 노드가 없는 경우 예외 처리 + if answer[0] == None: + answer[0] = answer[1] + print(answer[0], answer[1] - answer[0]) + + +if __name__ == '__main__': + main() diff --git a/ddingmin/baekjoon/2140.py b/ddingmin/baekjoon/2140.py new file mode 100644 index 0000000..d0ade58 --- /dev/null +++ b/ddingmin/baekjoon/2140.py @@ -0,0 +1,70 @@ +import sys +import heapq + +dx, dy = [-1, -1, -1, 0, 0, 1, 1, 1], [-1, 0, 1, -1, 1, -1, 0, 1] + + +def solve(n, arr): + if n < 3: + return 0 + elif n == 3 and int(arr[0][0]) == 1: + return 1 + + ans = 0 + + for i in range(1, n - 2): + cnt = 0 + if arr[1][i - 1] == '*': cnt += 1 + if arr[1][i] == '*': cnt += 1 + + if int(arr[0][i - 1]) > cnt: + ans += 1 + arr[1][i] = '*' + arr[0][i + 1] = int(arr[0][i + 1]) - 1 + + for i in range(1, n - 2): + cnt = 0 + if arr[i - 1][n - 2] == '*': cnt += 1 + if arr[i][n - 2] == '*': cnt += 1 + + if int(arr[i - 1][n - 1]) > cnt: + ans += 1 + arr[i][n - 2] = '*' + arr[i + 1][n - 1] = int(arr[i + 1][n - 1]) - 1 + + for i in range(n - 2, 1, -1): + cnt = 0 + if arr[n - 2][i + 1] == '*': cnt += 1 + if arr[n - 2][i] == '*': cnt += 1 + + if int(arr[n - 1][i + 1]) > cnt: + ans += 1 + arr[n - 2][i] = '*' + arr[n - 1][i - 1] = int(arr[n - 1][i - 1]) - 1 + + for i in range(n - 2, 1, -1): + cnt = 0 + if arr[i + 1][1] == '*': cnt += 1 + if arr[i][1] == '*': cnt += 1 + + if int(arr[i + 1][0]) > cnt: + ans += 1 + arr[i][1] = '*' + arr[i - 1][0] = int(arr[i - 1][0]) - 1 + + if n > 4: + ans += (n - 4) ** 2 + + return ans + + +def main(): + n = int(input()) + arr = [list(input().strip()) for _ in range(n)] + print(solve(n, arr)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/23740.py b/ddingmin/baekjoon/23740.py new file mode 100644 index 0000000..034d281 --- /dev/null +++ b/ddingmin/baekjoon/23740.py @@ -0,0 +1,32 @@ +import sys + + +def solve(n, cmds): + answer = [] + + # 초기 데이터 세팅 + start, end, cost = cmds[0] + + for s, e, c in cmds[1:]: + if s <= end: # 구간 연결 + end = max(end, e) + cost = min(cost, c) + else: # 경로 추가 + answer.append([start, end, cost]) + start, end, cost = s, e, c + # 마지막 경로 추가 + answer.append([start, end, cost]) + print(len(answer)) + for pp in answer: + print(*pp) + + +def main(): + n = int(input()) + arr = [list(map(int, input().split())) for _ in range(n)] + solve(n, sorted(arr)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/25319.py b/ddingmin/baekjoon/25319.py new file mode 100644 index 0000000..671a4e9 --- /dev/null +++ b/ddingmin/baekjoon/25319.py @@ -0,0 +1,89 @@ +import sys + +sys.setrecursionlimit(10 ** 5) +input = sys.stdin.readline + +# input +n, m, r = map(int, input().split()) +alphabets = {} +arr = [list(input().strip()) for _ in range(n)] + +# 이동하기 위해 알파벳을 키로 갖는 좌표들을 저장한다. +for i in range(n): + for j in range(m): + if arr[i][j] not in alphabets: + alphabets[arr[i][j]] = [[i, j]] + else: + alphabets[arr[i][j]].append([i, j]) + +target_id = input().strip() + +# 목표 id에 대한 갯수를 저장한다. +target_id_count = {} + +for i in target_id: + if i not in target_id_count: + target_id_count[i] = 1 + else: + target_id_count[i] += 1 + + +# func +def calculate_can_levelUp(): + # 레벨업 할 수 있는 최대치를 계산한다. + result = float('inf') + + for k in target_id_count: + if k not in alphabets: + return 0 + else: + result = min(len(alphabets[k]) // target_id_count[k], result) + return result + + +def get_cmd(i, j, x, y): + result = "" + if i > x: + result += "U" * (i - x) + else: + result += "D" * (x - i) + + if j > y: + result += "L" * (j - y) + else: + result += "R" * (y - j) + return result + "P" + + +def backtracking(i, j, need_idx, words): + global ans + # 갱신되는 경우 + if need_idx and need_idx % len(target_id) == 0: + ans = [need_idx // len(target_id), words + get_cmd(i, j, n - 1, m - 1)[:-1]] # 도착 지점까지 이동할 경우 P 명령어는 제거 + + if ans[0] == can_levelUp: # 최대 레벨업에 도달하면 출력 후 종료 + print(ans[0], len(ans[1])) + print(ans[1]) + exit() + + # 목표한 다음 위치의 좌표로 이동 + for x, y in alphabets[target_id[need_idx % len(target_id)]]: + if ate[x][y]: + continue + ate[x][y] = 1 + backtracking(x, y, need_idx + 1, words + get_cmd(i, j, x, y)) # 이동 지점까지 명령어를 더 붙여준다. + ate[x][y] = 0 + + +# solve +can_levelUp = calculate_can_levelUp() +ans = [0, ""] + +if can_levelUp: + ate = [[0] * m for _ in range(n)] + backtracking(0, 0, 0, "") +else: # 레벨업 할 수 없는 경우 + ans = [0, get_cmd(0, 0, n - 1, m - 1)[:-1]] # 시작 지점 부터 오른쪽 가장 하단까지 이동 + +print(ans[0], len(ans[1])) +print(ans[1]) diff --git a/ddingmin/baekjoon/25391.py b/ddingmin/baekjoon/25391.py new file mode 100644 index 0000000..b985465 --- /dev/null +++ b/ddingmin/baekjoon/25391.py @@ -0,0 +1,40 @@ +import sys + + +def solve(n, m, k, arr): + answer = 0 + + arr.sort(key=lambda x: [-x[1], -x[0]]) + new_arr = [] + + for i in range(k): + a, b = arr[i] + answer += a + + for i in range(k, n): + a, b = arr[i] + new_arr.append([a, b]) + + new_arr.sort(key=lambda x: [-x[0], -x[1]]) + + for i in range(m): + a, b = new_arr[i] + answer += a + + return answer + + +def main(): + input = sys.stdin.readline + n, m, k = map(int, input().split()) + arr = [] + + for idx in range(n): + a, b = map(int, input().split()) + arr.append([a, b]) + + print(solve(n, m, k, arr)) + + +if __name__ == '__main__': + main() diff --git a/ddingmin/baekjoon/25710.py b/ddingmin/baekjoon/25710.py new file mode 100644 index 0000000..c3ef00a --- /dev/null +++ b/ddingmin/baekjoon/25710.py @@ -0,0 +1,38 @@ +import sys + +input = sys.stdin.readline + +n = int(input()) +arr = list(map(int, input().split())) + + +def get_dict_numbers(arr): + result = {} + for num in arr: + if num not in result: + result[num] = 0 + result[num] += 1 + return result + + +def get_scores(num1, num2): + result = 0 + for num in str(num1 * num2): + result += int(num) + return result + + +def solve(n, arr): + answer = 0 + + num_counter = get_dict_numbers(arr) + for num1 in num_counter.keys(): + for num2 in num_counter.keys(): + # 두 수가 같은 경우 2번 이상 나오지 않는 경우의 예외 처리한다. + if num1 == num2 and num_counter[num1] == 1: + continue + answer = max(answer, get_scores(num1, num2)) + return answer + + +print(solve(n, arr)) diff --git a/ddingmin/baekjoon/2655.py b/ddingmin/baekjoon/2655.py new file mode 100644 index 0000000..02e0a93 --- /dev/null +++ b/ddingmin/baekjoon/2655.py @@ -0,0 +1,43 @@ +import sys + + +def solve(n, arr): + # 넓이, 무게, 번호, 높이 + lis = [0] * n + ans = [0] * n + top = [0] * n + + for i in range(n): + lis[i] = 1 + ans[i] = [arr[i][2]] + top[i] = arr[i][3] + for j in range(i): + if arr[j][1] > arr[i][1]: + if top[i] < top[j] + arr[i][3]: + top[i] = top[j] + arr[i][3] + lis[i] = lis[j] + 1 + ans[i] = ans[j] + [arr[i][2]] + + answer = [0, 0, []] + for i in range(n): + if answer[0] < top[i]: + answer = [top[i], lis[i], ans[i]] + + print(answer[1]) + for pp in answer[2][::-1]: + print(pp) + return 0 + + +def main(): + n = int(input()) + arr = [] + for idx in range(1, n + 1): + a, b, c = map(int, input().split()) + arr.append([a, c, idx, b]) + solve(n, sorted(arr, key=lambda x: [-x[0], x[1]])) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/27942.py b/ddingmin/baekjoon/27942.py new file mode 100644 index 0000000..b13731f --- /dev/null +++ b/ddingmin/baekjoon/27942.py @@ -0,0 +1,79 @@ +import sys +from collections import deque + +dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] + + +def grow(arr, k, sx, sy): + if k == 0: + sx[0] -= 1 + for k in range(sy[0], sy[1] + 1): + arr[sx[0]][k] = 0 + return 'U' + elif k == 1: + sx[1] += 1 + for k in range(sy[0], sy[1] + 1): + arr[sx[1]][k] = 0 + return 'D' + elif k == 2: + sy[0] -= 1 + for k in range(sx[0], sx[1] + 1): + arr[k][sy[0]] = 0 + return 'L' + else: + sy[1] += 1 + for k in range(sx[0], sx[1] + 1): + arr[k][sy[1]] = 0 + return 'R' + + +def get_start_ij(k, sx, sy): + if k == 0: + return sx[0], sy[0], sx[0] + 1, sy[1] + 1 + elif k == 1: + return sx[1], sy[0], sx[1] + 1, sy[1] + 1 + elif k == 2: + return sx[0], sy[0], sx[1] + 1, sy[0] + 1 + else: + return sx[0], sy[1], sx[1] + 1, sy[1] + 1 + + +def solve(n, arr): + sx, sy = [n // 2 - 1, n // 2], [n // 2 - 1, n // 2] + cmd = "" + energy = 0 + + while 1: + eat = [0, 0, 0, 0] + for k in range(4): + si, sj, ei, ej = get_start_ij(k, sx, sy) + for i in range(si, ei): + for j in range(sj, ej): + x, y = i + dx[k], j + dy[k] + if not (0 <= x < n and 0 <= y < n): + continue + eat[k] += arr[x][y] + + target = [-1, None] + for k in range(4): + if eat[k] > 0 and target[0] < eat[k]: + target = [eat[k], k] + + if target[1] is None: + print(energy) + return cmd + + energy += target[0] + cmd += grow(arr, target[1], sx, sy) + + +def main(): + n = int(input()) + arr = [list(map(int, input().split())) for _ in range(n)] + print(solve(n, arr)) + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/28017.py b/ddingmin/baekjoon/28017.py new file mode 100644 index 0000000..6a5aba2 --- /dev/null +++ b/ddingmin/baekjoon/28017.py @@ -0,0 +1,29 @@ +import sys + + +def solve(n, m, arr): + dp = [[float('inf')] * m for _ in range(n)] + + # 초기값 세팅 + for j in range(m): + dp[0][j] = arr[0][j] + + # 점화식: min(이전값들 중 최소 + 현재 무기) [같은 무기는 제외] + for i in range(1, n): + for j in range(m): + for k in range(m): + if j == k: continue + dp[i][j] = min(dp[i][j], dp[i - 1][k] + arr[i][j]) + + return min(dp[-1]) + + +def main(): + n, m = map(int, input().split()) + arr = [list(map(int, input().split())) for _ in range(n)] + print(solve(n, m, arr)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/28291.py b/ddingmin/baekjoon/28291.py new file mode 100644 index 0000000..4595fc1 --- /dev/null +++ b/ddingmin/baekjoon/28291.py @@ -0,0 +1,54 @@ +import sys +from collections import deque + + +def solve(n, m, arr, power, lamps): + dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] + q = deque(lamps) + while q: + i, j = q.popleft() + for k in range(4): + x, y = i + dx[k], j + dy[k] + if not (0 <= x < n and 0 <= y < m): continue + if arr[x][y] == 1 and power[i][j] - 1 > power[x][y]: + power[x][y] = power[i][j] - 1 + q.append([x, y]) + + for i in range(n): + for j in range(m): + if arr[i][j] == 3: + flag = False + for k in range(4): + x, y = i + dx[k], j + dy[k] + if not (0 <= x < n and 0 <= y < m): + continue + if power[x][y]: + flag = True + if not flag: + return "failed" + + return "success" + + +def main(): + n, m = map(int, input().split()) + arr = [[0] * m for _ in range(n)] + power = [[0] * m for _ in range(n)] + lamps = [] + for _ in range(int(input())): + cmd, i, j = input().split() + i, j = int(i), int(j) + if cmd == 'redstone_block': + arr[i][j] = 2 + lamps.append([i, j]) + power[i][j] = 15 + elif cmd == 'redstone_dust': + arr[i][j] = 1 + elif cmd == 'redstone_lamp': + arr[i][j] = 3 + print(solve(n, m, arr, power, lamps)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/28325.py b/ddingmin/baekjoon/28325.py new file mode 100644 index 0000000..15ac7ab --- /dev/null +++ b/ddingmin/baekjoon/28325.py @@ -0,0 +1,41 @@ +import sys + + +def solve(n, arr): + ans = 0 + + # 첫 번째 큰 집을 먹은 경우 + dp = [[0] * n for _ in range(2)] + dp[0][0] = 1 + for i in range(1, n - 1): + # 큰집 먹기 + dp[0][i] = dp[1][i - 1] + 1 + # 작은집 먹기 + dp[1][i] = max(dp[0][i - 1], dp[1][i - 1]) + arr[i] + # 마지막 큰 집은 못먹음 + ans = max(dp[0][n - 2], dp[1][n - 2]) + arr[n - 1] + + # 첫 번째 작은 집을 먹은 경우 + dp = [[0] * n for _ in range(3)] + dp[1][0] = arr[0] + for i in range(1, n): + # 큰집 먹기 + dp[0][i] = dp[1][i - 1] + 1 + # 작은집 먹기 + dp[1][i] = max(dp[0][i - 1], dp[1][i - 1]) + arr[i] + + ans = max(ans, dp[0][n - 1], dp[1][n - 1]) + + return ans + + +def main(): + n = int(input()) + arr = list(map(int, input().split())) + print(solve(n, arr)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/30108.py b/ddingmin/baekjoon/30108.py new file mode 100644 index 0000000..6a7b713 --- /dev/null +++ b/ddingmin/baekjoon/30108.py @@ -0,0 +1,36 @@ +import sys +import heapq + + +def solve(n, adj, node): + answer = [0] + start = 1 + + hq = [] + heapq.heappush(hq, [-1 * node[start - 1], start]) + + while hq: + dist, cur = heapq.heappop(hq) + answer.append((-1 * dist) + answer[-1]) + for nxt in adj[cur]: + heapq.heappush(hq, [-1 * node[nxt - 1], nxt]) + + return answer[1:] + + +def main(): + input = sys.stdin.readline + n = int(input()) + adj = [[] for _ in range(n + 1)] + p = list(map(int, input().split())) + for cur in range(len(p)): + adj[p[cur]].append(cur + 2) + node = list(map(int, input().split())) + + result = solve(n, adj, node) + for pp in result: + print(pp) + + +if __name__ == '__main__': + main() diff --git a/ddingmin/baekjoon/3221.py b/ddingmin/baekjoon/3221.py new file mode 100644 index 0000000..1cae0be --- /dev/null +++ b/ddingmin/baekjoon/3221.py @@ -0,0 +1,42 @@ +import sys + + +def move(direction, cur, l, t): + if direction == 'L': + temp = t - cur + if temp < 0: + return cur - t + # 홀수 + if temp // l % 2 == 1: + return l - temp % l + else: + return temp % l + else: + temp = t - (l - cur) + if temp < 0: + return cur + t + if temp // l % 2 == 0: + return l - temp % l + else: + return temp % l + + + +def solve(l, t, cmd): + answer = [] + for cur, c in cmd: + answer.append(move(c, int(cur), l, t)) + return sorted(answer) + + +def main(): + l, t = map(int, input().split()) + n = int(input()) + cmd = list(input().split() for _ in range(n)) + print(*solve(l, t, cmd)) + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/4650.py b/ddingmin/baekjoon/4650.py new file mode 100644 index 0000000..9a3cdd5 --- /dev/null +++ b/ddingmin/baekjoon/4650.py @@ -0,0 +1,62 @@ +import sys +import heapq + + +def to_node(node_dict, char): + if char not in node_dict: + node_dict[char] = len(node_dict) + return node_dict[char] + + +def solve(n, adj): + start = 0 + visit = [0] * n + visited_cnt = 1 + visit[start] = 1 + ans = 0 + + hq = [] + for nxt, cost in adj[start]: + heapq.heappush(hq, [cost, nxt]) + + while visited_cnt < n and hq: + cost, cur = heapq.heappop(hq) + if visit[cur]: continue + visit[cur] = 1 + visited_cnt += 1 + ans += cost + for nxt, nxt_cost in adj[cur]: + heapq.heappush(hq, [nxt_cost, nxt]) + + return ans + + +def main(): + n = int(input()) + lines = [] + + while 1: + if n == 0: + break + line = list(input().split()) + if len(line) == 1: + node_dict = {} + adj = [[] for _ in range(n)] + for l in lines: + if len(l) > 2: + a = to_node(node_dict, l[0]) + for i in range(1, len(l) // 2): + b = to_node(node_dict, l[i * 2]) + c = int(l[i * 2 + 1]) + adj[a].append([b, c]) + adj[b].append([a, c]) + print(solve(n, adj)) + n = int(line[0]) + lines.clear() + else: + lines.append(line) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/4920.py b/ddingmin/baekjoon/4920.py new file mode 100644 index 0000000..c541d32 --- /dev/null +++ b/ddingmin/baekjoon/4920.py @@ -0,0 +1,57 @@ +import sys + + +def solve(n, arr): + ans = -1 * float('inf') + + # 3개짜리 + for i in range(n - 1): + for j in range(n - 2): + ans = max(ans, arr[i][j] + arr[i][j + 1] + arr[i + 1][j + 1] + arr[i + 1][j + 2]) + + ans = max(ans, arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 2]) + ans = max(ans, arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 1][j + 2] + arr[i][j]) + + ans = max(ans, arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 1]) + ans = max(ans, arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 1][j + 2] + arr[i][j + 1]) + + for i in range(n - 2): + for j in range(n - 1): + ans = max(ans, arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 2][j]) + + ans = max(ans, arr[i][j] + arr[i + 1][j] + arr[i + 2][j] + arr[i + 1][j + 1]) + ans = max(ans, arr[i][j] + arr[i + 1][j] + arr[i + 2][j] + arr[i][j + 1]) + + ans = max(ans, arr[i][j + 1] + arr[i + 1][j + 1] + arr[i + 2][j + 1] + arr[i + 1][j]) + ans = max(ans, arr[i][j + 1] + arr[i + 1][j + 1] + arr[i + 2][j + 1] + arr[i + 2][j]) + + # 4개짜리 + for i in range(n - 1): + for j in range(n - 1): + ans = max(ans, arr[i][j] + arr[i + 1][j] + arr[i][j + 1] + arr[i + 1][j + 1]) + # 기다란거 + for i in range(n - 3): + for j in range(n): + ans = max(ans, arr[i][j] + arr[i + 1][j] + arr[i + 2][j] + arr[i + 3][j]) + for i in range(n): + for j in range(n - 3): + ans = max(ans, arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i][j + 3]) + + return ans + + +def main(): + idx = 1 + while 1: + n = int(input()) + if n == 0: + break + arr = [list(map(int, input().split())) for _ in range(n)] + print(f"{idx}. {solve(n, arr)}") + idx += 1 + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/5502.py b/ddingmin/baekjoon/5502.py new file mode 100644 index 0000000..ca88ad0 --- /dev/null +++ b/ddingmin/baekjoon/5502.py @@ -0,0 +1,27 @@ +import sys + + +def solve(n, word, reverse_word): + lcs = [[0] * (n + 1) for _ in range(n + 1)] + + for i in range(1, n + 1): + for j in range(1, n + 1): + if word[i] == reverse_word[j]: + lcs[i][j] = lcs[i - 1][j - 1] + 1 + else: + lcs[i][j] = max(lcs[i - 1][j], lcs[i][j - 1]) + + return n - lcs[-1][-1] + + +def main(): + n = int(input()) + word = input().strip() + reverse_word = word[::-1] + print(solve(n, '0' + word, '0' + reverse_word)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/5546.py b/ddingmin/baekjoon/5546.py new file mode 100644 index 0000000..40ed048 --- /dev/null +++ b/ddingmin/baekjoon/5546.py @@ -0,0 +1,52 @@ +import sys + +MOD = 10000 + + +def solve(n, m, pastas): + dp = [[0] * 3 for _ in range(n + 1)] + + # 1일차 세팅 + if pastas[1] is None: + dp[1] = [1, 1, 1] + else: + dp[1][pastas[1]] = 1 + # 2일차 세팅 + if pastas[2] is not None: + dp[2][pastas[2]] = sum(dp[1]) + else: + for t in range(3): + dp[2][t] = sum(dp[1]) + + for day in range(3, n + 1): + for t in range(3): + if dp[day - 1][t] == 0: + dp[day][t] = sum(dp[day - 1]) % MOD + else: + dp[day][t] = ( + sum(dp[day - 1]) - dp[day - 1][t] + + sum(dp[day - 2]) - dp[day - 2][t] + ) % MOD + + if pastas[day] is not None: + dp[day][(pastas[day] + 1) % 3] = 0 + dp[day][(pastas[day] + 2) % 3] = 0 + + ans = sum(dp[n]) % MOD + return ans + + +def main(): + n, m = map(int, input().split()) + pastas = [None] * (n + 1) + + for _ in range(m): + day, p = map(int, input().split()) + pastas[day] = p - 1 + + print(solve(n, m, pastas)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/6086.py b/ddingmin/baekjoon/6086.py new file mode 100644 index 0000000..7c043a1 --- /dev/null +++ b/ddingmin/baekjoon/6086.py @@ -0,0 +1,62 @@ +import sys +from collections import deque + +MAX_NODE = 401 + + +def solve(capacity, flow, adj, start, end): + ans = 0 + visit = [[0] * MAX_NODE for _ in range(MAX_NODE)] + + while 1: + prev = [0] * MAX_NODE + q = deque([start]) + while q and prev[end] == 0: + cur = q.popleft() + for nxt in adj[cur]: + if not visit[cur][nxt] and not prev[nxt] and capacity[cur][nxt] - flow[cur][nxt] > 0: + prev[nxt] = cur + q.append(nxt) + if nxt == end: + break + + if prev[end] == 0: + break + + min_flow = float('inf') + + node = end + while node != start: + min_flow = min(min_flow, capacity[prev[node]][node] - flow[prev[node]][node]) + node = prev[node] + + node = end + while node != start: + flow[prev[node]][node] += 1 + flow[node][prev[node]] -= 1 + visit[prev[node]][node] = 1 + node = prev[node] + + ans += 1 + + return ans + + +def main(): + n, p = map(int, input().split()) + capacity = [[0] * MAX_NODE for _ in range(MAX_NODE)] + flow = [[0] * MAX_NODE for _ in range(MAX_NODE)] + adj = [[] for _ in range(MAX_NODE)] + for _ in range(p): + a, b = map(int, input().split()) + capacity[a][b] = 1 + adj[a].append(b) + adj[b].append(a) + + print(solve(capacity, flow, adj, 1, 2)) + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/7983.kt b/ddingmin/baekjoon/7983.kt new file mode 100644 index 0000000..79dbb09 --- /dev/null +++ b/ddingmin/baekjoon/7983.kt @@ -0,0 +1,28 @@ +import java.io.BufferedWriter +import java.io.OutputStreamWriter + +fun main() = with(System.`in`.bufferedReader()) { + val sout = BufferedWriter(OutputStreamWriter(System.out)) + + var n = readLine().toInt() + var arr = Array(n) { + readLine().split(" ").map { it.toLong() } + } + + sout.appendLine(solve(n, arr)) + sout.close() +} + +fun solve(n: Int, arr: Array>): String { + var ans = Long.MAX_VALUE + arr.sortBy { -it[1] } + + for (values in arr) { + var doing = values[0] + var deadline = values[1] + ans = minOf(ans, deadline) - doing + } + + + return ans.toString() +} diff --git a/ddingmin/baekjoon/7983.py b/ddingmin/baekjoon/7983.py new file mode 100644 index 0000000..ff78b5e --- /dev/null +++ b/ddingmin/baekjoon/7983.py @@ -0,0 +1,20 @@ +import sys + + +def solve(n, arr): + ans = float('inf') + for doing, deadline in arr: + ans = min(ans, deadline) - doing + + return ans + + +def main(): + n = int(input()) + arr = sorted([list(map(int, input().split())) for _ in range(n)], key=lambda x: [-x[1]]) + print(solve(n, arr)) + + +if __name__ == '__main__': + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/9077.py b/ddingmin/baekjoon/9077.py new file mode 100644 index 0000000..aef6000 --- /dev/null +++ b/ddingmin/baekjoon/9077.py @@ -0,0 +1,31 @@ +import sys + +MAX_RANGE = 10001 + + +def main(): + t = int(input()) + arr = [[0] * MAX_RANGE for _ in range(MAX_RANGE)] + + for _ in range(t): + n = int(input()) + ans = 0 + for _ in range(n): + x, y = map(int, input().split()) + for i in range(x, min(x + 11, MAX_RANGE)): + for j in range(y, min(y + 11, MAX_RANGE)): + arr[i][j] += 1 + ans = max(ans, arr[i][j]) + + for i in range(MAX_RANGE): + for j in range(MAX_RANGE): + arr[i][j] = 0 + + print(ans) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() +9077 diff --git a/ddingmin/baekjoon/9489.py b/ddingmin/baekjoon/9489.py new file mode 100644 index 0000000..fce1035 --- /dev/null +++ b/ddingmin/baekjoon/9489.py @@ -0,0 +1,57 @@ +import sys + +MAX_MODE = 1001 + + +def node_number_generater(nodes, node): + if node not in nodes: + nodes[node] = len(nodes) + 1 + return nodes[node] + + +def solve(n, k, arr): + adj = [[] for _ in range(MAX_MODE)] + radj = [[] for _ in range(MAX_MODE)] + parents = [] + parent_idx = -1 + nodes = {} + + # 인접 리스트 구현 + root_node = node_number_generater(nodes, arr[0]) + parents.append(node_number_generater(nodes, arr[0])) + for i in range(1, n): + cur = node_number_generater(nodes, arr[i]) + if arr[i] - 1 > arr[i - 1]: + parent_idx += 1 + + adj[parents[parent_idx]].append(cur) + radj[cur].append(parents[parent_idx]) + parents.append(cur) + + # 찾기 + k = node_number_generater(nodes, k) + if len(radj[k]) != 1: return 0 + father_node = radj[k][0] + if len(radj[father_node]) != 1: return 0 + grandfather_node = radj[father_node][0] + + ans = 0 + for f_node in adj[grandfather_node]: + if f_node == father_node: continue + ans += len(adj[f_node]) + + return ans + + +def main(): + while 1: + n, k = map(int, input().split()) + if (n, k) == (0, 0): break + arr = list(map(int, input().split())) + print(solve(n, k, arr)) + + +if __name__ == '__main__': + # sys.setrecursionlimit(10 ** 6) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/9694.py b/ddingmin/baekjoon/9694.py new file mode 100644 index 0000000..3de4583 --- /dev/null +++ b/ddingmin/baekjoon/9694.py @@ -0,0 +1,54 @@ +import sys +import heapq + + +def solve(n, m, adj, costs): + prev = [0] * (m + 1) + costs[m] = 0 + hq = [[0, m]] + while hq: + cost, cur = heapq.heappop(hq) + if costs[cur] != cost: + continue + for nxt, nxt_cost in adj[cur]: + temp = cost + nxt_cost + if temp < costs[nxt]: + costs[nxt] = temp + heapq.heappush(hq, [temp, nxt]) + prev[nxt] = cur + + if costs[m - 1] == float('inf'): + return -1 + + find = [] + find.append(m - 1) + + f = m - 1 + while f != m: + f = prev[f] + find.append(f) + find[-1] = 0 + return " ".join(map(str, find[::-1])) + + +def main(): + t = int(input()) + for idx in range(1, t + 1): + n, m = map(int, input().split()) + adj = [[] for _ in range(m + 1)] + costs = [float('inf')] * (m + 1) + for _ in range(n): + a, b, c = map(int, input().split()) + if a == 0: + a = m + if b == 0: + b = m + adj[a].append([b, c]) + adj[b].append([a, c]) + print(f"Case #{idx}: {solve(n, m, adj, costs)}") + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + input = sys.stdin.readline + main() diff --git a/ddingmin/baekjoon/9944.py b/ddingmin/baekjoon/9944.py new file mode 100644 index 0000000..e5af225 --- /dev/null +++ b/ddingmin/baekjoon/9944.py @@ -0,0 +1,79 @@ +import sys + + +def solve(n, m, arr, need_filled): + dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1] + + def bt(i, j, filled_count, depth): + nonlocal need_filled + temp = float('inf') + + # 이미 최소 경로를 넘은 경우 + if depth > ans: + return temp + + # 모든 공간이 채워진 경우 + if filled_count == need_filled: + return depth + + for k in range(4): + x, y = i + dx[k], j + dy[k] + if not (0 <= x < n and 0 <= y < m): continue + if not visit[x][y] and arr[x][y] == '.': + f_cnt = 0 + + fill_arr = [] + while 1: + fill_arr.append([x, y]) + visit[x][y] = 1 + f_cnt += 1 + nx, ny = x + dx[k], y + dy[k] + if not (0 <= nx < n and 0 <= ny < m): break + if not visit[nx][ny] and arr[nx][ny] == '.': + x, y = nx, ny + else: + break + + temp = min(temp, bt(x, y, filled_count + f_cnt, depth + 1)) + + clear_arr = [] + # 되돌리기 + for idx in range(1, f_cnt + 1): + clear_arr.append([i + dx[k] * idx, j + dy[k] * idx]) + visit[i + dx[k] * idx][j + dy[k] * idx] = 0 + + return temp + + ans = float('inf') + for i in range(n): + for j in range(m): + if arr[i][j] == '.': + visit = [[0] * m for _ in range(n)] + visit[i][j] = 1 + ans = min(ans, bt(i, j, 1, 0)) + if ans == float('inf'): + ans = -1 + return ans + + +def main(): + case = 1 + while True: + try: + n, m = map(int, input().split()) + arr = [list(input().strip()) for _ in range(n)] + need_filled = 0 + for i in range(n): + for j in range(m): + if arr[i][j] == '.': + need_filled += 1 + print(f"Case {case}: {solve(n, m, arr, need_filled)}") + case += 1 + except EOFError: + break + + +if __name__ == '__main__': + sys.setrecursionlimit(10 ** 5) + # input = sys.stdin.readline + main() diff --git a/dydwo0740/baekjoon/10429.java b/dydwo0740/baekjoon/10429.java new file mode 100644 index 0000000..ea35e37 --- /dev/null +++ b/dydwo0740/baekjoon/10429.java @@ -0,0 +1,119 @@ +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +public class Main { + + static int[] row = {1, -1, 0, 0}; + static int[] col = {0, 0, 1, -1}; + + static int N; + static int M; + static char[][] board = new char[3][3]; + + static class Node { + int x; + int y; + + public Node(int x, int y) { + this.x = x; + this.y = y; + } + } + + static List list = new ArrayList<>(); + + static List ans = new ArrayList<>(); + + static boolean flag = false; + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + + for (int i = 0; i < 3; i++) { + st = new StringTokenizer(br.readLine()); + String str = st.nextToken(); + for (int j = 0; j < 3; j++) { + board[i][j] = str.charAt(j); + } + } + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if ('0' <= board[i][j] && board[i][j] <= '9') { + boolean[][] visited = new boolean[3][3]; + visited[i][j] = true; + list.add(new Node(i, j)); + dfs(board[i][j] - '0', 1, false, i, j, visited, ' '); + } + + if (flag) { + bw.write(1 + "\n"); + for (Node node : ans) { + bw.write(node.x + " " + node.y + "\n"); + } + bw.flush(); + return; + } + list.clear(); + } + } + + bw.write(0 + "\n"); + + bw.flush(); + } + + public static void dfs(int cur, int depth, boolean isNum, int x, int y, boolean[][] visited, char ch) { + if (depth == M && N == cur && !flag) { + flag = true; + for (Node node : list) { + ans.add(node); + } + return; + } + + for (int i = 0; i < 4; i++) { + int nx = x + row[i]; + int ny = y + col[i]; + + if (0 > nx || nx >= 3 || 0 > ny || ny >= 3) { + continue; + } + + if (!visited[nx][ny] && (('0' <= board[nx][ny] && board[nx][ny] <= '9' && isNum))) { + visited[nx][ny] = true; + list.add(new Node(nx, ny)); + dfs(solve(ch, cur, board[nx][ny] - '0'), depth + 1, !isNum, nx, ny, visited, ch); + list.remove(list.size() - 1); + visited[nx][ny] = false; + } else if (!visited[nx][ny] && (board[nx][ny] == '+' || board[nx][ny] == '-') && !isNum) { + visited[nx][ny] = true; + list.add(new Node(nx, ny)); + dfs(cur, depth, !isNum, nx, ny, visited, board[nx][ny]); + visited[nx][ny] = false; + list.remove(list.size() - 1); + } + } + + + } + + public static int solve(char ch, int num1, int num2) { + if (ch == '+') { + return num1 + num2; + } + + return num1 - num2; + } + +} diff --git a/dydwo0740/baekjoon/10710.java b/dydwo0740/baekjoon/10710.java new file mode 100644 index 0000000..29b5b16 --- /dev/null +++ b/dydwo0740/baekjoon/10710.java @@ -0,0 +1,74 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Node { + int index; + int value; + + public Node(int index, int value) { + this.index = index; + this.value = value; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int M = Integer.parseInt(st.nextToken()); + + int[] dist = new int[N]; + int[] cost = new int[M]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + dist[i] = Integer.parseInt(st.nextToken()); + } + + for (int i = 0; i < M; i++) { + st = new StringTokenizer(br.readLine()); + + cost[i] = Integer.parseInt(st.nextToken()); + } + + int[][] dp = new int[N][M]; // N 번째 장소를 M에 지나옴! + + for (int i = 0; i < N; i++) { + Arrays.fill(dp[i], Integer.MAX_VALUE); + } + + + for (int i = 0; i < M; i++) { + dp[0][i] = dist[0] * cost[i]; + } + + for (int i = 1; i < N; i++) { + for (int j = 1; j < M; j++) { + for(int k=0; k= 2) { + if (idx == 2) { + int index = 0; + for (int i = x; i < x + height[idx]; i++) { + for (int j = y; j < y + width[idx] - index; j++) { + board[i][j] = 1; + } + y++; + index += 2; + } + break; + } + + int index = 2; + if (!flag) { + int beforeX = x; + int beforeY = y; + for (int j = y; j < y + width[idx]; j++) { + board[x][j] = 1; + } + x--; + y++; + for (int i = x; i > x - height[idx]; i--) { + for (int j = y; j < y + width[idx] - index; j++) { + if (j == y || j + 1 == y + width[idx] - index) { + board[i][j] = 1; + } + } + y++; + index += 2; + } + x = (-height[idx] + 2 * beforeX + 1) / 2; + y = (y + beforeY) / 2; + flag = !flag; + idx--; + continue; + } + int beforeX = x; + int beforeY = y; + for (int j = y; j < y + width[idx]; j++) { + board[x][j] = 1; + } + x++; + y++; + for (int i = x; i < x + height[idx]; i++) { + for (int j = y; j < y + width[idx] - index; j++) { + if (j == y || j + 1 == y + width[idx] - index) { + board[i][j] = 1; + } + } + y++; + index += 2; + } + + x = (height[idx] + 2 * beforeX - 1) / 2; + y = (y + beforeY) / 2; + flag = !flag; + idx--; + } + if (origin % 2 == 1) { + for(int i=0;i first = new HashSet<>(); + Set alp = new HashSet<>(); + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + s[i] = str; + for (int j = 0; j < str.length(); j++) { + if (j == 0) { + first.add(str.charAt(j)); + } + alp.add(str.charAt(j)); + alpha[str.charAt(j) - 'A'] += (long)Math.pow(10, str.length() - 1 - j); + } + } + + PriorityQueue pq = new PriorityQueue<>(new Comparator() { + @Override + public int compare(Alpha o1, Alpha o2) { + return Long.compare(o2.weight, o1.weight); + } + }); + + PriorityQueue temp = new PriorityQueue<>(new Comparator() { + @Override + public int compare(Alpha o1, Alpha o2) { + return Long.compare(o1.weight, o2.weight); + } + }); + + for (int i = 0; i < 26; i++) { + if (alpha[i] > 0) { + pq.add(new Alpha((char) ('A' + i), alpha[i])); + temp.add(new Alpha((char) ('A' + i), alpha[i])); + } + } + + long num = 9; + long ans = 0; + + char ch = '&'; + + if (alp.size() == 10) { + while (!temp.isEmpty()) { + Alpha head = temp.poll(); + if (!first.contains(head.ch)) { + ch = head.ch; + break; + } + } + } + + while (!pq.isEmpty()) { + Alpha cur = pq.poll(); + if (cur.ch == ch) { + continue; + } + ans += (long)(cur.weight * num--); + } + + + + + + bw.write(ans+"\n"); + + bw.flush(); + } +} diff --git a/dydwo0740/baekjoon/11607.java b/dydwo0740/baekjoon/11607.java new file mode 100644 index 0000000..b13339f --- /dev/null +++ b/dydwo0740/baekjoon/11607.java @@ -0,0 +1,63 @@ +import java.io.*; +import java.util.*; + +public class Main { + static int N; + static int M; + static int[] row = {1, -1, 0, 0}; + static int[] col = {0, 0, 1, -1}; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + int[][] board = new int[N][M]; + + for(int i=0;i queue = new LinkedList<>(); + queue.add(new int[]{0, 0, 0}); + boolean[][] visited = new boolean[N][M]; + visited[0][0] = true; + + while(!queue.isEmpty()){ + int[] cur = queue.poll(); + + if(cur[0] == N - 1 && cur[1] == M - 1){ + return cur[2]; + } + + for(int i=0;i<4;i++){ + int nx = cur[0] + row[i] * board[cur[0]][cur[1]]; + int ny = cur[1] + col[i] * board[cur[0]][cur[1]]; + + if (0 <= nx && nx < N && 0 <= ny && ny < M) { + if (!visited[nx][ny]) { + queue.add(new int[]{nx, ny, cur[2] + 1}); + visited[nx][ny] = true; + } + } + } + } + return -1; + } +} diff --git a/dydwo0740/baekjoon/12834.java b/dydwo0740/baekjoon/12834.java new file mode 100644 index 0000000..3dc91dd --- /dev/null +++ b/dydwo0740/baekjoon/12834.java @@ -0,0 +1,107 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Node { + int v; + int dist; + + public Node(int v, int dist) { + this.v = v; + this.dist = dist; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int V = Integer.parseInt(st.nextToken()); + + int E = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int A = Integer.parseInt(st.nextToken()); + + int B = Integer.parseInt(st.nextToken()); + + int[] home = new int[N]; + + List[] g = new ArrayList[V + 1]; + + for (int i = 1; i <= V; i++) { + g[i] = new ArrayList<>(); + } + + + st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < N; i++) { + home[i] = Integer.parseInt(st.nextToken()); + } + + for (int i = 0; i < E; i++) { + st = new StringTokenizer(br.readLine()); + + int v1 = Integer.parseInt(st.nextToken()); + int v2 = Integer.parseInt(st.nextToken()); + int dist = Integer.parseInt(st.nextToken()); + + g[v1].add(new Node(v2, dist)); + g[v2].add(new Node(v1, dist)); + } + int ans = 0; + + for(int i=0;i[] g, int start, int A, int B, int V) { + PriorityQueue pq = new PriorityQueue<>(new Comparator() { + @Override + public int compare(int[] o1, int[] o2) { + return o1[1] - o2[1]; + } + }); + + pq.add(new int[]{start, 0}); + int[] dist = new int[V + 1]; + Arrays.fill(dist, Integer.MAX_VALUE); + dist[start] = 0; + + while (!pq.isEmpty()) { + int[] cur = pq.poll(); + + if (cur[1] > dist[cur[0]]) { + continue; + } + + for (int i = 0; i < g[cur[0]].size(); i++) { + Node next = g[cur[0]].get(i); + if (dist[next.v] > cur[1] + next.dist) { + dist[next.v] = cur[1] + next.dist; + pq.add(new int[]{next.v, dist[next.v]}); + } + } + } + + int sum = 0; + + sum += (dist[A] == Integer.MAX_VALUE) ? -1 : dist[A]; + sum += (dist[B] == Integer.MAX_VALUE) ? -1 : dist[B]; + + return sum; + } + + +} diff --git a/dydwo0740/baekjoon/12908.java b/dydwo0740/baekjoon/12908.java new file mode 100644 index 0000000..1f05d08 --- /dev/null +++ b/dydwo0740/baekjoon/12908.java @@ -0,0 +1,104 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Location{ + int sx; + int sy; + int ex; + int ey; + + public Location(int sx, int sy, int ex, int ey) { + this.sx = sx; + this.sy = sy; + this.ex = ex; + this.ey = ey; + } + } + + static int startX; + static int startY; + static int endX; + static int endY; + static long min = Long.MAX_VALUE; + + static List[] list; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + startX = Integer.parseInt(st.nextToken()); + startY = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + endX = Integer.parseInt(st.nextToken()); + endY = Integer.parseInt(st.nextToken()); + + list = new ArrayList[6]; + + for (int i = 0; i < 6; i++) { + list[i] = new ArrayList<>(); + } + + for (int i = 0; i < 5; i += 2) { + st = new StringTokenizer(br.readLine()); + + int sx = Integer.parseInt(st.nextToken()); + int sy = Integer.parseInt(st.nextToken()); + int ex = Integer.parseInt(st.nextToken()); + int ey = Integer.parseInt(st.nextToken()); + + list[i].add(new Location(sx, sy, ex, ey)); + list[i + 1].add(new Location(ex, ey, sx, sy)); + } + + min = Math.abs(startX - endX) + Math.abs(startY - endY); + + for (int i = 1; i <= 6; i++) { + permutation(new boolean[6], new int[i], 0); + } + + + bw.write(min + "\n"); + bw.flush(); + } + + public static void permutation(boolean[] visited, int[] output, int depth) { + if (output.length == depth) { + solve(output); + return; + } + + for (int i = 0; i < 6; i++) { + if (!visited[i]) { + visited[i] = true; + output[depth] = i; + permutation(visited, output, depth + 1); + visited[i] = false; + } + } + } + + public static void solve(int[] output) { + long dist = 0; + int curX = startX; + int curY = startY; + for (int i = 0; i < output.length; i++) { + List lists = list[output[i]]; + dist += Math.abs(curX - lists.get(0).sx) + Math.abs(curY - lists.get(0).sy); + dist += 10; + curX = lists.get(0).ex; + curY = lists.get(0).ey; + } + + dist += Math.abs(curX - endX) + Math.abs(curY - endY); + min = Math.min(min, dist); + } + + + +} diff --git a/dydwo0740/baekjoon/14395.java b/dydwo0740/baekjoon/14395.java new file mode 100644 index 0000000..0348e32 --- /dev/null +++ b/dydwo0740/baekjoon/14395.java @@ -0,0 +1,97 @@ +import java.io.*; +import java.util.*; + +public class Main { + static long N; + static long M; + + static class Step { + long num; + String str = ""; + + public Step(long num, String str) { + this.num = num; + this.str = str; + } + } + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Long.parseLong(st.nextToken()); + + M = Long.parseLong(st.nextToken()); + + if (N == M) { + bw.write(0 + "\n"); + bw.flush(); + return; + } + + String answer = bfs(); + + if (answer.equals("Impossible")) { + bw.write("-1\n"); + } else{ + bw.write(answer + "\n"); + } + + + bw.flush(); + } + + public static String bfs() { + Queue queue = new LinkedList<>(); + Set set = new HashSet<>(); + boolean flag = true; + + queue.add(new Step(N, "")); + + set.add(N); + + while (!queue.isEmpty()) { + Queue temp = new LinkedList<>(queue); + queue.clear(); + + while (!temp.isEmpty()) { + Step cur = temp.poll(); + + String curString = cur.str; + + if (cur.num == M) { + return cur.str; + } + + if (cur.num > M) { + continue; + } + + if (!set.contains(cur.num * cur.num)) { + queue.add(new Step(cur.num * cur.num, curString + "*")); + } + + if (!set.contains(cur.num + cur.num)) { + queue.add(new Step(cur.num * 2, curString + "+")); + } + + + } + + if(N != 1 && flag) { + flag = false; + queue.add(new Step(1, "/")); + set.add(1L); + } + + } + + return "Impossible"; + + + } + + +} diff --git a/dydwo0740/baekjoon/14497.java b/dydwo0740/baekjoon/14497.java new file mode 100644 index 0000000..34c735a --- /dev/null +++ b/dydwo0740/baekjoon/14497.java @@ -0,0 +1,111 @@ +import java.io.*; +import java.util.*; + +public class Main { + static int N; + static int M; + static int[] row = {1, -1, 0, 0}; + static int[] col = {0, 0, 1, -1}; + static int startX; + static int startY; + static int endX; + static int endY; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + startX = Integer.parseInt(st.nextToken()); + + startY = Integer.parseInt(st.nextToken()); + + endX = Integer.parseInt(st.nextToken()); + + endY = Integer.parseInt(st.nextToken()); + + char[][] board = new char[N][M]; + boolean[][] visited = new boolean[N][M]; + + startX--; + startY--; + endX--; + endY--; + + for(int i=0;i queue = new LinkedList<>(); + queue.add(new int[]{startX, startY}); + visited[startX][startY] = true; + + List deleteList = new ArrayList<>(); + + while (!queue.isEmpty()) { + int[] cur = queue.poll(); + + if (cur[0] == endX && cur[1] == endY) { + return true; + } + + for(int i=0;i<4;i++){ + int nx = cur[0] + row[i]; + int ny = cur[1] + col[i]; + + if (0 <= nx && nx < N && 0 <= ny && ny < M) { + if(!visited[nx][ny] && (board[nx][ny] == '0' || board[nx][ny] == '#')){ + visited[nx][ny] = true; + queue.add(new int[]{nx, ny}); + } else if(board[nx][ny] == '1'){ + visited[nx][ny] = true; + deleteList.add(new int[]{nx, ny}); + } + } + } + } + + for (int[] point : deleteList) { + board[point[0]][point[1]] = '0'; + } + + return false; + + } + +} diff --git a/dydwo0740/baekjoon/14618.java b/dydwo0740/baekjoon/14618.java new file mode 100644 index 0000000..949a09f --- /dev/null +++ b/dydwo0740/baekjoon/14618.java @@ -0,0 +1,128 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Node{ + int v; + int dist; + + public Node(int v, int dist) { + this.v = v; + this.dist = dist; + } + } + + static int N; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + int M = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int start = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int K = Integer.parseInt(st.nextToken()); + + int[] A = new int[K]; + int[] B = new int[K]; + + st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < K; i++) { + A[i] = Integer.parseInt(st.nextToken()); + } + + st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < K; i++) { + B[i] = Integer.parseInt(st.nextToken()); + } + + List[] g = new ArrayList[N + 1]; + + for(int i=0;i<=N;i++){ + g[i] = new ArrayList<>(); + } + + for(int i=0;i[] g) { + int[] dist = new int[N + 1]; + PriorityQueue pq = new PriorityQueue<>(new Comparator() { + @Override + public int compare(Node o1, Node o2) { + return o1.dist - o2.dist; + } + }); + + Arrays.fill(dist, Integer.MAX_VALUE); + + pq.add(new Node(start, 0)); + dist[start] = 0; + + while (!pq.isEmpty()) { + Node cur = pq.poll(); + + if (dist[cur.v] < cur.dist) { + continue; + } + + for(int i=0;i cost + cur.dist) { + dist[next] = cost + cur.dist; + pq.add(new Node(next, dist[next])); + } + } + } + + return dist; + } + + +} diff --git a/dydwo0740/baekjoon/14925.java b/dydwo0740/baekjoon/14925.java new file mode 100644 index 0000000..2d23071 --- /dev/null +++ b/dydwo0740/baekjoon/14925.java @@ -0,0 +1,103 @@ +import java.io.*; +import java.util.StringTokenizer; + +public class Main { + static int N; + static int M; + + static int[][] down; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + int[][] board = new int[N][M]; + down = new int[N][M]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < M; j++) { + board[i][j] = Integer.parseInt(st.nextToken()); + } + } + + for(int i=0;i=0;j--){ + if(board[j][i] != 0){ + continue; + } + + if(board[j + 1][i] == 0){ + down[j][i] = down[j + 1][i] + 1; + } else{ + down[j][i] = 1; + } + } + } + + /*for(int i=0;i pq = new PriorityQueue<>(); + + for(int i=1;i<=N;i++){ + if (parent[i] == i && amount[i] != 0) { + pq.add(amount[i]); + } + } + + bw.write(pq.size()+"\n"); + + + while (!pq.isEmpty()) { + bw.write(pq.poll() + " "); + } + + bw.flush(); + } + + public static int getParent(int x) { + if (parent[x] == x) { + return x; + } + return parent[x] = getParent(parent[x]); + } + + public static void union(int x, int y) { + x = getParent(x); + y = getParent(y); + + amount[y] += amount[x]; + parent[x] = y; + } + + public static void fight(int x, int y) { + x = getParent(x); + y = getParent(y); + + if(amount[x] == amount[y]){ + amount[x] = 0; + amount[y] = 0; //멸망 + } else if (amount[x] > amount[y]) { + amount[x] -= amount[y]; + parent[y] = x; + } else{ + amount[y] -= amount[x]; + parent[x] = y; + } + } + + +} diff --git a/dydwo0740/baekjoon/16167.java b/dydwo0740/baekjoon/16167.java new file mode 100644 index 0000000..0f5f84e --- /dev/null +++ b/dydwo0740/baekjoon/16167.java @@ -0,0 +1,90 @@ +import java.io.*; +import java.util.*; + +public class Main { + static List[] g; + static int N; + static int[] count; + + static class Node { + int v; + int w; + + Node(int v, int w) { + this.v = v; + this.w = w; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + int R = Integer.parseInt(st.nextToken()); + + g = new ArrayList[N + 1]; + + for (int i = 0; i <= N; i++) { + g[i] = new ArrayList<>(); + } + + for (int i = 0; i < R; i++) { + st = new StringTokenizer(br.readLine()); + + int v1 = Integer.parseInt(st.nextToken()); + int v2 = Integer.parseInt(st.nextToken()); + int c = Integer.parseInt(st.nextToken()); + int d = Integer.parseInt(st.nextToken()); + int e = Integer.parseInt(st.nextToken()); + + int rest = (e - 10) >= 0 ? (e - 10) : 0; + + g[v1].add(new Node(v2, (rest) * d + c)); + } + + int ans = dijkstra(); + if (ans == Integer.MAX_VALUE) { + bw.write("It is not a great way."); + bw.flush(); + return; + } + bw.write(ans + " " + count[N]); + bw.flush(); + } + + public static int dijkstra() { + PriorityQueue pq = new PriorityQueue<>((int[] o1, int[] o2) -> o1[1] - o2[1]); + pq.add(new int[] {1, 0, 1}); + int[] dist = new int[N + 1]; + count = new int[N +1]; + Arrays.fill(dist, Integer.MAX_VALUE); + Arrays.fill(count, Integer.MAX_VALUE); + dist[1] = 0; + count[1] = 1; + while(!pq.isEmpty()) { + int[] cur = pq.poll(); + + if(cur[1] > dist[cur[0]]) { + continue; + } + + for(int i=0;i[] list = new ArrayList[101]; + for (int i = 1; i <= 100; i++) { + list[i] = new ArrayList<>(); + } + int[][][] rank = new int[101][101][2]; // 각 전송 시간과 노드의 index를 + int[][] dp = new int[101][101]; // 각 노드에 대해 최소 타임 + + for(int i=1;i<=100;i++) { + Arrays.fill(dp[i], Integer.MIN_VALUE); + } + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + int start = Integer.parseInt(st.nextToken()); + int weight = Integer.parseInt(st.nextToken()); + + list[start].add(new Node(weight, i + 1)); + } + + for (int i = 0; i < list[1].size(); i++) { + dp[1][i] = list[1].get(i).weight; + } + + int idx = 2; + while (!list[idx].isEmpty()) { + for(int i=0;i 10){ + return; + } + if ((board[x1][y1] == 'D' && board[x2][y2] != 'D') || (board[x1][y1] != 'D' && board[x2][y2] == 'D')) { + + ans = Math.min(ans, depth); + return; + } else if (board[x1][y1] == 'D' && board[x2][y2] == 'D') { + return; + } + + for(int i=0;i<4;i++){ + int nx1 = x1 + row[i]; + int ny1 = y1 + col[i]; + int nx2 = x2 + row[i]; + int ny2 = y2 + col[i]; + + if (board[nx1][ny1] == '#') { + nx1 = x1; + ny1 = y1; + } + if (board[nx2][ny2] == '#') { + nx2 = x2; + ny2 = y2; + } + + + dfs(nx1, ny1, nx2, ny2, depth + 1); + } + } + +} diff --git a/dydwo0740/baekjoon/16437.java b/dydwo0740/baekjoon/16437.java new file mode 100644 index 0000000..b040eca --- /dev/null +++ b/dydwo0740/baekjoon/16437.java @@ -0,0 +1,68 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Node { + long count; + public Node(long count) { + this.count = count; + } + } + + static Node[] nodes; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + List[] g = new ArrayList[N + 1]; + nodes = new Node[N + 1]; + + nodes[1] = new Node(0); + + for (int i = 1; i <= N; i++) { + g[i] = new ArrayList<>(); + } + + for (int i = 2; i <= N; i++) { + st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + long count = Long.parseLong(st.nextToken()); + int v = Integer.parseInt(st.nextToken()); + + g[v].add(i); + + if (str.equals("S")) { + nodes[i] = new Node(count); + continue; + } + nodes[i] = new Node(-count); + } + + long ans = getCount(g, 1); + + bw.write(ans + "\n"); + + bw.flush(); + } + + public static long getCount(List[] g, int v) { + long sum = 0; + for (int cur : g[v]) { + sum += getCount(g, cur); + } + + if (sum + nodes[v].count >= 0) { + return nodes[v].count + sum; + } + + return 0; + } + + +} diff --git a/dydwo0740/baekjoon/16569.java b/dydwo0740/baekjoon/16569.java new file mode 100644 index 0000000..8516b94 --- /dev/null +++ b/dydwo0740/baekjoon/16569.java @@ -0,0 +1,153 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static int[][] board; + + static boolean[][] fire; + static Map> map = new HashMap<>(); + static int N; + static int M; + static int[] row = {1, -1, 0, 0}; + static int[] col = {0, 0, 1, -1}; + + static int cost = -1; + static int height = -1; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + int V = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int startX = Integer.parseInt(st.nextToken()); + int startY = Integer.parseInt(st.nextToken()); + + board = new int[N + 1][M + 1]; + fire = new boolean[N + 1][M + 1]; + + for (int i = 1; i <= N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 1; j <= M; j++) { + board[i][j] = Integer.parseInt(st.nextToken()); + } + } + + for (int i = 0; i < V; i++) { + st = new StringTokenizer(br.readLine()); + + int x = Integer.parseInt(st.nextToken()); + int y = Integer.parseInt(st.nextToken()); + int time = Integer.parseInt(st.nextToken()); + + fire[x][y] = true; + + if (map.containsKey(time)) { + List list = map.get(time); + list.add(new int[]{x, y}); + } else { + List list = new ArrayList<>(); + list.add(new int[]{x, y}); + map.put(time, list); + } + } + + bfs(startX, startY); + + + bw.write(height + " " + cost + "\n"); + + bw.flush(); + } + + public static void bfs(int x, int y) { + boolean[][] visited = new boolean[N + 1][M + 1]; + Queue queue = new LinkedList<>(); + queue.add(new int[]{x, y}); + visited[x][y] = true; + height = board[x][y]; + cost = 0; + int time = 0; + + while (!queue.isEmpty()) { + Queue temp = new LinkedList<>(queue); + queue.clear(); + volcano(); + if (map.containsKey(time)) { + List list = map.get(time); + for (int[] loc : list) { + board[loc[0]][loc[1]] = -1; + } + } + + /*for(int i=1;i<=N;i++){ + for(int j=1;j<=M;j++){ + System.out.print(board[i][j] + " "); + } + System.out.println(); + }*/ + while (!temp.isEmpty()) { + int[] cur = temp.poll(); + + if (board[cur[0]][cur[1]] == -1) { + continue; + } + + if (height < board[cur[0]][cur[1]]) { + height = board[cur[0]][cur[1]]; + cost = time; + } + + + + for (int i = 0; i < 4; i++) { + int nx = cur[0] + row[i]; + int ny = cur[1] + col[i]; + + if (1 <= nx && nx <= N && 1 <= ny && ny <= M) { + if (!visited[nx][ny] && board[nx][ny] != -1 && !fire[nx][ny]) { + visited[nx][ny] = true; + queue.add(new int[]{nx, ny}); + } + } + } + } + + time++; + } + } + + public static void volcano() { + boolean[][] visited = new boolean[N + 1][M + 1]; + for (int i = 1; i <= N; i++) { + for (int j = 1; j <= M; j++) { + if (board[i][j] == -1 && !visited[i][j]) { + visited[i][j] = true; + + for (int k = 0; k < 4; k++) { + int nx = i + row[k]; + int ny = j + col[k]; + if (1 <= nx && nx <= N && 1 <= ny && ny <= M) { + if (board[nx][ny] == -1) { + continue; + } + visited[nx][ny] = true; + board[nx][ny] = -1; + } + } + } + } + //System.out.println(); + } + } + + +} diff --git a/dydwo0740/baekjoon/16765.java b/dydwo0740/baekjoon/16765.java new file mode 100644 index 0000000..4da5eec --- /dev/null +++ b/dydwo0740/baekjoon/16765.java @@ -0,0 +1,51 @@ +import java.io.*; +import java.util.*; + +public class Main { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int K = Integer.parseInt(st.nextToken()); + + int[] seq = new int[N + 1]; + + for(int i=1;i<=N;i++) { + st = new StringTokenizer(br.readLine()); + + seq[i] = Integer.parseInt(st.nextToken()); + } + + int[] dp = new int[N + 1]; + + dp[1] = seq[1]; + + if(N >= 2) { + dp[2] = Math.max(seq[1], seq[2]) * 2; + } + + for(int i=3;i<=N;i++) { + int max = seq[i]; + + for(int j=0;j map = new HashMap<>(); // key 는 parent입니다. 그리고 value 는 넓이 + + static int[] row = {0, 0, 1, -1}; + static int[] col = {1, -1, 0, 0}; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + board = new int[N][M]; // 이걸 union-find로 변환합니다. 그리고 비교를 합니다. + parent = new int[N*M]; + boolean[][] visited = new boolean[N][M]; + for(int i=0;i set = new HashSet<>(); + for(int i=0;i<4;i++) { + int nx = x + row[i]; + int ny = y + col[i]; + + if(0 <= nx && nx < N && 0 <= ny && ny < M) { + if(board[nx][ny] == 1 && !set.contains(getParent(nx * M + ny))) { + cnt += (map.get(getParent(nx * M + ny))); + set.add(getParent(nx * M + ny)); + } + } + } + + //bw.write(x + " " + y + " " + cnt +"\n"); + max = Math.max(max, cnt); + } + } + } + + bw.write(max + "\n"); + + bw.flush(); + } + + public static int getParent(int x) { + if(parent[x] == x) { + return x; + } + + return parent[x] = getParent(parent[x]); + } + + public static void union(int x, int y) { + x = getParent(x); + y = getParent(y); + + if(x == y) { + return; + } + + if(x < y) { + parent[y] = x; + } else { + parent[x] = y; + } + } + + + + public static void bfs(int x, int y, boolean[][] visited) { + Queue queue = new LinkedList<>(); + + int cnt = 0; + queue.add(new int[] {x, y}); + visited[x][y] = true; + + while(!queue.isEmpty()) { + int[] cur = queue.poll(); + cnt++; + for(int i=0;i<4;i++) { + int nx = cur[0] + row[i]; + int ny = cur[1] + col[i]; + + if(0 <= nx && nx < N && 0 <= ny && ny < M) { + if(board[nx][ny] == 1 && !visited[nx][ny]) { + visited[nx][ny] = true; + queue.add(new int[] {nx, ny}); + union(cur[0] * M + cur[1], nx * M + ny); + } + } + } + } + + map.put(getParent(x * M + y), cnt); + } +} diff --git a/dydwo0740/baekjoon/17208.java b/dydwo0740/baekjoon/17208.java new file mode 100644 index 0000000..916cfc8 --- /dev/null +++ b/dydwo0740/baekjoon/17208.java @@ -0,0 +1,50 @@ +import java.io.*; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class Main { + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int restCheeses = Integer.parseInt(st.nextToken()); + int restFries = Integer.parseInt(st.nextToken()); + + int[][] orders = new int[N + 1][2]; + + int[][][] dp = new int[N + 1][301][301]; + + for(int i=1;i<=N;i++) { + st = new StringTokenizer(br.readLine()); + + orders[i][0] = Integer.parseInt(st.nextToken()); + orders[i][1] = Integer.parseInt(st.nextToken()); + } + + + for (int i = 1; i <= N; i++) { + for (int j = 0; j <= 300; j++) { + for(int k=0;k<=300;k++) { + if(j < orders[i][0] || k < orders[i][1]) { + dp[i][j][k] = dp[i-1][j][k]; + continue; + } + + dp[i][j][k] = Math.max(dp[i-1][j][k], 1 + dp[i - 1][j - orders[i][0]][k - orders[i][1]]); + } + } + } + + + bw.write(dp[N][restCheeses][restFries] + "\n"); + + + bw.flush(); + bw.close(); + br.close(); + } +} diff --git a/dydwo0740/baekjoon/18188.java b/dydwo0740/baekjoon/18188.java new file mode 100644 index 0000000..05eb568 --- /dev/null +++ b/dydwo0740/baekjoon/18188.java @@ -0,0 +1,147 @@ +import java.io.*; +import java.util.StringTokenizer; + +public class Main { + + static int[] row = {1, -1, 0, 0}; + static int[] col = {0, 0, 1, -1}; + + static int N; + static int M; + static int Q; + static int[][] board; + static int[][] quest; + + static char[][] shape; + static int answer = Integer.MAX_VALUE; + static String ans = ""; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + board = new int[N][M]; + + int startX = -1; + int startY = -1; + int endX = -1; + int endY = -1; + + // 0이면 갈 수 있고, 1이면 못갑니다. + + for(int i=0;i depth){ + answer = depth; + ans = move; + return; + } + + if(depth < Q){ + for(int i=0;i<2;i++){ + int nx = curX + row[quest[depth][i]]; + int ny = curY + col[quest[depth][i]]; + + if(0<= nx && nx < N && 0 <= ny && ny < M){ + if (board[nx][ny] == 0) { + dfs(nx, ny, depth + 1, endX, endY, move + String.valueOf(shape[depth][i])); + } + } + } + } + + } + + public static String change(int i){ + if(i==0){ + return "S"; + } else if(i == 1){ + return "W"; + } else if(i==2){ + return "D"; + } + + return "A"; + } + + +} diff --git a/dydwo0740/baekjoon/18231.java b/dydwo0740/baekjoon/18231.java new file mode 100644 index 0000000..0176386 --- /dev/null +++ b/dydwo0740/baekjoon/18231.java @@ -0,0 +1,109 @@ +import java.io.*; +import java.util.*; +import java.util.stream.*; + +public class Main { + static long[] seq; + static long[] dp; + static boolean[] prime; + static Set[] set; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + int M = Integer.parseInt(st.nextToken()); + + set = new HashSet[N + 1]; + + for(int i=1;i<=N;i++) { + set[i] = new HashSet<>(); + } + + for(int i=0;i city = new ArrayList<>(); + boolean[] visited = new boolean[N + 1]; + + st = new StringTokenizer(br.readLine()); + + for(int i=0;i res = new ArrayList<>(); + for(int i=1;i<=N;i++) { + if(binarySearch(i, city)){ + continue; + } + List deleteList = new ArrayList<>(); + Iterator iter = set[i].iterator(); + boolean flag = true; + while(iter.hasNext()) { + int index = iter.next(); + if(!binarySearch(index, city)) { + flag = false; + break; + } + deleteList.add(index); + } + + if(flag) { + res.add(i); + for(int idx : deleteList) { + visited[idx] = true; + } + visited[i] = true; + } + } + + if(isPossible(city, visited)) { + bw.write(res.size() + "\n"); + for(int i=0;i city) { + int left = 0; + int right = city.size() - 1; + + while(left <= right) { + int mid = (left + right) / 2; + if(city.get(mid) == target) { + return true; + } else if(city.get(mid) > target) { + right = mid - 1; + } else { + left = mid + 1; + } + } + + return false; + } + + public static boolean isPossible(List city, boolean[] visited) { + for(int i=0;i opposite = new ArrayList<>(); + List item = new ArrayList<>(); + + for(int i=0;i nodes, int target) { + int left = 0; + int right = nodes.size(); + + while(left < right) { + int mid = (left + right) / 2; + + if(nodes.get(mid).value <= target) { + left = mid + 1; + } else { + right = mid; + } + + } + + if(left == 0) { + return new Node(-1, -1); + } + + return nodes.remove(left - 1); + } + +} diff --git a/dydwo0740/baekjoon/19845.java b/dydwo0740/baekjoon/19845.java new file mode 100644 index 0000000..45162ba --- /dev/null +++ b/dydwo0740/baekjoon/19845.java @@ -0,0 +1,82 @@ +import org.w3c.dom.Node; + +import java.io.*; +import java.util.*; + +public class Main { + + static int[] count; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int Q = Integer.parseInt(st.nextToken()); + + int[] seq = new int[N + 1]; + count = new int[N + 1]; + + st = new StringTokenizer(br.readLine()); + + for(int i=1;i<=N;i++){ + seq[i] = Integer.parseInt(st.nextToken()); + count[i] = seq[i]; + } + + Arrays.sort(count); + + for(int i=0;i map = new HashMap<>(); + static Set visited = new HashSet<>(); + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int K = Integer.parseInt(st.nextToken()); + + int[] seq = new int[N + 1]; + + st = new StringTokenizer(br.readLine()); + + for (int i = 1; i <= N; i++) { + seq[i] = Integer.parseInt(st.nextToken()); + } + + for (int i = 0; i < K; i++) { + st = new StringTokenizer(br.readLine()); + + int size = Integer.parseInt(st.nextToken()); + + int[] index = new int[size]; + + for (int j = 0; j < size; j++) { + index[j] = Integer.parseInt(st.nextToken()); + } + + map.put(i + 1, index); + } + + int answer = bfs(seq); + + bw.write(answer+"\n"); + + bw.flush(); + } + + public static int bfs(int[] seq) { + Queue queue = new LinkedList<>(); + + visited.add(getString(seq)); + queue.add(seq); + int cnt = 0; + + while (!queue.isEmpty()) { + Queue temp = new LinkedList<>(queue); + queue.clear(); + while (!temp.isEmpty()) { + int[] cur = temp.poll(); + + if (isAllSame(cur)) { + return cnt; + } + + for(Map.Entry entry : map.entrySet()) { + int[] add = entry.getValue(); + + int[] index = Arrays.copyOf(cur, cur.length); + + for(int i=0;i list = new ArrayList<>(); + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + int start = Integer.parseInt(st.nextToken()); + int end = Integer.parseInt(st.nextToken()); + + list.add(new int[]{start, end}); + } + + list.sort(new Comparator() { + @Override + public int compare(int[] o1, int[] o2) { + if (o1[0] == o2[0]) { + return o1[1] - o2[1]; + } + return o1[0] - o2[0]; + } + }); + + PriorityQueue pq = new PriorityQueue<>(); + + pq.add(list.get(0)[1]); + + int max = 1; + int start = list.get(0)[0]; + int end = list.get(0)[1]; + + for (int i = 1; i < N; i++) { + int[] cur = list.get(i); + + while (!pq.isEmpty() && pq.peek() <= cur[0]) { + pq.poll(); + } + + pq.add(cur[1]); + + if (max < pq.size()) { + start = cur[0]; + end = pq.peek(); + max = pq.size(); + } else if (max == pq.size()) { + if (end == cur[0]) { + end = pq.peek(); + } + } + } + + bw.write(max + "\n"); + bw.write(start + " " + end + "\n"); + + bw.flush(); + } + + +} diff --git a/dydwo0740/baekjoon/20924.java b/dydwo0740/baekjoon/20924.java new file mode 100644 index 0000000..2658cd7 --- /dev/null +++ b/dydwo0740/baekjoon/20924.java @@ -0,0 +1,125 @@ +import java.io.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.StringTokenizer; + +public class Main { + static class Node { + int v; + int dist; + + public Node(int v, int dist) { + this.v = v; + this.dist = dist; + } + } + + static int N; + static int root; + static int ans = Integer.MIN_VALUE; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + // 우선 기가 노드를 탐색하고 기가 노드에서 루트, 기가 노드에서 dfs로 가장 긴 거리 탐색 + + N = Integer.parseInt(st.nextToken()); + + root = Integer.parseInt(st.nextToken()); + + List[] g = new ArrayList[N + 1]; + + for (int i = 0; i <= N; i++) { + g[i] = new ArrayList<>(); + } + + for (int i = 0; i < N - 1; i++) { + st = new StringTokenizer(br.readLine()); + + int v1 = Integer.parseInt(st.nextToken()); + int v2 = Integer.parseInt(st.nextToken()); + int dist = Integer.parseInt(st.nextToken()); + + g[v1].add(new Node(v2, dist)); + g[v2].add(new Node(v1, dist)); + } + + for (int i = 0; i <= N; i++) { + g[i].sort(new Comparator() { + @Override + public int compare(Node o1, Node o2) { + return o1.v - o2.v; + } + }); + } + + boolean[] visited = new boolean[N + 1]; + int start = findGigaNode(g, root, visited); + //System.out.println("start = " + start); + + dfs(g, visited, 0, start); + bw.write(getHeight(root, start, g) + " " + ans + "\n"); + + bw.flush(); + } + + public static int findGigaNode(List[] g, int root, boolean[] visited) { + while (true) { + visited[root] = true; + int count = 0; + int next = 0; + for (int i = 0; i < g[root].size(); i++) { + if (!visited[g[root].get(i).v]) { + next = g[root].get(i).v; + count++; + } + } + //System.out.println("next = " + next); + if (count >= 2) { + return root; + } + + if(count == 0){ + return root; + } + root = next; + } + } + + public static int getHeight(int start, int end, List[] g) { + boolean[] visited = new boolean[N + 1]; + int sum = 0; + while (true) { + if (start == end) { + return sum; + } + + visited[start] = true; + int next = 0; + + for (int i = 0; i < g[start].size(); i++) { + if (!visited[g[start].get(i).v]) { + next = g[start].get(i).v; + sum += g[start].get(i).dist; + break; + } + } + start = next; + } + } + + public static void dfs(List[] g, boolean[] visited, int depth, int cur) { + visited[cur] = true; + ans = Math.max(ans, depth); + for (int i = 0; i < g[cur].size(); i++) { + if (!visited[g[cur].get(i).v]) { + dfs(g, visited, depth + g[cur].get(i).dist, g[cur].get(i).v); + } + } + } + + +} diff --git a/dydwo0740/baekjoon/2140.java b/dydwo0740/baekjoon/2140.java new file mode 100644 index 0000000..93134a8 --- /dev/null +++ b/dydwo0740/baekjoon/2140.java @@ -0,0 +1,69 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static int[] row = {-1, -1, -1, 0, 0, 1, 1, 1}; + static int[] col = {-1, 0, 1, -1, 1, -1, 0, 1}; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + char[][] board = new char[N][N]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + + for (int j = 0; j < N; j++) { + board[i][j] = str.charAt(j); + } + } + + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (Character.isDigit(board[i][j])) { + changeBoard(board, i, j); + } + } + } + int ans = 0; + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + if (board[i][j] == '#' || board[i][j] == '*') { + ans++; + } + } + } + bw.write(ans + "\n"); + bw.flush(); + } + + public static void changeBoard(char[][] board, int x, int y) { + int N = board.length; + int cur = board[x][y] - '0'; + + for (int i = 0; i < 8; i++) { + int nx = x + row[i]; + int ny = y + col[i]; + + if (0 <= nx && nx < N && 0 <= ny && ny < N) { + if (board[nx][ny] == '#' && cur > 0) { + board[nx][ny] = '*'; + cur--; + } else if (board[nx][ny] == '*' && cur != 0) { + cur--; + } else if (board[nx][ny] == '#' && cur == 0) { + board[nx][ny] = '-'; + } + } + } + } + + +} diff --git a/dydwo0740/baekjoon/2171.java b/dydwo0740/baekjoon/2171.java new file mode 100644 index 0000000..d27bfcb --- /dev/null +++ b/dydwo0740/baekjoon/2171.java @@ -0,0 +1,83 @@ + +import java.io.*; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int[] xxx = new int[N]; + int[] yyy = new int[N]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + xxx[i] = Integer.parseInt(st.nextToken()); + yyy[i] = Integer.parseInt(st.nextToken()); + } + + int[] x = Arrays.copyOf(xxx, N); + int[] y = Arrays.copyOf(yyy, N); + + boolean[][] isHere = new boolean[5000][5000]; + int[][] loc = new int[N][2]; + + Arrays.sort(x); + Arrays.sort(y); + + for (int i = 0; i < N; i++) { + int nx = lowerBound(x, xxx[i]); + int ny = lowerBound(y, yyy[i]); + + loc[i][0] = nx; + loc[i][1] = ny; + + bw.write(nx + " " + ny + "\n"); + + isHere[nx][ny] = true; + } + + int ans = 0; + + for(int i=0;i map = new HashMap<>(); + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + + int len = str.length(); + + int[] dp = new int[len]; + + st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + String sub = st.nextToken(); + int weight = Integer.parseInt(st.nextToken()); + + if (sub.length() < weight) { + map.put(sub, weight); + } + } + + if (map.containsKey(String.valueOf(str.charAt(0)))) { + dp[0] = map.get(String.valueOf(str.charAt(0))); + } else{ + dp[0] = 1; + } + + for (int i = 1; i < len; i++) { + for (int j = 0; j <= i; j++) { + String comp = str.substring(j, i + 1); + int value = map.getOrDefault(comp, comp.length()); + + if (j == 0) { + if (value > dp[i]) { + dp[i] = value; + } + continue; + } + + value += dp[j - 1]; + + if (value > dp[i]) { + dp[i] = value; + } + } + } + + + bw.write(dp[len - 1] + "\n"); + + bw.flush(); + } + + +} diff --git a/dydwo0740/baekjoon/2313.java b/dydwo0740/baekjoon/2313.java new file mode 100644 index 0000000..fb8a16e --- /dev/null +++ b/dydwo0740/baekjoon/2313.java @@ -0,0 +1,80 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static List[] sum; + static int[] length; + static int[][] answer; + + static long ans = 0; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + sum = new ArrayList[N]; + + for (int i = 0; i < N; i++) { + sum[i] = new ArrayList<>(); + } + + length = new int[N]; + + answer = new int[N][2]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + int size = Integer.parseInt(st.nextToken()); + length[i] = size; + + st = new StringTokenizer(br.readLine()); + + + int num = Integer.parseInt(st.nextToken()); + sum[i].add(0); + sum[i].add(num); + + for (int j = 1; j < size; j++) { + num = Integer.parseInt(st.nextToken()); + sum[i].add(num + sum[i].get(j)); + } + } + + + + for (int i = 0; i < N; i++) { + int max = Integer.MIN_VALUE; + int left = -1; + int right = -1; + for (int j = 1; j <= length[i]; j++) { + for (int k = j; k <= length[i]; k++) { + if (max < (sum[i].get(k) - sum[i].get(j - 1))) { + left = j; + right = k; + max = sum[i].get(k) - sum[i].get(j - 1); + } else if (max == (sum[i].get(k) - sum[i].get(j - 1)) && (right - left) > (k - j)) { + left = j; + right = k; + } + } + } + + ans += max; + answer[i][0] = left; + answer[i][1] = right; + } + + bw.write(ans+"\n"); + + for (int i = 0; i < N; i++) { + bw.write(answer[i][0] + " " + answer[i][1] + "\n"); + } + + bw.flush(); + } + +} diff --git a/dydwo0740/baekjoon/2370.java b/dydwo0740/baekjoon/2370.java new file mode 100644 index 0000000..bb7c015 --- /dev/null +++ b/dydwo0740/baekjoon/2370.java @@ -0,0 +1,68 @@ +import java.io.*; +import java.util.*; +import java.util.stream.Collectors; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + + int[][] seq = new int[N][2]; + + List list = new ArrayList<>(); + Set visited = new HashSet(); + + for(int i=0;i set = new HashSet<>(); + + for(int i=0;i list = new ArrayList<>(); + List res = new ArrayList<>(); + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + long s = Long.parseLong(st.nextToken()); + long e = Long.parseLong(st.nextToken()); + long cost = Long.parseLong(st.nextToken()); + + list.add(new Bus(s, e, cost)); + } + + list.sort(new Comparator() { + @Override + public int compare(Bus o1, Bus o2) { + if (o1.start == o2.start) { + Long.compare(o1.end, o2.end); + } + return Long.compare(o1.start, o2.start); + } + }); + + Bus bus = list.get(0); + + long start = bus.start; + long end = bus.end; + long cost = bus.cost; + boolean flag = false; + + if (N == 1) { + res.add(new Bus(start, end, cost)); + } + + for (int i = 1; i < N; i++) { + Bus cur = list.get(i); + + if (i == N - 1) { + flag = true; + } + + if (cur.start <= end) { + end = Math.max(end, cur.end); + cost = Math.min(cost, cur.cost); + + if (flag) { + res.add(new Bus(start, end, cost)); + } + + continue; + } + + res.add(new Bus(start, end, cost)); + start = cur.start; + end = cur.end; + cost = cur.cost; + + if (flag) { + res.add(new Bus(start, end, cost)); + } + } + + res.sort(new Comparator() { + @Override + public int compare(Bus o1, Bus o2) { + return Long.compare(o1.start, o2.start); + } + }); + + bw.write(res.size() + "\n"); + + for (Bus b : res) { + bw.write(b.start + " " + b.end + " " + b.cost + "\n"); + } + + bw.flush(); + } + + +} diff --git a/dydwo0740/baekjoon/23742.java b/dydwo0740/baekjoon/23742.java new file mode 100644 index 0000000..38e72f2 --- /dev/null +++ b/dydwo0740/baekjoon/23742.java @@ -0,0 +1,54 @@ + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +public class Main { + static Map map = new HashMap<>(); + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int[] seq = new int[N]; + + long sum = 0; + + for(int i=0;i map = new HashMap<>(); + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int M = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int[] seq = new int[N]; + int[] sorted = new int[N]; + + boolean flag = false; + + for(int i=0;i=0;i--) { + + if(seq[i] == sorted[i]) { + continue; + } + + int index = map.get(sorted[i]); + + map.put(seq[i], index); + map.put(sorted[i], i); + + int temp = seq[i]; + seq[i] = seq[index]; + seq[index] = temp; + + if(++change == M) { + bw.write(temp + " " + seq[i] + "\n"); + flag = !flag; + break; + } + + } + + if(!flag) { + bw.write(-1+"\n"); + } + + bw.flush(); + } +} diff --git a/dydwo0740/baekjoon/2513.java b/dydwo0740/baekjoon/2513.java new file mode 100644 index 0000000..a80f7c6 --- /dev/null +++ b/dydwo0740/baekjoon/2513.java @@ -0,0 +1,84 @@ +import java.io.*; +import java.util.*; +import java.util.stream.*; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + int K = Integer.parseInt(st.nextToken()); + int S = Integer.parseInt(st.nextToken()); + + PriorityQueue left = new PriorityQueue<>((o1, o2) -> o1[0] - o2[0]); + PriorityQueue right = new PriorityQueue<>((o1, o2) -> o2[0] - o1[0]); + + for(int i=0;i> info = new HashMap<>(); + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + S = Integer.parseInt(st.nextToken()); + + char[] count = new char[27]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + String str = st.nextToken(); + for (int j = 0; j < M; j++) { + if (!info.containsKey(str.charAt(j))) { + List list = new ArrayList<>(); + list.add(new Location(i, j)); + info.put(str.charAt(j), list); + continue; + } + List list = info.get(str.charAt(j)); + list.add(new Location(i, j)); + } + } + + + st = new StringTokenizer(br.readLine()); + + id = st.nextToken(); + + for (int i = 0; i < id.length(); i++) { + count[id.charAt(i) - 'a']++; + } + + for (int i = 0; i < 27; i++) { + if (count[i] > 0) { + if(!info.containsKey((char) ('a' + i))){ + ans = 0; + continue; + } + ans = Math.min(ans, info.get((char) ('a' + i)).size() / count[i]); + } + } + + String move = ""; + Location start = new Location(0, 0); + + for (int i = 0; i < ans; i++) { + for (int j = 0; j < id.length(); j++) { + int[] s = new int[2]; + int[] e = new int[2]; + Location end = info.get(id.charAt(j)).get(0); + move += (bfs(new int[]{start.x, start.y}, new int[]{end.x, end.y}) + "P"); + start = new Location(end.x, end.y); + info.get(id.charAt(j)).remove(0); + } + } + + move += bfs(new int[]{start.x, start.y}, new int[]{N-1, M-1}); + bw.write(ans + " " + move.length() + "\n"); + bw.write(move + "\n"); + bw.flush(); + } + + + public static String bfs(int[] s, int[] e) { + Queue queue = new LinkedList<>(); + queue.add(new Location(s[0], s[1], "")); + boolean[][] visited = new boolean[N][M]; + visited[s[0]][s[1]] = true; + + while (!queue.isEmpty()) { + Location cur = queue.poll(); + + if (cur.x == e[0] && cur.y == e[1]) { + return cur.move; + } + + for (int i = 0; i < 4; i++) { + int nx = cur.x + row[i]; + int ny = cur.y + col[i]; + if (0 <= nx && nx < N && 0 <= ny && ny < M) { + if (!visited[nx][ny]) { + visited[nx][ny] = true; + queue.add(new Location(nx, ny, cur.move + String.valueOf(alpha[i]))); + } + } + } + } + + return null; + } +} diff --git a/dydwo0740/baekjoon/25391.java b/dydwo0740/baekjoon/25391.java new file mode 100644 index 0000000..a3cd0c2 --- /dev/null +++ b/dydwo0740/baekjoon/25391.java @@ -0,0 +1,66 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Point{ + int honor; + int referee; + + public Point(int honor, int referee) { + this.honor = honor; + this.referee = referee; + } + } + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + int M = Integer.parseInt(st.nextToken()); + + int K = Integer.parseInt(st.nextToken()); + + PriorityQueue pq = new PriorityQueue<>(new Comparator() { + @Override + public int compare(Point o1, Point o2) { + if (o2.referee == o1.referee) { + return o2.honor - o1.honor; + } + return o2.referee - o1.referee; + } + }); + + for(int i=0;i honor = new PriorityQueue<>(Comparator.reverseOrder()); + + while (!pq.isEmpty()) { + honor.add(pq.poll().honor); + } + + for(int i=0;i map = new HashMap<>(); + + st = new StringTokenizer(br.readLine()); + + for(int i=0;i list = new ArrayList<>(); + + for (Map.Entry entry : map.entrySet()) { + if(entry.getValue() > 1){ + list.add(entry.getKey()); + list.add(entry.getKey()); + } else{ + list.add(entry.getKey()); + } + } + + combination(new int[2], new boolean[N], list.stream() + .mapToInt(Integer::intValue) + .toArray(), 0, 0); + bw.write(ans+"\n"); + bw.flush(); + } + + public static void combination(int[] output, boolean[] visited, int[] seq, int depth, int start){ + if(output.length == depth){ + ans = Math.max(ans, getValue(output[0] * output[1])); + return; + } + + for(int i = start;i 0){ + ans += (num % 10); + num /= 10; + } + + return ans; + } + + +} diff --git a/dydwo0740/baekjoon/2655.java b/dydwo0740/baekjoon/2655.java new file mode 100644 index 0000000..fd12174 --- /dev/null +++ b/dydwo0740/baekjoon/2655.java @@ -0,0 +1,83 @@ +import java.io.*; +import java.util.*; + +public class Main { + static class Node { + int idx; + int size; + int h; + int w; + + public Node(int idx, int size, int h, int w) { + this.idx = idx; + this.size = size; + this.h = h; + this.w = w; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + List seq = new ArrayList<>(); + + int N = Integer.parseInt(st.nextToken()); + int[] height = new int[N + 1]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + int size = Integer.parseInt(st.nextToken()); + int h = Integer.parseInt(st.nextToken()); + int w = Integer.parseInt(st.nextToken()); + + seq.add(new Node(i + 1, size, h, w)); + height[i + 1] = h; + } + + seq.sort(new Comparator() { + @Override + public int compare(Node o1, Node o2) { + return o1.size - o2.size; + } + }); + + + // LIS + + int[] dp = new int[N]; + int max = 0; + + for (int i = 0; i < N; i++) { + dp[i] = seq.get(i).h; + for (int j = 0; j < i; j++) { + if (seq.get(i).w > seq.get(j).w) { + dp[i] = Math.max(dp[i], dp[j] + seq.get(i).h); + } + } + + max = Math.max(max, dp[i]); + } + + + Stack stack = new Stack<>(); + + for (int i = N - 1; i >= 0; i--) { + if (dp[i] == max) { + stack.push(seq.get(i).idx); + max -= seq.get(i).h; + } + } + + bw.write(stack.size()+"\n"); + while (!stack.isEmpty()) { + bw.write(stack.pop() + "\n"); + } + + + bw.flush(); + } + + +} diff --git a/dydwo0740/baekjoon/2746.java b/dydwo0740/baekjoon/2746.java new file mode 100644 index 0000000..1efcf7b --- /dev/null +++ b/dydwo0740/baekjoon/2746.java @@ -0,0 +1,95 @@ +import java.io.*; +import java.util.*; +import java.util.stream.Collectors; + +public class Main { + static Map map; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + long[] seq = new long[N]; + + st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < N; i++) { + seq[i] = Long.parseLong(st.nextToken()); + } + + Arrays.sort(seq); + + long cnt = 0; + + // 어차피 맨뒤 or 그 앞 or 그 앞앞 즉, N, N-1, N-2 가 가장 큰 것이 됩니다 + + // N 에 대해서 + long total = 0; + map = new HashMap<>(); + + for (int i = 0; i < N - 1; i++) { + total += seq[i]; + map.put(seq[i], map.getOrDefault(seq[i], 0L) + 1); + } + + total -= seq[N - 1]; + + for (int i = 0; i < N - 1; i++) { + long other = total - seq[i]; + + if (other <= 0) { + continue; + } + + if (other != seq[i]) { + if (map.containsKey(seq[i]) && map.containsKey(other)) { + cnt += map.get(other) * map.get(seq[i]); + map.remove(seq[i]); + map.remove(other); + } + } else { + if (map.containsKey(other) && map.get(other) > 1L) { + cnt += getComb(map.get(seq[i])); + map.remove(seq[i]); + } + } + } + + total = 0; + map.clear(); + + for (int i = 0; i < N - 2; i++) { + total += seq[i]; + map.put(seq[i], map.getOrDefault(seq[i], 0L) + 1); + } + + total -= seq[N - 2]; + cnt += map.getOrDefault(total, 0L); + + total = 0; + map.clear(); + + for (int i = 0; i < N - 3; i++) { + total += seq[i]; + } + + total -= seq[N - 3]; + + if(total == 0) { + cnt++; + } + + + bw.write(cnt + "\n"); + + bw.flush(); + } + + public static long getComb(long num) { + + return num * (num - 1) / 2; + } +} diff --git a/dydwo0740/baekjoon/27924.java b/dydwo0740/baekjoon/27924.java new file mode 100644 index 0000000..d0cd063 --- /dev/null +++ b/dydwo0740/baekjoon/27924.java @@ -0,0 +1,86 @@ +import java.io.*; +import java.util.*; + +public class Main { + static int N; + static List[] g; + static Set leafNodes; + static int[][] dist; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + g = new ArrayList[N + 1]; + leafNodes = new HashSet<>(); + dist = new int[3][N + 1]; + + for(int i=0;i<3;i++) { + Arrays.fill(dist[i], -1); + } + + for(int i=1;i<=N;i++) { + g[i] = new ArrayList<>(); + } + + for(int i=0;i iter = leafNodes.iterator(); + + boolean flag = true; + + while(iter.hasNext()) { + int next = iter.next(); + + if(dist[0][next] < dist[1][next] && dist[0][next] < dist[2][next]) { + flag = false; + break; + } + } + + if(flag) { + bw.write("NO"); + } else { + bw.write("YES"); + } + + bw.flush(); + } + + public static void initialize(int from, int to, int depth) { + dist[from][to] = depth; + for(int i = 0;i answer) { + answer = sum; + ans = move; + } + + int type = -1; + int max = -1; + + if (sX - 1 >= 1 && rowSum(sY, eY, sX - 1) >= 0) { + if (max < rowSum(sY, eY, sX - 1)) { + type = 0; + max = rowSum(sY, eY, sX - 1); + } + } + + if (eX + 1 <= N && rowSum(sY, eY, eX + 1) >= 0) { + if (max < rowSum(sY, eY, eX + 1)) { + type = 1; + max = rowSum(sY, eY, eX + 1); + } + } + + if (sY - 1 >= 1 && colSum(sX, eX, sY - 1) >= 0) { + if (max < colSum(sX, eX, sY - 1)) { + type = 2; + max = colSum(sX, eX, sY - 1); + } + } + + if (eY + 1 <= N && colSum(sX, eX, eY + 1) >= 0) { + if (max < colSum(sX, eX, eY + 1)) { + type = 3; + max = colSum(sX, eX, eY + 1); + } + } + + + if (type == -1) { + return; + } + + if (type == 0) { + dfs(sX - 1, sY, eX, eY, sum + rowSum(sY, eY, sX - 1), move + "U"); + } else if (type == 1) { + dfs(sX, sY, eX + 1, eY, sum + rowSum(sY, eY, eX + 1), move + "D"); + } else if (type == 2) { + dfs(sX, sY - 1, eX, eY, sum + colSum(sX, eX, sY - 1), move + "L"); + } else { + dfs(sX, sY, eX, eY + 1, sum + colSum(sX, eX, eY + 1), move + "R"); + } + + + } + + public static int rowSum(int start, int end, int row) { + int sum = 0; + while (start <= end) { + sum += board[row][start++]; + } + + return sum; + } + + public static int colSum(int start, int end, int col) { + int sum = 0; + while (start <= end) { + sum += board[start++][col]; + } + + return sum; + } + + +} diff --git a/dydwo0740/baekjoon/28017.java b/dydwo0740/baekjoon/28017.java new file mode 100644 index 0000000..8b2c6ae --- /dev/null +++ b/dydwo0740/baekjoon/28017.java @@ -0,0 +1,40 @@ +import java.io.*; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + int M = Integer.parseInt(st.nextToken()); + int[][] dp = new int[N + 1][M]; + + + for (int i = 1; i <= N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < M; j++) { + int min = Integer.MAX_VALUE; + for (int k = 0; k < M; k++) { + if (j == k) { + continue; + } + min = Math.min(min, dp[i - 1][k]); + } + int num = Integer.parseInt(st.nextToken()); + dp[i][j] = min + num; + } + + } + int ans = Integer.MAX_VALUE; + for (int i = 0; i < M; i++) { + ans = Math.min(dp[N][i], ans); + } + bw.write(ans + "\n"); + bw.flush(); + } + + +} diff --git a/dydwo0740/baekjoon/28270.java b/dydwo0740/baekjoon/28270.java new file mode 100644 index 0000000..8d6bcf9 --- /dev/null +++ b/dydwo0740/baekjoon/28270.java @@ -0,0 +1,67 @@ + +import java.io.*; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + // 형제 노드란 부모가 같습니다. 선형적으로 선정 + // 형제 노드! + + int N = Integer.parseInt(st.nextToken()); + + int[] seq = new int[N]; + int[] count = new int[1000001]; + int[] answer = new int[N]; + + Arrays.fill(count, 1); + + int max = 1; + + st = new StringTokenizer(br.readLine()); + + for(int i=0;i= N ? (i + start) % N : i + start; + if (!visited[idx]) { + visited[idx] = true; + int left = idx - 1; + int right = idx + 1; + if (idx == 0) { + left = N - 1; + } else if (idx == N - 1) { + right = 0; + } + + if (empty[left] == -1 && empty[right] == -1) { + empty[idx] = 1; + ans++; + } else if (empty[left] == 1 || empty[right] == 1) { + + } else { + empty[idx] = 1; + ans++; + } + + //bw.write(i + " " + ans+" " + empty[left] + " " + empty[right] + "\n"); + } + } + + bw.write(ans + "\n"); + + bw.flush(); + } + + +} diff --git a/dydwo0740/baekjoon/28359.java b/dydwo0740/baekjoon/28359.java new file mode 100644 index 0000000..4eb7d6d --- /dev/null +++ b/dydwo0740/baekjoon/28359.java @@ -0,0 +1,77 @@ +import java.io.*; +import java.util.*; +import java.util.stream.*; + +public class Main { + static Map map = new HashMap<>(); + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + List list = new ArrayList<>(); + List answer = new ArrayList<>(); + st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < N; i++) { + int num = Integer.parseInt(st.nextToken()); + + if (map.containsKey(num)) { + map.put(num, map.get(num) + 1); + continue; + } + + map.put(num, 1); + list.add(num); + } + + list.sort(Comparator.naturalOrder()); + answer.addAll(list); + + int max = 0; + for (int i = 0; i < list.size(); i++) { + max += (list.get(i) * map.get(list.get(i))); + } + + int desc = 0; + for(int i=0;i origin = new HashSet<>(); + + for (int i = 0; i < N; i++) { + seq[i] = Integer.parseInt(st.nextToken()); + origin.add(seq[i]); + } + + int[] diff = new int[N - 1]; + + for (int i = 1; i < N; i++) { + diff[i - 1] = seq[i] - seq[0]; + } + + List list = new ArrayList<>(); + + for (int i = 0; i < N - 1; i++) { + int differ = diff[i]; + Set set = new HashSet<>(origin); + boolean flag = true; + + for (int j = 0; j < N - 1; j++) { + if(!set.contains(seq[j])){ + if (set.contains(seq[j] + differ)) { + set.remove(seq[j] + differ); + } + continue; + } + + if (!set.contains(seq[j] + differ)) { + flag = false; + break; + } + + set.remove(seq[j]); + set.remove(seq[j] + differ); + } + + if (flag && set.isEmpty()) { + list.add(differ); + } + } + + if (list.size() == 0) { + bw.write(0+"\n"); + bw.flush(); + return; + } + + bw.write(list.size() + "\n"); + + for (int i = 0; i < list.size(); i++) { + bw.write(list.get(i) + " "); + } + + bw.flush(); + } + + +} diff --git a/dydwo0740/baekjoon/30108.java b/dydwo0740/baekjoon/30108.java new file mode 100644 index 0000000..2519f3b --- /dev/null +++ b/dydwo0740/baekjoon/30108.java @@ -0,0 +1,37 @@ +import java.awt.*; +import java.io.*; +import java.util.*; + +public class Main { + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + st = new StringTokenizer(br.readLine()); + + Integer[] seq = new Integer[N]; + + for(int i=0;i seqA = new PriorityQueue<>((o1, o2) -> { + if (o1.value == o2.value) { + return o1.index - o2.index; + } + + return o2.value - o1.value; + }); + + PriorityQueue seqB = new PriorityQueue<>((o1, o2) -> { + if (o1.value == o2.value) { + return o1.index - o2.index; + } + + return o2.value - o1.value; + }); + + int N = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < N; i++) { + int value = Integer.parseInt(st.nextToken()); + seqA.add(new Node(value, i)); + } + + st = new StringTokenizer(br.readLine()); + + int M = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < M; i++) { + int value = Integer.parseInt(st.nextToken()); + seqB.add(new Node(value, i)); + } + + int prevA = -1; + int prevB = -1; + + List list = new ArrayList<>(); + + while (!seqB.isEmpty() && !seqA.isEmpty()) { + + boolean flag = false; + + if(seqA.peek().index < prevA) { + flag = true; + seqA.poll(); + } + + if(seqB.peek().index < prevB) { + flag = true; + seqB.poll(); + } + + if(flag) { + continue; + } + + if (seqA.peek().value == seqB.peek().value) { + prevA = seqA.peek().index; + prevB = seqB.peek().index; + list.add(seqA.peek().value); + seqA.poll(); + seqB.poll(); + } else if (seqA.peek().value > seqB.peek().value) { + seqA.poll(); + } else { + seqB.poll(); + } + } + + bw.write(list.size() + "\n"); + + for(int i=0;i> row = new HashMap<>(); + static Map> col = new HashMap<>(); + static int N; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + int M = Integer.parseInt(st.nextToken()); + + // 초기화 + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + int x = Integer.parseInt(st.nextToken()); + int y = Integer.parseInt(st.nextToken()); + + if (!row.containsKey(x)) { + ArrayList list = new ArrayList<>(); + list.add(y); + row.put(x, list); + } else { + List list = row.get(x); + list.add(y); + } + + if (!col.containsKey(y)) { + ArrayList list = new ArrayList<>(); + list.add(x); + col.put(y, list); + } else { + List list = col.get(y); + list.add(x); + } + } + + st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + + int x = 0; + int y = 0; + + for (Map.Entry> entry : row.entrySet()) { + List list = entry.getValue(); + list.sort(Comparator.naturalOrder()); + } + + for (Map.Entry> entry : col.entrySet()) { + List list = entry.getValue(); + list.sort(Comparator.naturalOrder()); + } + + for (int i = 0; i < M; i++) { + char ch = str.charAt(i); + + if (ch == 'U') { + List list = row.get(x); + int value = binarySearch(y, list); + y = list.get(value + 1); + } else if (ch == 'D') { + List list = row.get(x); + int value = binarySearch(y, list); + y = list.get(value - 1); + } else if (ch == 'R') { + List list = col.get(y); + int value = binarySearch(x, list); + x = list.get(value + 1); + } else { + List list = col.get(y); + int value = binarySearch(x, list); + x = list.get(value - 1); + } + + //System.out.println("x + \" \" + y = " + x + " " + y); + } + + bw.write(x + " " + y + "\n"); + + + bw.flush(); + } + + public static int binarySearch(int target, List list) { + int start = 0; + int end = list.size() - 1; + + while (start <= end) { + int mid = (start + end) / 2; + + if (list.get(mid) < target) { + start = mid + 1; + } else if (list.get(mid) == target) { + return mid; + } else { + end = mid - 1; + } + } + + return 0; + } +} diff --git a/dydwo0740/baekjoon/3107.java b/dydwo0740/baekjoon/3107.java new file mode 100644 index 0000000..bae1d39 --- /dev/null +++ b/dydwo0740/baekjoon/3107.java @@ -0,0 +1,78 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + + String[] s = str.split(":"); + + if(s.length == 0) { + String ans = ""; + for(int i=0;i<7;i++) { + ans += "0".repeat(4) + ":"; + } + ans += "0".repeat(4); + bw.write(ans+"\n"); + bw.flush(); + return; + } + + if(s.length == 8) { + for(int i=0;i L 은 왼쪽부터, D는 오른쪽부터 + + List answer = new ArrayList<>(); + + int L = Integer.parseInt(st.nextToken()); + + int T = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + int cur = Integer.parseInt(st.nextToken()); + String s = st.nextToken(); + char head = s.charAt(0); + + + if (head == 'L') { + int total = T + L - cur; + if (total < L) { + answer.add(L - total); + } else { + if ((total / L) % 2 == 0) { + answer.add(L - total % L); + } else { + answer.add(total % L); + } + } + } else { + int total = T + cur; + if (total < L) { + answer.add(total); + } else { + if ((total / L) % 2 == 0) { + answer.add(total % L); + } else { + answer.add(L - total % L); + } + } + } + } + + + answer.sort(Comparator.naturalOrder()); + + for(int i=0;i one2) { + bw.write("Case " + test + ": " + -1 + "\n"); + continue; + } + + int add = 0; + + // before 에 1이 더 많다.. + + Map map = new HashMap<>(); + + for(int i=0;i zero2) { + zero1--; + add++; + map.put(i, '1'); + } + } + + int restOne = one2 - one1; + int restZero = zero2 - zero1; + + String comp = ""; + + + + for (int i = 0; i < before.length(); i++) { + if (before.charAt(i) == '?') { + if (after.charAt(i) == '0' && restZero > 0) { + restZero--; + comp += String.valueOf('0'); + } else if (after.charAt(i) == '1' && restOne > 0) { + restOne--; + comp += String.valueOf('1'); + } else { + if (restZero > 0) { + comp += String.valueOf('0'); + } else { + comp += String.valueOf('1'); + } + } + add++; + } else { + if(map.containsKey(i)) { + comp += String.valueOf(map.get(i)); + continue; + } + comp += String.valueOf(before.charAt(i)); + } + } + + + int change = 0; + for (int i = 0; i < comp.length(); i++) { + if (comp.charAt(i) != after.charAt(i)) { + change++; + } + } + + bw.write("Case " + test + ": " + (add+ (change / 2)) + "\n"); + + } + + bw.flush(); + + } + +} diff --git a/dydwo0740/baekjoon/4650.java b/dydwo0740/baekjoon/4650.java new file mode 100644 index 0000000..4840e65 --- /dev/null +++ b/dydwo0740/baekjoon/4650.java @@ -0,0 +1,111 @@ +import org.w3c.dom.Node; + +import java.io.*; +import java.util.*; + +public class Main { + static int N; + static int[] parent; + static class Node{ + int v1; + int v2; + int dist; + + public Node(int v1, int v2, int dist) { + this.v1 = v1; + this.v2 = v2; + this.dist = dist; + } + } + + static int ans = Integer.MAX_VALUE; + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st; + while(true) { + st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + if (N == 0) { + break; + } + + + PriorityQueue pq = new PriorityQueue<>(new Comparator() { + @Override + public int compare(Node o1, Node o2) { + return o1.dist - o2.dist; + } + }); + + parent = new int[N + 1]; + + for (int i = 1; i <= N; i++) { + parent[i] = i; + } + + for (int i = 0; i < N - 1; i++) { + st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + + int cur = str.charAt(0) - 'A' + 1; + + int M = Integer.parseInt(st.nextToken()); + + for (int j = 0; j < M; j++) { + str = st.nextToken(); + + int next = str.charAt(0) - 'A' + 1; + int dist = Integer.parseInt(st.nextToken()); + + pq.add(new Node(cur, next, dist)); + + } + } + int sum = 0; + while (!pq.isEmpty()) { + Node node = pq.poll(); + sum += union(node.v1, node.v2, node.dist); + } + + bw.write(sum+"\n"); + + } + + + bw.flush(); + } + + public static int getParent(int x) { + if (parent[x] == x) { + return x; + } + + return parent[x] = getParent(parent[x]); + } + + public static int union(int x, int y, int dist) { + x = getParent(x); + y = getParent(y); + + if(x == y){ + return 0; + } + + if(x < y){ + parent[y] = x; + } else { + parent[x] = y; + } + + return dist; + } + + + +} diff --git a/dydwo0740/baekjoon/4920.java b/dydwo0740/baekjoon/4920.java new file mode 100644 index 0000000..c7a1d2a --- /dev/null +++ b/dydwo0740/baekjoon/4920.java @@ -0,0 +1,95 @@ +import org.w3c.dom.Node; + +import java.io.*; +import java.util.*; + +public class Main { + + + static int[][] row = {{0, 0, 0}, {0, 1, 0}, {0, 0, 1}, {0, 0, 1}, {0, 1, 0}}; + static int[][] col = {{1, 1, 1}, {1, 0, 1}, {1, 1, 0}, {1, 1, -1}, {1, 0, -1}}; + + static int[][] board; + static int N; + static int max; + static int test = 1; + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st; + + while (true) { + st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + if (N == 0) { + break; + } + + board = new int[N][N]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < N; j++) { + board[i][j] = Integer.parseInt(st.nextToken()); + } + } + + max = Integer.MIN_VALUE; + + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + solve(i, j); + } + } + bw.write(test++ + ". " + max + "\n"); + } + + bw.flush(); + } + + public static void solve(int x, int y) { + for (int i = 0; i < row.length; i++) { + int type = 0; + while (type++ < 4) { + int sum = board[x][y]; + boolean flag = false; + rotate(i); + int nx = x; + int ny = y; + for (int j = 0; j < row[i].length; j++) { + nx += row[i][j]; + ny += col[i][j]; + if (0 <= nx && nx < N && 0 <= ny && ny < N) { + sum += board[nx][ny]; + } else { + flag = true; + break; + } + } + + if (flag) { + continue; + } + if (max < sum) { + max = sum; + } + } + + + } + } + + public static void rotate(int index) { + for (int i = 0; i < row[index].length; i++) { + int tempRow = row[index][i]; + int tempCol = col[index][i]; + + row[index][i] = tempCol; + col[index][i] = -tempRow; + } + } +} diff --git a/dydwo0740/baekjoon/5502.java b/dydwo0740/baekjoon/5502.java new file mode 100644 index 0000000..12d53ca --- /dev/null +++ b/dydwo0740/baekjoon/5502.java @@ -0,0 +1,51 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static class Node{ + String str; + int cnt; + + public Node(String str, int cnt) { + this.str = str; + this.cnt = cnt; + } + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + StringBuilder sb = new StringBuilder(); + + sb.append(st.nextToken()); + + StringBuilder reverse = new StringBuilder(sb).reverse(); + + int[][] dp = new int[N + 1][N + 1]; + + for (int i = 1; i <= N; i++) { + for (int j = 1; j <= N; j++) { + if (sb.charAt(i - 1) == reverse.charAt(j - 1)) { + dp[i][j] = dp[i-1][j-1] + 1; + } else{ + dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); + } + } + } + + + bw.write(N - dp[N][N]+"\n"); + + bw.flush(); + } + + + +} diff --git a/dydwo0740/baekjoon/5547.java b/dydwo0740/baekjoon/5547.java new file mode 100644 index 0000000..f23d60d --- /dev/null +++ b/dydwo0740/baekjoon/5547.java @@ -0,0 +1,159 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static int[] rowOdd = {0, 1, 1, 1, 0, -1}; + static int[] colOdd = {-1, -1, 0, 1, 1, 0}; + static int[] rowEven = {-1, 0, 1, 0, -1, -1}; + static int[] colEven = {-1, -1, 0, 1, 1, 0}; + static int N; + static int M; + static List list; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + M = Integer.parseInt(st.nextToken()); + + N = Integer.parseInt(st.nextToken()); + + int[][] board = new int[N + 1][M + 1]; + + for (int i = 1; i <= N; i++) { + st = new StringTokenizer(br.readLine()); + + for (int j = 1; j <= M; j++) { + board[i][j] = Integer.parseInt(st.nextToken()); + } + } + + int ans = 0; + int minus = 0; + + boolean[][] visited = new boolean[N + 1][M + 1]; + + for(int i=1;i<=N;i++){ + for(int j=1;j<=M;j++){ + if(board[i][j] == 1){ + ans += getCoverEdge(board, i, j); + } else{ + list = new ArrayList<>(); + //System.out.println("i + \" \" + j = " + i + " " + j); + if (bfs(i, j, board) && !visited[i][j]) { + //bw.write(i + " " + j + " 입니다.\n"); + for (int k = 0; k < list.size(); k++) { + int[] index = list.get(k); + visited[index[0]][index[1]] = true; + minus += (6 - getCoverEdge(board, index[0], index[1])); + } + } + } + } + } + + + bw.write((ans - minus) + "\n"); + + bw.flush(); + + } + + public static int[] changeIndex(int x, int y) { + return new int[]{y, x}; + } + + public static int getCoverEdge(int[][] board, int x, int y) { + int[] index = changeIndex(x, y); + + x = index[0]; + y = index[1]; + + int cnt = 0; + + if(y % 2==0){ + for (int i = 0; i < 6; i++) { + int nx = x + rowEven[i]; + int ny = y + colEven[i]; + + index = changeIndex(nx, ny); + + if (1 <= index[0] && index[0] <= N && 1 <= index[1] && index[1] <= M) { + if (board[index[0]][index[1]] == 0) { + cnt++; + } + } else{ + cnt++; + } + } + + return cnt; + } + + for (int i = 0; i < 6; i++) { + int nx = x + rowOdd[i]; + int ny = y + colOdd[i]; + + index = changeIndex(nx, ny); + + if (1 <= index[0] && index[0] <= N && 1 <= index[1] && index[1] <= M) { + if (board[index[0]][index[1]] == 0) { + cnt++; + } + } else{ + cnt++; + } + } + + return cnt; + } + + public static boolean bfs(int x, int y, int[][] board) { + Queue queue = new LinkedList<>(); + boolean[][] visited = new boolean[N + 1][M + 1]; + + list.add(new int[]{x, y}); + visited[x][y] = true; + queue.add(new int[]{x, y}); + + while (!queue.isEmpty()) { + int[] cur = queue.poll(); + + if (cur[0] == 1 || cur[0] == N || cur[1] == 1 || cur[1] == M) { + return false; + } + + int[] index = changeIndex(cur[0], cur[1]); + + for(int i=0;i<6;i++){ + if(index[1] % 2 == 0){ + int nx = index[0] + rowEven[i]; + int ny = index[1] + colEven[i]; + + int[] next = changeIndex(nx, ny); + + if (!visited[next[0]][next[1]] && board[next[0]][next[1]] == 0) { + list.add(new int[]{next[0], next[1]}); + queue.add(new int[]{next[0], next[1]}); + visited[next[0]][next[1]] = true; + } + } else{ + int nx = index[0] + rowOdd[i]; + int ny = index[1] + colOdd[i]; + + int[] next = changeIndex(nx, ny); + + if (!visited[next[0]][next[1]] && board[next[0]][next[1]] == 0) { + list.add(new int[]{next[0], next[1]}); + queue.add(new int[]{next[0], next[1]}); + visited[next[0]][next[1]] = true; + } + } + } + } + + return true; + } +} diff --git a/dydwo0740/baekjoon/5931.java b/dydwo0740/baekjoon/5931.java new file mode 100644 index 0000000..8fd6d33 --- /dev/null +++ b/dydwo0740/baekjoon/5931.java @@ -0,0 +1,86 @@ +import java.io.*; +import java.util.*; + +public class Main { + static int[] row = {1, -1, 0, 0}; + static int[] col = {0, 0, 1, -1}; + static int N; + static int M; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + List partA = new ArrayList<>(); + List partB = new ArrayList<>(); + + char[][] board = new char[N][M]; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + String str = st.nextToken(); + for (int j = 0; j < M; j++) { + board[i][j] = str.charAt(j); + } + } + + boolean[][] visited = new boolean[N][M]; + boolean flag = true; + + for(int i=0;i part) { + Queue queue = new LinkedList<>(); + visited[x][y] = true; + queue.add(new int[]{x, y}); + + part.add(new int[]{x, y}); + + while (!queue.isEmpty()) { + int[] cur = queue.poll(); + + for (int i = 0; i < 4; i++) { + int nx = cur[0] + row[i]; + int ny = cur[1] + col[i]; + + if (0 <= nx && nx < N && 0 <= ny && ny < M) { + if (!visited[nx][ny] && board[nx][ny] == 'X') { + part.add(new int[]{nx, ny}); + queue.add(new int[]{nx, ny}); + visited[nx][ny] = true; + } + } + } + } + } +} diff --git a/dydwo0740/baekjoon/7983.java b/dydwo0740/baekjoon/7983.java new file mode 100644 index 0000000..6fabc40 --- /dev/null +++ b/dydwo0740/baekjoon/7983.java @@ -0,0 +1,48 @@ +import java.io.*; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + PriorityQueue pq = new PriorityQueue<>(new Comparator() { + @Override + public int compare(int[] o1, int[] o2) { + return o2[1] - o1[1]; + } + }); + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + int d = Integer.parseInt(st.nextToken()); + int t = Integer.parseInt(st.nextToken()); + + pq.add(new int[]{d, t}); + } + + int[] cur = pq.poll(); + + int std = cur[1] - cur[0]; + + while (!pq.isEmpty()) { + cur = pq.poll(); + + if (std < cur[1]) { + std -= cur[0]; + } else{ + std = cur[1] - cur[0]; + } + } + + bw.write(std+"\n"); + + bw.flush(); + } + +} diff --git a/dydwo0740/baekjoon/9011.java b/dydwo0740/baekjoon/9011.java new file mode 100644 index 0000000..2d32730 --- /dev/null +++ b/dydwo0740/baekjoon/9011.java @@ -0,0 +1,64 @@ +package swexperttest; + +import java.io.*; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int T = Integer.parseInt(st.nextToken()); + + for(int test = 1;test<=T;test++) { + st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + st = new StringTokenizer(br.readLine()); + + int[] seq = new int[N]; + + for(int i=0;i list = new ArrayList<>(); + + for(int i=N;i>=1;i--) { + list.add(i); + } + + int index = N - 1; + int[] answer = new int[N]; + boolean flag = false; + for(int i=N-1;i>=0;i--) { + int diff = index - seq[i]; + + if(diff < 0) { + flag = true; + break; + } + + index--; + answer[i] = list.remove(diff); + } + + if(flag) { + bw.write("IMPOSSIBLE\n"); + } else { + for(int i=0;i[] g; + static int[] prev; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int T = Integer.parseInt(st.nextToken()); + + for (int test = 1; test <= T; test++) { + st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); + + M = Integer.parseInt(st.nextToken()); + + g = new ArrayList[M]; + + + for(int i=0;i(); + } + + prev = new int[M]; + Arrays.fill(prev, -1); + + for(int i=0;i stack = new Stack<>(); + stack.push(M - 1); + for (int i = (M-1); i > 0;) { + stack.push(i = prev[i]); + } + + if (dist[M-1] == Integer.MAX_VALUE) { + bw.write("Case #" + test + ": " + -1 + "\n"); + continue; + } + + bw.write("Case #" + test + ":"); + while(!stack.empty()) { + bw.write(" " + stack.pop()); + } + bw.write("\n"); + + + + } + + + bw.flush(); + } + + public static int[] dijkstra() { + int[] dist = new int[M]; + Arrays.fill(dist, Integer.MAX_VALUE); + PriorityQueue pq = new PriorityQueue<>(new Comparator() { + @Override + public int compare(Node o1, Node o2) { + return o1.cost - o2.cost; + } + }); + pq.add(new Node(0, 0)); + dist[0] = 0; + + while (!pq.isEmpty()) { + Node cur = pq.poll(); + + if (cur.cost > dist[cur.v]) { + continue; + } + + for (int i = 0; i < g[cur.v].size(); i++) { + int next = g[cur.v].get(i).v; + int cost = g[cur.v].get(i).cost; + if (dist[next] > cur.cost + cost) { + dist[next] = cur.cost + cost; + prev[next] = cur.v; + pq.add(new Node(next, dist[next])); + } + } + } + + return dist; + } + +} diff --git a/dydwo0740/baekjoon/9944.java b/dydwo0740/baekjoon/9944.java new file mode 100644 index 0000000..88ed0ab --- /dev/null +++ b/dydwo0740/baekjoon/9944.java @@ -0,0 +1,114 @@ +import java.io.*; +import java.util.*; + +public class Main { + + static int N; + static int M; + static char[][] board; + static int dot = 0; + static int min = Integer.MAX_VALUE; + static int[] row = {1, -1, 0, 0}; + static int[] col = {0, 0, 1, -1}; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st; + + String input = ""; + int test = 1; + while ((input = br.readLine()) != null) { + + st = new StringTokenizer(input); + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + board = new char[N][M]; + min = Integer.MAX_VALUE; + dot = 0; + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + String str = st.nextToken(); + for (int j = 0; j < M; j++) { + board[i][j] = str.charAt(j); + if (board[i][j] == '.') { + dot++; + } + } + } + + for (int i = 0; i < N; i++) { + for (int j = 0; j < M; j++) { + if (board[i][j] == '.') { + boolean[][] visited = new boolean[N][M]; + visited[i][j] = true; + dfs(i, j, 1, 0, visited); + visited[i][j] = false; + } + } + } + + if (min == Integer.MAX_VALUE) { + System.out.println("Case " + test + ": " + -1); + } else{ + System.out.println("Case " + test + ": " + min); + } + + test++; + } + + + bw.flush(); + } + + public static void dfs(int x, int y, int cnt, int depth, boolean[][] visited) { + if (cnt == dot) { + min = Math.min(min, depth); + return; + } + + for (int i = 0; i < 4; i++) { + int nx = x + row[i]; + int ny = y + col[i]; + int count = 0; + // 계속해서 움직이게 하는 + while (isTrue(nx, ny) && !visited[nx][ny] && board[nx][ny] == '.') { + visited[nx][ny] = true; + count++; + nx += row[i]; + ny += col[i]; + + } + + nx -= row[i]; + ny -= col[i]; + + if (nx == x && ny == y) { + continue; + } + //System.out.println(nx + " " + ny + " " + cnt + " " + count); + + dfs(nx, ny, cnt + count, depth + 1, visited); + + for (int d = 1; d <= count; d++) { + nx = x + row[i] * d; + ny = y + col[i] * d; + visited[nx][ny] = false; + } + + } + + } + + public static boolean isTrue(int x, int y) { + if (0 <= x && x < N && 0 <= y && y < M) { + return true; + } + + return false; + } + +} diff --git a/kjhonggg95/baekjoon/10429.cpp b/kjhonggg95/baekjoon/10429.cpp new file mode 100644 index 0000000..055bc17 --- /dev/null +++ b/kjhonggg95/baekjoon/10429.cpp @@ -0,0 +1,90 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dx[4] = {1, 0, -1, 0}; +int dy[4] = {0, 1, 0, -1}; + +int n, m; + +bool vis[3][3]; +char arr[3][3]; + +void dfs(int r, int c, int res, int cnt, char prev, vector v) +{ + v.push_back({r, c}); + + // 현재 칸이 숫자인 경우 + if (arr[r][c] >= '1' && arr[r][c] <= '9') + { + if (prev == '+') + res += (arr[r][c] - '0'); + else if (prev == '-') + res -= (arr[r][c] - '0'); + + cnt++; + + if (cnt == m) + { + if (res == n) + { + cout << 1 << '\n'; + for (auto e : v) + cout << e.X << ' ' << e.Y << '\n'; + exit(0); + } + + return; + } + } + else // 현재 칸이 연산자인 경우 + prev = arr[r][c]; + + for (int dir = 0; dir < 4; dir++) + { + int nx = r + dx[dir]; + int ny = c + dy[dir]; + + if (nx < 0 || nx >= 3 || ny < 0 || ny >= 3) + continue; + if (vis[nx][ny]) + continue; + + vis[nx][ny] = true; + dfs(nx, ny, res, cnt, prev, v); + vis[nx][ny] = false; + } +} + +int main() +{ + fastio; + cin >> n >> m; + for (int i = 0; i < 3; i++) + { + string s; + cin >> s; + for (int j = 0; j < 3; j++) + arr[i][j] = s[j]; + } + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + if (arr[i][j] >= '0' && arr[i][j] <= '9') + { + vector v; + vis[i][j] = true; + dfs(i, j, arr[i][j] - '0', 0, 'x', v); + vis[i][j] = false; + } + } + } + + cout << 0 << '\n'; +} diff --git a/kjhonggg95/baekjoon/10710.cpp b/kjhonggg95/baekjoon/10710.cpp new file mode 100644 index 0000000..9006903 --- /dev/null +++ b/kjhonggg95/baekjoon/10710.cpp @@ -0,0 +1,36 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int d[1005]; // 거리 +int w[1005]; // 날씨 나쁨정도 +int dp[1005][1005]; // [i][j] : i번째 날 j번째 도시를 갈 때 최소 피로도 + +// 10 25 15 +// 50 30 15 40 30 + +int main() +{ + fastio; + memset(dp, 0x7f, sizeof(dp)); + int n, m; + cin >> n >> m; + for (int i = 1; i <= n; i++) + cin >> d[i]; + for (int i = 1; i <= m; i++) + cin >> w[i]; + + // 출발지(0번 도시)에서의 피로도는 0 + for (int i = 0; i <= m; i++) + dp[i][0] = 0; + + for (int i = 1; i <= m; i++) // 날씨 나쁨정도 + for (int j = 1; j <= n; j++) // 도시 + dp[i][j] = min(dp[i - 1][j], dp[i - 1][j - 1] + d[j] * w[i]); + + cout << dp[m][n] << '\n'; +} diff --git a/kjhonggg95/baekjoon/11607.cpp b/kjhonggg95/baekjoon/11607.cpp new file mode 100644 index 0000000..47862fb --- /dev/null +++ b/kjhonggg95/baekjoon/11607.cpp @@ -0,0 +1,55 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dx[4] = {1,0,-1,0}; +int dy[4] = {0,1,0,-1}; + +char arr[501][501]; +bool vis[501][501]; + +int main() +{ + fastio; + int n, m; + cin >> n >> m; + for(int i = 0;i> arr[i][j]; + + queue> q; + + q.push({{0,0}, 0}); + vis[0][0] = true; + + while(!q.empty()) + { + auto cur = q.front().X; + auto cnt = q.front().Y; + q.pop(); + + if(cur.X == n - 1 && cur.Y == m - 1) + { + cout << cnt << '\n'; + return 0; + } + + for(int dir = 0;dir<4;dir++) + { + int nx = cur.X + dx[dir] * (arr[cur.X][cur.Y] - '0'); + int ny = cur.Y + dy[dir] * (arr[cur.X][cur.Y] - '0'); + + if(nx < 0 || nx >= n || ny < 0 || ny >=m) continue; + if(vis[nx][ny]) continue; + + q.push({{nx,ny}, cnt + 1}); + vis[nx][ny] = true; + } + } + + cout << "IMPOSSIBLE" << '\n'; +} \ No newline at end of file diff --git a/kjhonggg95/baekjoon/12764.cpp b/kjhonggg95/baekjoon/12764.cpp new file mode 100644 index 0000000..db9429f --- /dev/null +++ b/kjhonggg95/baekjoon/12764.cpp @@ -0,0 +1,93 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, p, q, ans; +int freq[100001]; // 자리별 앉은 횟수 +bool seat[100001]; // 착석 가능 여부 +map seatNo; // 시작/종료 시간 별 몇번자리에 앉아있는지 + +struct comp +{ + bool operator()(pii p1, pii p2) + { + if (p1.Y == p2.Y) + return p1.X > p2.X; + return p1.Y > p2.Y; + } +}; + +// 시작 시각이나 종료 시각이 다른 사람과 겹치는 경우는 없다 +// --> 시작/종료 시간 별 몇 번 자리에 앉았는지 독립적으로 저장 가능 + +int main() +{ + fastio; + cin >> n; + priority_queue, greater> in; + priority_queue, comp> out; + priority_queue, greater> mnseat; + for (int i = 1; i <= n; i++) + mnseat.push(i); + + for (int i = 0; i < n; i++) + { + cin >> p >> q; + in.push({p, q}); + } + + // 입장시간 순 + // 10 100 + // 20 50 + // 30 120 + // 60 110 + // 80 90 + + // 퇴장시간 순 + // 20 50 + // 80 90 + // 10 100 + // 60 110 + // 30 120 + + for (int t = 0; t <= 1000000; t++) + { + while (!in.empty() && t == in.top().X) // 입장 시간 + { + auto cur = in.top(); + out.push(cur); + in.pop(); + + // 착석 + // int k = findSeat(); // 앉을 수 있는 자리 중 번호가 가장 작은 자리 + int k = mnseat.top(); + mnseat.pop(); + seat[k] = true; + freq[k]++; + seatNo[cur] = k; + } + + while (!out.empty() && t == out.top().Y) // 퇴장 시간 + { + auto cur = out.top(); + out.pop(); + + // 종료 + int k = seatNo[cur]; + seat[k] = false; + mnseat.push(k); + } + + ans = max(ans, (int)out.size()); + } + + cout << ans << '\n'; + + for (int i = 1; i <= ans; i++) + cout << freq[i] << ' '; + cout << '\n'; +} diff --git a/kjhonggg95/baekjoon/12834.cpp b/kjhonggg95/baekjoon/12834.cpp new file mode 100644 index 0000000..2b883d4 --- /dev/null +++ b/kjhonggg95/baekjoon/12834.cpp @@ -0,0 +1,63 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, v, e, kist, cr, a, b, l; +ll ans; + +vector adj[1005]; +int d[1005]; + +// 다익스트라 O(ElogE) +// 각 집 -> kist, cr +// 집 최대 100 +// O(N * ElogE) + +int main() +{ + fastio; + cin >> n >> v >> e >> kist >> cr; + vector home(n); + for(int i = 0;i < n;i++) + cin >> home[i]; + + while(e--) + { + cin >> a >> b >> l; + adj[a].push_back({l, b}); + adj[b].push_back({l, a}); + } + + for(auto st : home) + { + memset(d, 0, sizeof(d)); + fill(d, d + v + 1, 1e9); + priority_queue, greater> pq; + d[st] = 0; + pq.push({d[st], st}); + + while(!pq.empty()) + { + auto cur = pq.top(); + pq.pop(); + + if(d[cur.Y] != cur.X) continue; + + for(auto nxt : adj[cur.Y]) + { + if(d[nxt.Y] <= d[cur.Y] + nxt.X) continue; + d[nxt.Y] = d[cur.Y] + nxt.X; + pq.push({d[nxt.Y], nxt.Y}); + } + } + + ans += (d[kist] == 1e9 ? -1 : d[kist]); + ans += (d[cr] == 1e9 ? -1 : d[cr]); + } + + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/12886.cpp b/kjhonggg95/baekjoon/12886.cpp new file mode 100644 index 0000000..a6d0581 --- /dev/null +++ b/kjhonggg95/baekjoon/12886.cpp @@ -0,0 +1,80 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +bool vis[2005][2005]; + +struct stone +{ + int a; + int b; + int c; +}; + +int main() +{ + fastio; + int A, B, C; + cin >> A >> B >> C; + + queue q; + q.push({A, B, C}); + vis[A][B] = true; + vis[B][C] = true; + + while (!q.empty()) + { + int a = q.front().a; + int b = q.front().b; + int c = q.front().c; + q.pop(); + + if (a == b && b == c) + { + cout << 1 << '\n'; + return 0; + } + + // a b + if (a > b && !vis[a - b][b + b]) + { + q.push({a - b, b + b, c}); + vis[a - b][b + b] = true; + } + else if (a < b && !vis[a + a][b - a]) + { + q.push({a + a, b - a, c}); + vis[a + a][b - a] = true; + } + + // b c + if (b > c && !vis[b - c][c + c]) + { + q.push({a, b - c, c + c}); + vis[b - c][c + c] = true; + } + else if (b < c && !vis[b + b][c - b]) + { + q.push({a, b + b, c - b}); + vis[b + b][c - b] = true; + } + + // c a + if (c > a && !vis[a + a][c - a]) + { + q.push({a + a, b, c - a}); + vis[a + a][c - a] = true; + } + else if (c < a && !vis[a - c][c + c]) + { + q.push({a - c, b, c + c}); + vis[a - c][c + c] = true; + } + } + + cout << 0 << '\n'; +} diff --git a/kjhonggg95/baekjoon/12908.cpp b/kjhonggg95/baekjoon/12908.cpp new file mode 100644 index 0000000..319752b --- /dev/null +++ b/kjhonggg95/baekjoon/12908.cpp @@ -0,0 +1,41 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +// 정점 8개 + +ll dist[10][10]; + +vector v; + +int main() +{ + fastio; + vector v(9); + for(int i = 1;i <= 8;i++) + for(int j = 1;j <= 8;j++) + dist[i][j] = LLONG_MAX; + + cin >> v[1].X >> v[1].Y >> v[2].X >> v[2].Y; + + for(int i = 3;i <= 7;i += 2) + { + cin >> v[i].X >> v[i].Y >> v[i + 1].X >> v[i + 1].Y; + dist[i][i + 1] = dist[i + 1][i] = 10; + } + + for(int i = 1;i <= 8;i++) + for(int j = 1;j <= 8;j++) + dist[i][j] = min(dist[i][j], abs(v[i].X - v[j].X) + abs(v[i].Y - v[j].Y)); + + for(int k = 1;k <= 8;k++) + for(int i = 1;i <= 8;i++) + for(int j = 1;j <= 8;j++) + dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]); + + cout << dist[1][2] << '\n'; +} diff --git a/kjhonggg95/baekjoon/14497.cpp b/kjhonggg95/baekjoon/14497.cpp new file mode 100644 index 0000000..3144355 --- /dev/null +++ b/kjhonggg95/baekjoon/14497.cpp @@ -0,0 +1,62 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dx[4] = {1, 0, -1, 0}; +int dy[4] = {0, 1, 0, -1}; + +int arr[301][301]; +int d[301][301]; + +int main() +{ + fastio; + int n, m, x1, y1, x2, y2; + cin >> n >> m >> x1 >> y1 >> x2 >> y2; + x1--; y1--; x2--; y2--; + for (int i = 0; i < n; i++) + { + string s; + cin >> s; + for (int j = 0; j < m; j++) + { + if (s[j] == '#' || s[j] == '*' || s[j] == '0') + arr[i][j] = 0; + else + arr[i][j] = 1; + d[i][j] = 1e9; + } + } + + priority_queue, vector>, greater>> pq; + + d[x1][y1] = 0; + pq.push({d[x1][y1], {x1, y1}}); + + while (!pq.empty()) + { + auto w = pq.top().X; + auto cur = pq.top().Y; + pq.pop(); + + if (d[cur.X][cur.Y] != w) + continue; + + for (int dir = 0; dir < 4; dir++) + { + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; + + if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue; + if (d[nx][ny] <= d[cur.X][cur.Y] + arr[nx][ny]) continue; + d[nx][ny] = d[cur.X][cur.Y] + arr[nx][ny]; + pq.push({d[nx][ny], {nx, ny}}); + } + } + + cout << d[x2][y2] + 1 << '\n'; +} diff --git a/kjhonggg95/baekjoon/14597.cpp b/kjhonggg95/baekjoon/14597.cpp new file mode 100644 index 0000000..3569297 --- /dev/null +++ b/kjhonggg95/baekjoon/14597.cpp @@ -0,0 +1,50 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int arr[105][105]; +int dp[105][105]; + +int main() +{ + fastio; + int n, m, x, ans = 1e9; + cin >> n >> m; + for(int i = 1; i <= n;i++) + for(int j = 1;j <= m;j++) + cin >> arr[i][j]; + + for(int i = 1; i <= n;i++) + for(int j = 1;j <= m;j++) + { + cin >> x; + arr[i][j] = (arr[i][j] - x) * (arr[i][j] - x); + if(i == 1) dp[i][j] = arr[i][j]; + } + + for(int i = 2;i <= n;i++) + { + for(int j = 1;j <= m;j++) + { + if(m >= 2) + { + if(j == 1) + dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + 1]) + arr[i][j]; + else if(j == m) + dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j]) + arr[i][j]; + else + dp[i][j] = min({dp[i - 1][j - 1], dp[i - 1][j], dp[i - 1][j + 1]}) + arr[i][j]; + } + else + dp[i][j] = dp[i - 1][j] + arr[i][j]; + } + } + + for(int j = 1;j <= m;j++) + ans = min(ans, dp[n][j]); + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/14618.cpp b/kjhonggg95/baekjoon/14618.cpp new file mode 100644 index 0000000..7243dda --- /dev/null +++ b/kjhonggg95/baekjoon/14618.cpp @@ -0,0 +1,90 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +#define A 1 +#define B 2 +#define INF 1e9 + +int n, m, j, k, x, u, v, w; +int d[5005]; + +map house; + +vector adj[5005]; + +int main() +{ + fastio; + cin >> n >> m >> j >> k; + fill(d, d + n + 1, INF); + + // A형 집 + for(int i = 0;i> x; + house[x] = A; + } + + // B형 집 + for(int i = 0;i> x; + house[x] = B; + } + + while(m--) + { + cin >> u >> v >> w; + adj[u].push_back({w, v}); + adj[v].push_back({w, u}); + } + + priority_queue, greater> pq; + + d[j] = 0; + pq.push({d[j], j}); + + while(!pq.empty()) + { + auto cur = pq.top(); + pq.pop(); + + if(d[cur.Y] != cur.X) continue; + + for(auto nxt : adj[cur.Y]) + { + if(d[nxt.Y] <= d[cur.Y] + nxt.X) continue; + d[nxt.Y] = d[cur.Y] + nxt.X; + + pq.push({d[nxt.Y], nxt.Y}); + } + } + + int min_dist = INF - 1; + int ans = -1; + + for(int i = 1;i<=n;i++) + { + if(house[i] == B && d[i] < min_dist) + { + ans = B; + min_dist = d[i]; + } + + if(house[i] == A && d[i] <= min_dist) + { + ans = A; + min_dist = d[i]; + } + } + + if(ans == -1) + cout << ans << '\n'; + else + cout << (ans == A ? 'A' : 'B') << '\n' << min_dist << '\n'; +} diff --git a/kjhonggg95/baekjoon/14658.cpp b/kjhonggg95/baekjoon/14658.cpp new file mode 100644 index 0000000..9c58c2d --- /dev/null +++ b/kjhonggg95/baekjoon/14658.cpp @@ -0,0 +1,31 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, m, l, k, mx; + +int main() +{ + fastio; + cin >> n >> m >> l >> k; + vector star(k); + for(int i = 0;i> star[i].X >> star[i].Y; + + for(auto& a : star) + { + for(auto& b : star) + { + int x = a.X, y = b.Y, cnt = 0; + for(auto& e : star) + if(e.X >= x && e.X <= x + l && e.Y >= y && e.Y <= y + l) cnt++; + mx = max(mx, cnt); + } + } + + cout << k - mx << '\n'; +} diff --git a/kjhonggg95/baekjoon/14718.cpp b/kjhonggg95/baekjoon/14718.cpp new file mode 100644 index 0000000..9beaad9 --- /dev/null +++ b/kjhonggg95/baekjoon/14718.cpp @@ -0,0 +1,37 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int str[101]; +int dex[101]; +int inte[101]; + +int main() +{ + fastio; + int n, K, ans = 1e9; + cin >> n >> K; + for(int i = 0;i> str[i] >> dex[i] >> inte[i]; + + for(int i = 0;i= str[l] && dex[j] >= dex[l] && inte[k] >= inte[l]) cnt++; + if(cnt >= K) + ans = min(ans, str[i] + dex[j] + inte[k]); + } + } + } + + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/14722.cpp b/kjhonggg95/baekjoon/14722.cpp new file mode 100644 index 0000000..eef6a4b --- /dev/null +++ b/kjhonggg95/baekjoon/14722.cpp @@ -0,0 +1,59 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n; +int arr[1001][1001]; +pii dp[1001][1001]; // [i][j] : i, j 칸에 도달했을 때 {최근에 마신 우유, 지금까지 마신 우유의 수} + +// 0 딸기우유 +// 1 초코우유 +// 2 바나나우유 + +// 딸기 -> 초코 -> 바나나 -> 딸기 -> ... + +// 이동 +// 1) 동쪽 +// 2) 남쪽 + +pii func(int r, int c) +{ + if (r <= 0 || c <= 0) + return {-1e9, -1e9}; + + if (dp[r][c].Y != -1) + return dp[r][c]; + + // 위쪽 + pii ret1 = func(r - 1, c); + if (arr[r][c] == (dp[r - 1][c].X + 1) % 3) + ret1 = {arr[r][c], dp[r-1][c].Y + 1}; + + // 왼쪽 + pii ret2 = func(r, c - 1); + if (arr[r][c] == (dp[r][c - 1].X + 1) % 3) + ret2 = {arr[r][c], dp[r][c - 1].Y + 1}; + + return dp[r][c] = (ret1.Y > ret2.Y ? ret1 : ret2); +} + +int main() +{ + fastio; + memset(dp, -1, sizeof(dp)); + cin >> n; + for (int i = 1; i <= n; i++) + for (int j = 1; j <= n; j++) + cin >> arr[i][j]; + + dp[1][1] = {2, 0}; + + if(arr[1][1] == 0) + dp[1][1] = {0, 1}; + + cout << func(n, n).Y << '\n'; +} diff --git a/kjhonggg95/baekjoon/14925.cpp b/kjhonggg95/baekjoon/14925.cpp new file mode 100644 index 0000000..a25eb94 --- /dev/null +++ b/kjhonggg95/baekjoon/14925.cpp @@ -0,0 +1,32 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int arr[1001][1001]; +int dp[1001][1001]; + +int main() +{ + fastio; + int n, m, ans = 0; + cin >> n >> m; + for (int i = 1; i <= n; i++) + for (int j = 1; j <= m; j++) + cin >> arr[i][j]; + + for (int i = 1; i <= n; i++) + { + for (int j = 1; j <= m; j++) + { + if (arr[i][j] != 0) continue; + dp[i][j] = min({dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]}) + 1; + ans = max(ans, dp[i][j]); + } + } + + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/14945.cpp b/kjhonggg95/baekjoon/14945.cpp new file mode 100644 index 0000000..7bacb27 --- /dev/null +++ b/kjhonggg95/baekjoon/14945.cpp @@ -0,0 +1,27 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dp[101][101]; + +int main() +{ + fastio; + int n, ans = 0; + cin >> n; + + dp[2][1] = 2; // 2층 + + for(int i = 3;i <= n;i++) + for(int j = 1;j <= n - 1;j++) + dp[i][j] = (dp[i - 1][j] * 2 + dp[i - 1][j - 1] + dp[i - 1][j + 1]) % 10007; + + for(int j = 1;j <= n - 1;j++) + ans = (ans + dp[n][j]) % 10007; + + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/15809.cpp b/kjhonggg95/baekjoon/15809.cpp new file mode 100644 index 0000000..98a5d67 --- /dev/null +++ b/kjhonggg95/baekjoon/15809.cpp @@ -0,0 +1,102 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, m, a, o, p, q; +int par[100001]; +int arr[100001]; +bool live[100001]; + +// find +int find(int u) +{ + if(par[u] < 0) return u; + return par[u] = find(par[u]); +} + +// 동맹 +void align(int u, int v) +{ + u = find(u); + v = find(v); + + if(u < v) + { + par[v] = u; + arr[u] += arr[v]; + live[v] = false; + } + else + { + par[u] = v; + arr[v] += arr[u]; + live[u] = false; + } +} + +// 속국 +void merge(int u, int v) +{ + u = find(u); + v = find(v); + + if(u == v) return; + + par[v] = u; +} + +int main() +{ + fastio; + memset(par, -1, sizeof(par)); + memset(live, true, sizeof(live)); + cin >> n >> m; + for(int i = 1;i<=n;i++) + cin >> arr[i]; + + while(m--) + { + cin >> o >> p >> q; + + if(o == 1) // 동맹 + align(p, q); + else if(o == 2) // 전쟁 + { + p = find(p); + q = find(q); + + if(arr[p] == arr[q]) + { + arr[p] = arr[q] = 0; + live[p] = live[q] = false; + } + else + { + int winner = (arr[p] > arr[q] ? p : q); + int loser = (arr[p] > arr[q] ? q : p); + + arr[winner] = arr[winner] - arr[loser]; + live[loser] = false; + + merge(winner, loser); + } + } + } + + vector ans; + for(int i = 1;i<=n;i++) + if(live[i]) + ans.push_back(arr[i]); + + sort(ans.begin(), ans.end()); + + cout << ans.size() << '\n'; + + for(auto e : ans) + cout << e << ' '; + cout << '\n'; +} diff --git a/kjhonggg95/baekjoon/15924.cpp b/kjhonggg95/baekjoon/15924.cpp new file mode 100644 index 0000000..4a32d6d --- /dev/null +++ b/kjhonggg95/baekjoon/15924.cpp @@ -0,0 +1,49 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +const int mod = 1000000009; + +char arr[3005][3005]; +ll dp[3005][3005]; + +int main() +{ + fastio; + int n, m; + cin >> n >> m; + for(int i = 1;i <= n;i++) + { + string s; + cin >> s; + for(int j = 1;j <= m;j++) + arr[i][j] = s[j - 1]; + } + + for(int i = 1;i <= n;i++) + { + for(int j = 1;j <= m;j++) + { + dp[i][j]++; // 해당 위치에서 탐색 시작 + if(arr[i][j] == 'E') // 오른쪽 + { + dp[i][j + 1] = (dp[i][j + 1] + dp[i][j]) % mod; + } + else if(arr[i][j] == 'S') // 아래쪽 + { + dp[i + 1][j] = (dp[i + 1][j] + dp[i][j]) % mod; + } + else if(arr[i][j] == 'B') // 오른쪽, 아래쪽 + { + dp[i][j + 1] = (dp[i][j + 1] + dp[i][j]) % mod; + dp[i + 1][j] = (dp[i + 1][j] + dp[i][j]) % mod; + } + } + } + + cout << dp[n][m] % mod << '\n'; +} diff --git a/kjhonggg95/baekjoon/16167.cpp b/kjhonggg95/baekjoon/16167.cpp new file mode 100644 index 0000000..9630225 --- /dev/null +++ b/kjhonggg95/baekjoon/16167.cpp @@ -0,0 +1,32 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +pii d[205][205]; // {거리, 거점 수} +int n, r, a, b, c, D, e; + +int main() +{ + fastio; + cin >> n >> r; + + for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) + d[i][j] = (i == j) ? make_pair(0.0, 0.0) : make_pair(1e9, 1e9); + + while(r--) + { + cin >> a >> b >> c >> D >> e; + d[a][b] = {min(d[a][b].X, c + (e > 10 ? (e - 10) * D : 0)), 1}; + } + + for(int k = 1;k <= n;k++) for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) + if(d[i][k].X + d[k][j].X < d[i][j].X || d[i][k].X + d[k][j].X == d[i][j].X && d[i][k].Y + d[k][j].Y < d[i][j].Y) + d[i][j] = {d[i][k].X + d[k][j].X, d[i][k].Y + d[k][j].Y}; + + if(d[1][n].X == 1e9) cout << "It is not a great way." ; + else cout << d[1][n].X << ' ' << d[1][n].Y + 1 << '\n'; +} diff --git a/kjhonggg95/baekjoon/16197.cpp b/kjhonggg95/baekjoon/16197.cpp new file mode 100644 index 0000000..520940d --- /dev/null +++ b/kjhonggg95/baekjoon/16197.cpp @@ -0,0 +1,115 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dx[4] = {1, 0, -1, 0}; +int dy[4] = {0, 1, 0, -1}; + +char arr[25][25]; +bool vis[25][25][25][25]; +int n, m, ans; + +struct pos +{ + pii coin1; + pii coin2; + int cnt; +}; + +int main() +{ + fastio; + pii coin1, coin2; + int cnt = 0; + cin >> n >> m; + for (int i = 1; i <= n; i++) + { + string s; + cin >> s; + for (int j = 1; j <= m; j++) + { + arr[i][j] = s[j - 1]; + if (arr[i][j] == 'o') + { + if (cnt == 0) + { + coin1 = {i, j}; + cnt++; + } + else + coin2 = {i, j}; + } + } + } + + queue q; + q.push({coin1, coin2, 0}); // {동전1 위치, 동전2 위치, 이동 횟수} + vis[coin1.X][coin1.Y][coin2.X][coin2.Y] = true; + + while (!q.empty()) + { + auto c1 = q.front().coin1; // 동전1 위치 + auto c2 = q.front().coin2; // 동전2 위치 + auto cnt = q.front().cnt; // 이동 횟수 + q.pop(); + + // 두 동전의 위치가 겹치는 경우 -> 하나만 떨어뜨리기 불가능 + if(c1 == c2) + continue; + + // 버튼을 10번보다 많이 누른 경우 + if (cnt >= 11) + continue; + + // 둘 다 떨어지는 경우 + if((c1.X <= 0 || c1.X > n || c1.Y <= 0 || c1.Y > m) && (c2.X <= 0 || c2.X > n || c2.Y <= 0 || c2.Y > m)) + continue; + + // 동전1만 떨어지는 경우 + if ((c1.X <= 0 || c1.X > n || c1.Y <= 0 || c1.Y > m) && (c2.X > 0 && c2.X <= n && c2.Y > 0 && c2.Y <= m)) + { + cout << cnt << '\n'; + return 0; + } + + // 동전2만 떨어지는 경우 + if ((c2.X <= 0 || c2.X > n || c2.Y <= 0 || c2.Y > m) && (c1.X > 0 && c1.X <= n && c1.Y > 0 && c1.Y <= m)) + { + cout << cnt << '\n'; + return 0; + } + + for (int dir = 0; dir < 4; dir++) + { + int c1nx = c1.X + dx[dir]; + int c1ny = c1.Y + dy[dir]; + + int c2nx = c2.X + dx[dir]; + int c2ny = c2.Y + dy[dir]; + + if (arr[c1nx][c1ny] == '#') + { + c1nx = c1.X; + c1ny = c1.Y; + } + + if (arr[c2nx][c2ny] == '#') + { + c2nx = c2.X; + c2ny = c2.Y; + } + + if(vis[c1nx][c1ny][c2nx][c2ny] || vis[c2nx][c2ny][c1nx][c1ny]) continue; + + q.push({{c1nx, c1ny}, {c2nx, c2ny}, cnt + 1}); + vis[c1nx][c1ny][c2nx][c2ny] = true; + } + } + + cout << -1 << '\n'; + return 0; +} diff --git a/kjhonggg95/baekjoon/16569.cpp b/kjhonggg95/baekjoon/16569.cpp new file mode 100644 index 0000000..7b08457 --- /dev/null +++ b/kjhonggg95/baekjoon/16569.cpp @@ -0,0 +1,103 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dx[4] = {1, 0, -1, 0}; +int dy[4] = {0, 1, 0, -1}; + +int h[101][101]; // 고도 +int t[101][101]; // 화산쇄설류로 뒤덮이는 시간 +bool volcano[101][101]; +int arrive[101][101]; +bool vis[101][101]; + +int n, m, v, x, y; + +int main() +{ + fastio; + cin >> n >> m >> v >> x >> y; + + // 화산의 고도 + for (int i = 1; i <= n; i++) + for (int j = 1; j <= m; j++) + { + cin >> h[i][j]; + t[i][j] = 1e9; + } + + queue> q; // {위치, 시간} + + while (v--) + { + int a, b, c; + cin >> a >> b >> c; + volcano[a][b] = true; + t[a][b] = c; + q.push({{a, b}, c}); + + while (!q.empty()) + { + auto cur = q.front().X; + auto time = q.front().Y; + q.pop(); + + for (int dir = 0; dir < 4; dir++) + { + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; + + if (nx <= 0 || nx > n || ny <= 0 || ny > m) continue; + if (t[nx][ny] <= t[cur.X][cur.Y] + 1) continue; + t[nx][ny] = time + 1; + q.push({{nx, ny}, time + 1}); + } + } + } + + q.push({{x, y}, 0}); // 재승 위치, 0초부터 시작 + vis[x][y] = true; + arrive[x][y] = 0; + + while (!q.empty()) + { + auto cur = q.front().X; + auto time = q.front().Y; + q.pop(); + + for (int dir = 0; dir < 4; dir++) + { + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; + + if (nx <= 0 || nx > n || ny <= 0 || ny > m) continue; + if (vis[nx][ny] || volcano[nx][ny] || time + 1 >= t[nx][ny]) continue; + + vis[nx][ny] = true; + arrive[nx][ny] = time + 1; + q.push({{nx, ny}, time + 1}); + } + } + + int maxh = h[x][y], mint = 1e9; + + for (int i = 1; i <= n; i++) + { + for (int j = 1; j <= m; j++) + { + if (!vis[i][j]) continue; + maxh = max(maxh, h[i][j]); + } + } + + for (int i = 1; i <= n; i++) + for (int j = 1; j <= m; j++) + if (vis[i][j] && h[i][j] == maxh) + mint = min(mint, arrive[i][j]); + + cout << maxh << ' ' << mint << '\n'; +} diff --git a/kjhonggg95/baekjoon/17305.cpp b/kjhonggg95/baekjoon/17305.cpp new file mode 100644 index 0000000..82b80df --- /dev/null +++ b/kjhonggg95/baekjoon/17305.cpp @@ -0,0 +1,50 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +vector a; +vector b; + +ll three[250001]; +ll five[250001]; + +int main() +{ + fastio; + int n, w; + cin >> n >> w; + while (n--) + { + int t, s; + cin >> t >> s; + if (t == 3) + a.push_back(s); + else + b.push_back(s); + } + + sort(a.begin(), a.end(), greater<>()); + sort(b.begin(), b.end(), greater<>()); + + for (int i = 0; i < a.size(); i++) + three[i + 1] = three[i] + a[i]; + + for (int i = 0; i < b.size(); i++) + five[i + 1] = five[i] + b[i]; + + int fiveCnt = min((int)b.size(), w / 5); // 최대 담을 수 있는 5g 짜리 사탕의 개수 -> 2 + ll sum = five[fiveCnt]; // 180 + + while(fiveCnt >= 0) + { + int threeCnt = min((int)a.size(), (w - 5 * fiveCnt) / 3); + sum = max(sum, five[fiveCnt] + three[threeCnt]); + fiveCnt--; + } + + cout << sum << '\n'; +} diff --git a/kjhonggg95/baekjoon/18188.cpp b/kjhonggg95/baekjoon/18188.cpp new file mode 100644 index 0000000..13b1400 --- /dev/null +++ b/kjhonggg95/baekjoon/18188.cpp @@ -0,0 +1,63 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int h, w, n; +char arr[21][21]; +char dir[21][2]; + +pii st; +string s, ans = "NO"; + +void dfs(int curR, int curC, int step, string cmd) +{ + if (step > n || curR <= 0 || curR > h || curC <= 0 || curC > w || arr[curR][curC] == '@') + return; + + if (arr[curR][curC] == 'Z') + { + ans = "YES\n" + cmd; + return; + } + + for (int i = 0; i < 2; i++) + { + if (dir[step][i] == 'W') + dfs(curR - 1, curC, step + 1, cmd + 'W'); + else if (dir[step][i] == 'A') + dfs(curR, curC - 1, step + 1, cmd + 'A'); + else if (dir[step][i] == 'S') + dfs(curR + 1, curC, step + 1, cmd + 'S'); + else if (dir[step][i] == 'D') + dfs(curR, curC + 1, step + 1, cmd + 'D'); + } +} + +int main() +{ + fastio; + cin >> h >> w; + for (int i = 1; i <= h; i++) + { + cin >> s; + for (int j = 1; j <= w; j++) + { + arr[i][j] = s[j - 1]; + if (arr[i][j] == 'D') + st = {i, j}; + } + } + + cin >> n; + + for (int i = 0; i < n; i++) + cin >> dir[i][0] >> dir[i][1]; + + dfs(st.X, st.Y, 0, ""); + + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/18430.cpp b/kjhonggg95/baekjoon/18430.cpp new file mode 100644 index 0000000..51236e3 --- /dev/null +++ b/kjhonggg95/baekjoon/18430.cpp @@ -0,0 +1,57 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, m, ans; + +int dx[4] = {1, 1, -1, -1}; +int dy[4] = {1, -1, 1, -1}; + +int arr[5][5]; +bool vis[5][5]; + +void dfs(int r, int c, int sum) +{ + ans = max(ans, sum); + + if (c == m) + { + r++; + c = 0; + if (r == n) return; + } + + if (!vis[r][c]) + { + for (int dir = 0; dir < 4; dir++) + { + int nx = r + dx[dir]; + int ny = c + dy[dir]; + + if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue; + if (vis[nx][c] || vis[r][ny]) continue; + + vis[r][c] = vis[nx][c] = vis[r][ny] = true; + dfs(r, c + 1, sum + arr[r][c] * 2 + arr[nx][c] + arr[r][ny]); + vis[r][c] = vis[nx][c] = vis[r][ny] = false; + } + } + + dfs(r, c + 1, sum); +} + +int main() +{ + fastio; + cin >> n >> m; + for (int i = 0; i < n; i++) + for (int j = 0; j < m; j++) + cin >> arr[i][j]; + + dfs(0, 0, 0); + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/19538.cpp b/kjhonggg95/baekjoon/19538.cpp new file mode 100644 index 0000000..08b3a9a --- /dev/null +++ b/kjhonggg95/baekjoon/19538.cpp @@ -0,0 +1,62 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +vector adj[200001]; +int rumor[200001]; // 루머를 믿기 시작한 시간 +bool vis[200001]; +int n, m, x; + +int main() +{ + fastio; + memset(rumor, -1, sizeof(rumor)); + cin >> n; + for (int i = 1; i <= n; i++) + { + while (cin >> x) + { + if (x == 0) break; + adj[i].push_back(x); + } + } + + cin >> m; + + queue q; + while (m--) + { + cin >> x; + rumor[x] = 0; + vis[x] = true; + q.push({x, 0}); + } + + while (!q.empty()) + { + auto cur = q.front(); q.pop(); + rumor[cur.X] = cur.Y; + + for (auto& nxt : adj[cur.X]) + { + if (vis[nxt]) continue; + + int cnt = 0, sz = adj[nxt].size(); + for (auto& e : adj[nxt]) + cnt += (rumor[e] != -1); + + if(((sz & 1) && cnt <= sz / 2) || (!(sz & 1) && cnt < sz / 2)) continue; + + vis[nxt] = true; + q.push({nxt, cur.Y + 1}); + } + } + + for (int i = 1; i <= n; i++) + cout << rumor[i] << ' '; + cout << '\n'; +} diff --git a/kjhonggg95/baekjoon/19845.cpp b/kjhonggg95/baekjoon/19845.cpp new file mode 100644 index 0000000..006b44f --- /dev/null +++ b/kjhonggg95/baekjoon/19845.cpp @@ -0,0 +1,44 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int main() +{ + fastio; + int n, q; + cin >> n >> q; + vector v(n+1); + + // 중력의 영향을 받기 때문에 내림차순으로 입력이 들어온다 + for(int i = 1;i<=n;i++) + cin >> v[i]; + + while(q--) + { + int x, y; + cin >> x >> y; + + int wcnt = v[y] - x + 1; // 가로방향 레이저 + int hcnt = 0; // 세로방향 레이저 -> y층 이상에서 x 보다 크거나 같은 최대 층 구하기 + + int lo = y - 1, hi = n + 1; + + while(lo + 1 < hi) + { + int mid = (lo + hi) / 2; + + if(v[mid] >= x) + lo = mid; + else + hi = mid; + } + + hcnt = lo - y + 1; + + cout << max(0, wcnt + hcnt - 1) << '\n'; + } +} diff --git a/kjhonggg95/baekjoon/20924.cpp b/kjhonggg95/baekjoon/20924.cpp new file mode 100644 index 0000000..817127e --- /dev/null +++ b/kjhonggg95/baekjoon/20924.cpp @@ -0,0 +1,59 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, a, b, d, rr, gg, mxleaf; +vector g[200001]; // {dest, dist}; +bool vis[200001]; + +// 기둥 : root ~ giga +// 가지 : giga ~ leaf + +void dfs(int cur, int dist) +{ + mxleaf = max(mxleaf, dist); + + if (gg == 0 && g[cur].size() >= 3) + { + gg = cur; + return; + } + + for (auto nxt : g[cur]) + { + if (vis[nxt.X]) continue; + vis[nxt.X] = true; + dfs(nxt.X, dist + nxt.Y); + } +} + +int main() +{ + fastio; + cin >> n >> rr; + for (int i = 0; i < n - 1; i++) + { + cin >> a >> b >> d; + g[a].push_back({b, d}); + g[b].push_back({a, d}); + } + + // 기둥 + vis[rr] = true; + if(g[rr].size() >= 2) // 루트에서 바로 가지가 나오는 경우 + gg = rr; // 루트 == 기가 + else + dfs(rr, 0); + + cout << mxleaf << ' '; + mxleaf = 0; + + // 가지 + vis[gg] = true; + dfs(gg, 0); + cout << mxleaf << '\n'; +} diff --git a/kjhonggg95/baekjoon/2171.cpp b/kjhonggg95/baekjoon/2171.cpp new file mode 100644 index 0000000..7b32f3c --- /dev/null +++ b/kjhonggg95/baekjoon/2171.cpp @@ -0,0 +1,52 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +bool pos[5005][5005]; + +int main() +{ + fastio; + int n; + cin >> n; + vector xx(n); + vector yy(n); + for(int i = 0;i < n;i++) + cin >> xx[i] >> yy[i]; + + vector x(xx); + vector y(yy); + + sort(x.begin(), x.end()); + sort(y.begin(), y.end()); + + x.erase(unique(x.begin(), x.end()), x.end()); + y.erase(unique(y.begin(), y.end()), y.end()); + + vector v(n); + + for(int i = 0;i < n;i++) + { + int xxx = lower_bound(x.begin(), x.end(), xx[i]) - x.begin(); + int yyy = lower_bound(y.begin(), y.end(), yy[i]) - y.begin(); + pos[xxx][yyy] = true; + v[i] = {xxx, yyy}; + } + + int cnt = 0; + + for(int i = 0;i < n;i++) + { + for(int j = 0;j < n;j++) + { + if(v[i].X >= v[j].X || v[i].Y >= v[j].Y) continue; + if(pos[v[i].X][v[j].Y] && pos[v[j].X][v[i].Y]) cnt++; + } + } + + cout << cnt << '\n'; +} diff --git a/kjhonggg95/baekjoon/25319.cpp b/kjhonggg95/baekjoon/25319.cpp new file mode 100644 index 0000000..d7027aa --- /dev/null +++ b/kjhonggg95/baekjoon/25319.cpp @@ -0,0 +1,170 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dx[4] = {1, 0, -1, 0}; +int dy[4] = {0, 1, 0, -1}; + +int n, m, l, mx_c; +string s; + +char arr[51][51]; +int freq[26]; +bool vis[51][51]; + +vector seq; // 방문 순서 + +// (1, 1) -> (n, m) + +// 아이디 S 가 최대 몇 번 나올 수 있는지 구한다 +int getMaxC() +{ + int cnt = 0; + + bool flag = true; + + while (flag) + { + for (auto e : s) + { + if (freq[e - 'a'] > 0) + { + freq[e - 'a']--; + } + else + { + flag = false; + break; + } + } + + if (flag) + cnt++; + } + + return cnt; +} + +pii getSeq(char c) +{ + for (int i = 0; i < n; i++) + { + for (int j = 0; j < m; j++) + { + if (vis[i][j]) + continue; + if (arr[i][j] == c) + { + vis[i][j] = true; + return {i, j}; + } + } + } + return {0, 0}; +} + +int main() +{ + fastio; + string cmd = ""; // 명령어 + cin >> n >> m >> l; + for (int i = 0; i < n; i++) + { + string t; + cin >> t; + for (int j = 0; j < m; j++) + { + arr[i][j] = t[j]; + freq[arr[i][j] - 'a']++; + } + } + + cin >> s; + + mx_c = getMaxC(); // 최대 강화 가능 횟수 + + // 구현 순서 + // 1) 현재위치 -> 다음위치 이동 + // 2) Pick + + // case1) 강화할 수 있는 최대 횟수가 0인 경우 + // 출발 지점에서 도착 지점까지 이동하는 경로만 구하면 된다. + + // case2) 시작하자마자 아이템을 줍는 경우 + // 명령어에 P를 추가하고 다음 단계를 진행한다. + + // 도착지점에서 아이템을 주워야 하는지 여부 + bool last_pick = true; + + if (arr[0][0] != s[0]) // 출발 지점에서 아이템을 줍는 경우가 아니라면 + seq.push_back({0, 0}); // 출발 지점을 방문 순서에 넣어준다 + else if (mx_c == 0)// 최대 강화 회수가 0이면 + { + seq.push_back({0, 0}); // 출발 지점을 방문 순서에 넣어준다 + last_pick = false; // 아이템을 주울 필요가 없으므로 마지막 줍기는 false + } + else if (arr[0][0] == s[0]) // 강화할 수 있으면서 출발지점에서 아이템을 줍는 경우 + { + cmd += "P"; // 명령어에 P를 추가한 상태로 시작 + } + + // 아이템을 주워야하는 순서대로 방문 순서에 저장 + for (int i = 0; i < mx_c; i++) + for (auto e : s) + seq.push_back(getSeq(e)); + + // 마지막 방문 지점이 포탈 위치가 아니라면 + if (seq.back().X != n - 1 || seq.back().Y != m - 1) + { + seq.push_back({n - 1, m - 1}); // 포탈 위치를 방문 순서 마지막에 넣어주고 + last_pick = false; // 마지막 줍기는 false + } + + + // i번째 방문지점 -> i + 1번째 방문지점으로 가는 명령어 갱신 + for (int i = 0; i < seq.size() - 1; i++) + { + // 행 이동 + int r = seq[i].X; + int nr = seq[i + 1].X; + + if (r < nr) + { + for (int j = r; j < nr; j++) + cmd += "D"; + } + else if (r > nr) + { + for (int j = nr; j < r; j++) + cmd += "U"; + } + + // 열 이동 + int c = seq[i].Y; + int nc = seq[i + 1].Y; + + if (c < nc) + { + for (int j = c; j < nc; j++) + cmd += "R"; + } + else if (c > nc) + { + for (int j = nc; j < c; j++) + cmd += "L"; + } + + // 줍기 + cmd += "P"; + } + + // 마지막에 줍는 경우가 아니라면 명령어 맨 마지막에 추가된 P를 빼준다 + if (!last_pick) + cmd.pop_back(); + + cout << mx_c << ' ' << cmd.size() << ' ' << cmd << '\n'; +} diff --git a/kjhonggg95/baekjoon/25391.cpp b/kjhonggg95/baekjoon/25391.cpp new file mode 100644 index 0000000..a42461f --- /dev/null +++ b/kjhonggg95/baekjoon/25391.cpp @@ -0,0 +1,48 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, m, k, a, b, cnt; +ll ans; + +bool comp(pair &a, pair &b) +{ + return a.X.Y > b.X.Y; +} + +int main() +{ + fastio; + cin >> n >> m >> k; + + vector> v; + for (int i = 0; i < n; i++) + { + cin >> a >> b; + v.push_back({{a, b}, false}); + } + + // 심판 점수 순 정렬 + sort(v.begin(), v.end(), comp); + for (int i = 0; i < k; i++) + { + ans += v[i].X.X; + v[i].Y = true; + } + + // 주최자 점수 순 정렬 + sort(v.begin(), v.end(), greater<>()); + + for (int i = 0; m ; i++) + { + if (v[i].Y == true) continue; + ans += v[i].X.X; + m--; + } + + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/25710.cpp b/kjhonggg95/baekjoon/25710.cpp new file mode 100644 index 0000000..16fbdea --- /dev/null +++ b/kjhonggg95/baekjoon/25710.cpp @@ -0,0 +1,55 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, ans; +int freq[2000]; +bool used[1000000]; + +int main() +{ + fastio; + cin >> n; + vector v(n), nums; + for (int i = 0; i < n; i++) + { + cin >> v[i]; + freq[v[i]]++; + } + + for (int i = 1; i <= 999; i++) + { + if (freq[i] > 0) + nums.push_back(i); + + if (freq[i] >= 2) + nums.push_back(i); + } + + for (int i = 0; i < nums.size() - 1; i++) + { + for (int j = i + 1; j < nums.size(); j++) + { + int sum = nums[i] * nums[j]; + + if (used[sum]) continue; + used[sum] = true; + + int score = 0; + + while (sum) + { + score += sum % 10; + sum /= 10; + } + + ans = max(ans, score); + } + } + + cout << ans << '\n'; +} \ No newline at end of file diff --git a/kjhonggg95/baekjoon/27942.cpp b/kjhonggg95/baekjoon/27942.cpp new file mode 100644 index 0000000..3ae58bc --- /dev/null +++ b/kjhonggg95/baekjoon/27942.cpp @@ -0,0 +1,103 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +#define R 1 +#define L 2 +#define D 3 +#define U 4 + +int n, upR, downR, leftC, rightC, tot; +short arr[3001][3001]; +char dirarr[5] = {' ', 'R', 'L', 'D', 'U'}; + +string cmd = ""; + +int main() +{ + fastio; + cin >> n; + for (int i = 1; i <= n; i++) + for (int j = 1; j <= n; j++) + cin >> arr[i][j]; + + upR = leftC = n / 2; + downR = rightC = n / 2 + 1; + + // 상하좌우 순으로 우선이므로 + // 우좌하상 순으로 탐색 + + while (1) + { + int mx_sum = 1; // 먹을 수 있는 최대 양분 + int dir = 0; // 먹는 방향 + + // 우 + int sum = 0; + if (rightC + 1 <= n) + for (int i = upR; i <= downR; i++) + sum += arr[i][rightC + 1]; + + if (sum >= mx_sum) + { + mx_sum = sum; + dir = R; + } + + // 좌 + sum = 0; + if (leftC - 1 > 0) + for (int i = upR; i <= downR; i++) + sum += arr[i][leftC - 1]; + + if (sum >= mx_sum) + { + mx_sum = sum; + dir = L; + } + + // 하 + sum = 0; + if (downR + 1 <= n) + for (int i = leftC; i <= rightC; i++) + sum += arr[downR + 1][i]; + + if (sum >= mx_sum) + { + mx_sum = sum; + dir = D; + } + + // 상 + sum = 0; + if (upR - 1 > 0) + for (int i = leftC; i <= rightC; i++) + sum += arr[upR - 1][i]; + + if (sum >= mx_sum) + { + mx_sum = sum; + dir = U; + } + + if (dir == 0) + break; + else if (dir == R) + rightC++; + else if (dir == L) + leftC--; + else if (dir == D) + downR++; + else if (dir == U) + upR--; + + cmd += dirarr[dir]; + tot += mx_sum; + } + + cout << tot << '\n' << cmd << '\n'; +} diff --git a/kjhonggg95/baekjoon/28017.cpp b/kjhonggg95/baekjoon/28017.cpp new file mode 100644 index 0000000..ad911f5 --- /dev/null +++ b/kjhonggg95/baekjoon/28017.cpp @@ -0,0 +1,35 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dp[505][505]; + +int n, m, ans = 1e9; + +int main() +{ + fastio; + cin >> n >> m; + + for(int i = 1;i <= n;i++) + { + for(int j = 1;j <= m;j++) + { + cin >> dp[i][j]; + int min_prv = 1e9; + for(int k = 1;k <= m;k++) + { + if(j == k) continue; + min_prv = min(min_prv, dp[i - 1][k]); + } + dp[i][j] += min_prv; + if(i == n) ans = min(ans, dp[i][j]); + } + } + + cout << ans << '\n'; +} diff --git a/kjhonggg95/baekjoon/28270.cpp b/kjhonggg95/baekjoon/28270.cpp new file mode 100644 index 0000000..2dd70d8 --- /dev/null +++ b/kjhonggg95/baekjoon/28270.cpp @@ -0,0 +1,44 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int main() +{ + fastio; + int n, x; + cin >> n; + + stack s; + s.push({0, 0}); + vector ans; + while(n--) + { + cin >> x; + + if(s.top().X + 2 <= x) + { + cout << -1 << '\n'; + return 0; + } + + if(s.top().X >= x) + { + if(s.top().X > x) while(s.top().X != x) s.pop(); + ans.push_back(s.top().Y + 1); + s.push({x, s.top().Y + 1}); + } + else if(s.top().X + 1 == x) + { + ans.push_back(1); + s.push({x, 1}); + } + } + + for(auto& e : ans) + cout << e << ' '; + return 0; +} diff --git a/kjhonggg95/baekjoon/28291.cpp b/kjhonggg95/baekjoon/28291.cpp new file mode 100644 index 0000000..7a6b106 --- /dev/null +++ b/kjhonggg95/baekjoon/28291.cpp @@ -0,0 +1,83 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +#define DUST 1 +#define BLOCK 2 +#define LAMP 3 + +int dx[4] = {1, 0, -1, 0}; +int dy[4] = {0, 1, 0, -1}; + +int r, c, rr, cc, n; + +int arr[55][55]; // 레드스톤 종류 +int power[55][55]; // 가지고 있는 전기신호 + +set lamp_pos; + +int main() +{ + fastio; + cin >> c >> r >> n; + + queue> q; // {위치, 전기신호}; + + for (int i = 0; i < n; i++) + { + string s; + cin >> s >> cc >> rr; + + if (s == "redstone_dust") + arr[rr][cc] = DUST; + else if (s == "redstone_block") + { + arr[rr][cc] = BLOCK; + q.push({{rr, cc}, 16}); + } + else if (s == "redstone_lamp") + { + arr[rr][cc] = LAMP; + lamp_pos.insert({rr, cc}); + } + } + + while (!q.empty()) + { + auto cur = q.front().X; + auto sig = q.front().Y; + q.pop(); + + if (sig == 0) continue; + + power[cur.X][cur.Y] = sig; + + for (int dir = 0; dir < 4; dir++) + { + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; + + if (nx < 0 || nx >= r || ny < 0 || ny >= c) continue; + if (arr[nx][ny] == 0 || sig - 1 <= power[nx][ny]) continue; + + if (arr[nx][ny] == DUST) + q.push({{nx, ny}, sig - 1}); + else if (arr[nx][ny] == LAMP) + power[nx][ny] = sig - 1; + } + } + + for (auto e : lamp_pos) + if (power[e.X][e.Y] == 0) + { + cout << "failed" << '\n'; + return 0; + } + + cout << "success" << '\n'; + return 0; +} diff --git a/kjhonggg95/baekjoon/28325.cpp b/kjhonggg95/baekjoon/28325.cpp new file mode 100644 index 0000000..927d92a --- /dev/null +++ b/kjhonggg95/baekjoon/28325.cpp @@ -0,0 +1,50 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +ll n; +ll sub[250001]; +ll ans; +ll dp[250001][2]; + +void func(int k) +{ + for(int i = 2;i <= k;i++) + { + // i번 개미굴에 개미가 살지 않는 경우 + // 1. i - 1 번에 개미가 살지 않는 경우 + i번 쪽방 + // 2. i - 1 번에 개미가 사는 경우 + i번 쪽방 + dp[i][0] = max(dp[i-1][0], dp[i-1][1]) + sub[i]; + + // i번 개미굴에 개미가 사는 경우 + // -> i - 1번에 개미가 살지 않는 경우 + 1 + dp[i][1] = dp[i-1][0] + 1; + } +} + +int main() +{ + fastio; + cin >> n; + for(int i = 1;i <= n;i++) + cin >> sub[i]; + + // 1번 개미굴에 개미가 살지 않는 경우 + dp[1][0] = sub[1]; + func(n); + ans = max(dp[n][0], dp[n][1]); + + memset(dp, 0, sizeof(dp)); + + // 1번 개미굴에 개미가 사는 경우 + dp[1][1] = 1; + func(n - 1); + ans = max({ans, dp[n - 1][0] + sub[n], dp[n - 1][1] + sub[n]}); + + cout << ans << '\n'; + return 0; +} diff --git a/kjhonggg95/baekjoon/30108.cpp b/kjhonggg95/baekjoon/30108.cpp new file mode 100644 index 0000000..bfbb9fe --- /dev/null +++ b/kjhonggg95/baekjoon/30108.cpp @@ -0,0 +1,31 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + + +int main() +{ + fastio; + int n; + cin >> n; + vector v(n); + for(int i = 0;i> p; + } + + for(int i = 0;i> v[i]; + sort(v.begin(), v.end(), greater<>()); + ll ans = 0; + for(auto e : v) + { + ans += e; + cout << ans << '\n'; + } +} diff --git a/kjhonggg95/baekjoon/4095.cpp b/kjhonggg95/baekjoon/4095.cpp new file mode 100644 index 0000000..595ade2 --- /dev/null +++ b/kjhonggg95/baekjoon/4095.cpp @@ -0,0 +1,35 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dp[1005][1005]; + +int main() +{ + fastio; + int n, m; + while(cin >> n >> m) + { + if(n == 0 && m == 0) return 0; + memset(dp, 0, sizeof(dp)); + + int ans = 0; + + for(int i = 1;i <= n;i++) + { + for(int j = 1;j <= m;j++) + { + cin >> dp[i][j]; + if(dp[i][j] == 0) continue; + dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + 1; + ans = max(ans, dp[i][j]); + } + } + + cout << ans << '\n'; + } +} diff --git a/kjhonggg95/baekjoon/4650.cpp b/kjhonggg95/baekjoon/4650.cpp new file mode 100644 index 0000000..06f8799 --- /dev/null +++ b/kjhonggg95/baekjoon/4650.cpp @@ -0,0 +1,65 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int p[30]; + +int find(int a) +{ + if (p[a] < 0) return a; + return p[a] = find(p[a]); +} + +bool isDiff(int a, int b) +{ + a = find(a); b = find(b); + + if (a == b) return false; + + p[b] = a; + return true; +} + +int main() +{ + fastio; + int n; + while (cin >> n) + { + if(n == 0) break; + memset(p, -1, sizeof(p)); + vector> v; + int cnt = 0, ans = 0; + + // 간선 정보 입력(양방향) + for (int i = 0; i < n - 1; i++) + { + char src, dst; + int k, w; + cin >> src >> k; + while (k--) + { + cin >> dst >> w; + v.push_back({w, {src - 'A', dst - 'A'}}); + } + } + + sort(v.begin(), v.end()); + + for(auto e : v) + { + if(!isDiff(e.Y.X, e.Y.Y)) continue; + + cnt++; + ans += e.X; + + if(cnt == n - 1) break; + } + + cout << ans << '\n'; + } +} diff --git a/kjhonggg95/baekjoon/4920.cpp b/kjhonggg95/baekjoon/4920.cpp new file mode 100644 index 0000000..388a696 --- /dev/null +++ b/kjhonggg95/baekjoon/4920.cpp @@ -0,0 +1,114 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int arr[101][101]; + +int main() +{ + fastio; + int n; + for (int t = 1;;t++) + { + cin >> n; + if (n == 0) + return 0; + + memset(arr, 0, sizeof(arr)); + int mx = -1e9; + + for (int i = 0; i < n; i++) + for (int j = 0; j < n; j++) + cin >> arr[i][j]; + + // ■ ■ ■ ■ + for (int i = 0; i < n; i++) + for (int j = 0; j < n - 3; j++) + mx = max(mx, arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i][j + 3]); + + // ■ + // ■ + // ■ + // ■ + for (int i = 0; i < n - 3; i++) + for (int j = 0; j < n; j++) + mx = max(mx, arr[i][j] + arr[i + 1][j] + arr[i + 2][j] + arr[i + 3][j]); + + // ■ ■ + // ■ ■ + for (int i = 0; i < n - 1; i++) + for (int j = 0; j < n - 2; j++) + mx = max(mx, arr[i][j] + arr[i][j + 1] + arr[i + 1][j + 1] + arr[i + 1][j + 2]); + + // ■ + // ■ ■ + // ■ + for (int i = 0; i < n - 2; i++) + for (int j = 0; j < n - 1; j++) + mx = max(mx, arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 2][j]); + + // ■ ■ ■ + // ■ + for (int i = 0; i < n - 1; i++) + for (int j = 0; j < n - 2; j++) + mx = max(mx, arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 2]); + + // ■ + // ■ + // ■ ■ + for (int i = 0; i < n - 2; i++) + for (int j = 0; j < n - 1; j++) + mx = max(mx, arr[i][j + 1] + arr[i + 1][j + 1] + arr[i + 2][j + 1] + arr[i + 2][j]); + + // ■ + // ■ ■ ■ + for (int i = 0; i < n - 1; i++) + for (int j = 0; j < n - 2; j++) + mx = max(mx, arr[i][j] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 1][j + 2]); + + // ■ ■ + // ■ + // ■ + for (int i = 0; i < n - 2; i++) + for (int j = 0; j < n - 1; j++) + mx = max(mx, arr[i][j] + arr[i][j + 1] + arr[i + 1][j] + arr[i + 2][j]); + + // ■ ■ ■ + // ■ + for (int i = 0; i < n - 1; i++) + for (int j = 0; j < n - 2; j++) + mx = max(mx, arr[i][j] + arr[i][j + 1] + arr[i][j + 2] + arr[i + 1][j + 1]); + + // ■ + // ■ ■ + // ■ + for (int i = 0; i < n - 2; i++) + for (int j = 0; j < n - 1; j++) + mx = max(mx, arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 2][j + 1]); + + // ■ + // ■ ■ ■ + for (int i = 0; i < n - 1; i++) + for (int j = 0; j < n - 2; j++) + mx = max(mx, arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 1][j + 2]); + + // ■ + // ■ ■ + // ■ + for (int i = 0; i < n - 2; i++) + for (int j = 0; j < n - 1; j++) + mx = max(mx, arr[i][j] + arr[i + 1][j] + arr[i + 1][j + 1] + arr[i + 2][j]); + + // ■ ■ + // ■ ■ + for (int i = 0; i < n - 1; i++) + for (int j = 0; j < n - 1; j++) + mx = max(mx, arr[i][j] + arr[i][j + 1] + arr[i + 1][j] + arr[i + 1][j + 1]); + + cout << t << ". " << mx << '\n'; + } +} diff --git a/kjhonggg95/baekjoon/5546.cpp b/kjhonggg95/baekjoon/5546.cpp new file mode 100644 index 0000000..aecb71a --- /dev/null +++ b/kjhonggg95/baekjoon/5546.cpp @@ -0,0 +1,51 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +ll dp[101][3][2]; +int pre[101]; + +// [i][j][k] : i번째날에 j파스타를 먹는 경우의 수 +// k : 0 -> 전날 다른 종류를 먹은 상태 +// k : 1 -> 이틀 연속으로 먹은 상태 + +int main() +{ + fastio; + int n, k; + cin >> n >> k; + + while (k--) + { + int a, b; + cin >> a >> b; + pre[a] = b; + } + + if(pre[1] != 0) dp[1][pre[1] - 1][0] = 1; + else dp[1][0][0] = dp[1][1][0] = dp[1][2][0] = 1; + + for (int i = 2; i <= n; i++) + { + if(pre[i] != 0) + { + int k = pre[i] - 1; + dp[i][k][0] = (dp[i-1][(k + 1) % 3][0] + dp[i-1][(k + 1) % 3][1] + dp[i-1][(k + 2) % 3][0] + dp[i-1][(k + 2) % 3][1]) % 10000; + dp[i][k][1] = dp[i-1][k][0]; + } + else + { + for(int k = 0;k<3;k++) + { + dp[i][k][0] = (dp[i-1][(k + 1) % 3][0] + dp[i-1][(k + 1) % 3][1] + dp[i-1][(k + 2) % 3][0] + dp[i-1][(k + 2) % 3][1]) % 10000; + dp[i][k][1] = dp[i-1][k][0]; + } + } + } + + cout << (dp[n][0][0] + dp[n][0][1] + dp[n][1][0] + dp[n][1][1] + dp[n][2][0] + dp[n][2][1]) % 10000 << '\n'; +} diff --git a/kjhonggg95/baekjoon/5547.cpp b/kjhonggg95/baekjoon/5547.cpp new file mode 100644 index 0000000..7b935d6 --- /dev/null +++ b/kjhonggg95/baekjoon/5547.cpp @@ -0,0 +1,53 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int dx[6] = {-1, -1, 0, 0, 1, 1}; +int dy[6] = {0, 1, -1, 1, 0, 1}; + +int arr[103][103]; +bool vis[103][103]; + +int main() +{ + fastio; + int r, c; + cin >> c >> r; + for (int i = 1; i <= r; i++) + for (int j = 1; j <= c; j++) + cin >> arr[i][j]; + + queue q; + q.push({0, 0}); + vis[0][0] = true; + + int cnt = 0; + + while (!q.empty()) + { + auto cur = q.front(); + q.pop(); + + for (int dir = 0; dir < 6; dir++) + { + int nx = cur.X + dx[dir]; + int ny = cur.Y + dy[dir]; + + if(cur.X % 2 == 0 && dx[dir] != 0) ny--; + + cnt += (arr[nx][ny] == 1); + + if (nx < 0 || nx > r + 1 || ny < 0 || ny > c + 1) continue; + if (vis[nx][ny] || arr[nx][ny] == 1) continue; + + q.push({nx, ny}); + vis[nx][ny] = true; + } + } + + cout << cnt << '\n'; +} diff --git a/kjhonggg95/baekjoon/6086.cpp b/kjhonggg95/baekjoon/6086.cpp new file mode 100644 index 0000000..6732e05 --- /dev/null +++ b/kjhonggg95/baekjoon/6086.cpp @@ -0,0 +1,88 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +const int MAX_V = 52; +const int INF = 1e9; + +int c[MAX_V][MAX_V]; // 용량 +int f[MAX_V][MAX_V]; // 유량 +vector adj[MAX_V]; // 인접리스트 + +int prv[MAX_V]; + +int c2i(char c) +{ + if(c <= 'Z') + return c - 'A'; + return c - 'a' + 26; +} + +int main() +{ + fastio; + int n; + cin >> n; + for(int i = 0;i> u >> v >> w; + u = c2i(u); v = c2i(v); + c[u][v] = c[v][u] += w; + adj[u].push_back(v); + adj[v].push_back(u); + } + + int tot = 0; // 총 유량 + int s = c2i('A'); // 소스 + int e = c2i('Z'); // 싱크 + + while(1) + { + memset(prv, -1, sizeof(prv)); + + queue q; + q.push(s); + + while(!q.empty() && prv[e] == -1) + { + int cur = q.front(); q.pop(); + + for(auto nxt : adj[cur]) + { + // cur -> nxt 로 흘려보낼 여유가 남아있는지 && nxt를 아직 방문하지 않았는지 + if(c[cur][nxt] - f[cur][nxt] > 0 && prv[nxt] == -1) + { + q.push(nxt); + prv[nxt] = cur; + if(nxt == e) break; // 싱크 도달시 탈출 + } + } + } + + // 싱크로 가는 경로가 더 없으면 루프 탈출 + if(prv[e] == -1) break; + + int flow = INF; + + // 경로상에서 허용치가 가장 낮은 곳 찾기 + for(int i = e;i!=s;i = prv[i]) + flow = min(flow, c[prv[i]][i] - f[prv[i]][i]); + + // 경로에 위에서 찾은 flow만큼 유량 흘려보냄 + for(int i = e;i!=s;i = prv[i]) + { + f[prv[i]][i] += flow; + f[i][prv[i]] -= flow; + } + + tot += flow; + } + + cout << tot << '\n'; +} diff --git a/kjhonggg95/baekjoon/7983.cpp b/kjhonggg95/baekjoon/7983.cpp new file mode 100644 index 0000000..18b7de9 --- /dev/null +++ b/kjhonggg95/baekjoon/7983.cpp @@ -0,0 +1,30 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int main() +{ + fastio; + int n; + cin >> n; + vector v(n); // {마감일, 걸리는 시간} + for(int i = 0;i> v[i].Y >> v[i].X; + sort(v.begin(), v.end(), greater<>()); + + int last = 1e9 + 10; + + for(auto& e : v) + { + if(e.X < last) + last = e.X - e.Y; + else + last -= e.Y; + } + + cout << last << '\n'; +} diff --git a/kjhonggg95/baekjoon/9077.cpp b/kjhonggg95/baekjoon/9077.cpp new file mode 100644 index 0000000..3a8dd2c --- /dev/null +++ b/kjhonggg95/baekjoon/9077.cpp @@ -0,0 +1,37 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int sum[10011][10011]; + +int main() +{ + fastio; + int t; + cin >> t; + while (t--) + { + memset(sum, 0, sizeof(sum)); + int n, ans = 0; + cin >> n; + while (n--) + { + int x, y; + cin >> x >> y; + for (int i = x; i <= x + 10; i++) + { + for (int j = y; j <= y + 10; j++) + { + sum[i][j]++; + ans = max(ans, sum[i][j]); + } + } + } + + cout << ans << '\n'; + } +} diff --git a/kjhonggg95/baekjoon/9489.cpp b/kjhonggg95/baekjoon/9489.cpp new file mode 100644 index 0000000..348d832 --- /dev/null +++ b/kjhonggg95/baekjoon/9489.cpp @@ -0,0 +1,51 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int n, k, prv, cnt, p_idx, idx; + +int p[1000001]; +vector adj[1000001]; + +int main() +{ + fastio; + while (cin >> n >> k) + { + if(n == 0 && k == 0) return 0; + cnt = p_idx = 0; + idx = 1; + memset(p, 0, sizeof(p)); + + vector v(n); + + for (int i = 0; i < n; i++) + cin >> v[i]; + + prv = v[1] - 1; + + while(idx < n) + { + auto cur = v[idx++]; + + if(prv + 1 != cur) + p_idx++; + + prv = cur; + + p[cur] = v[p_idx]; + adj[p[cur]].push_back(cur); + } + + for (auto& par : adj[p[p[k]]]) + cnt += (par == p[k] ? 0 : adj[par].size()); + cout << cnt << '\n'; + + for(auto& e : v) + adj[e].clear(); + } +} diff --git a/kjhonggg95/baekjoon/9694.cpp b/kjhonggg95/baekjoon/9694.cpp new file mode 100644 index 0000000..c1c85ce --- /dev/null +++ b/kjhonggg95/baekjoon/9694.cpp @@ -0,0 +1,69 @@ +#include +#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) +#define X first +#define Y second +using namespace std; +using ll = long long; +using pii = pair; + +int t, n, m, u, v, w; +int d[21]; +int prv[21]; + +void print(int cur) +{ + if (cur == -1) + return; + print(prv[cur]); + cout << cur << ' '; +} + +int main() +{ + fastio; + cin >> t; + for (int tc = 1; tc <= t; tc++) + { + cin >> n >> m; + fill(d, d + m + 1, 1e9); + fill(prv, prv + m + 1, -1); + + vector adj[m]; + + while (n--) + { + cin >> u >> v >> w; + adj[u].push_back({w, v}); + adj[v].push_back({w, u}); + } + + priority_queue, greater> pq; + d[0] = 0; + + pq.push({d[0], 0}); + + while (!pq.empty()) + { + auto cur = pq.top(); + pq.pop(); + + if (d[cur.Y] != cur.X) continue; + + for (auto nxt : adj[cur.Y]) + { + if (d[nxt.Y] <= d[cur.Y] + nxt.X) continue; + d[nxt.Y] = d[cur.Y] + nxt.X; + prv[nxt.Y] = cur.Y; + + pq.push({d[nxt.Y], nxt.Y}); + } + } + + cout << "Case #" << tc << ": "; + if (d[m - 1] == 1e9) + cout << -1; + else + print(m - 1); + cout << '\n'; + } +} diff --git a/kwyoohae/baekjoon/14925.java b/kwyoohae/baekjoon/14925.java new file mode 100644 index 0000000..e64f7a4 --- /dev/null +++ b/kwyoohae/baekjoon/14925.java @@ -0,0 +1,72 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws Exception { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String[] input = br.readLine().split(" "); + int M = Integer.parseInt(input[0]); + int N = Integer.parseInt(input[1]); + + int [][]land = new int[M][N]; + + for (int i = 0; i < M; i++) { + input = br.readLine().split(" "); + for (int j = 0; j < N; j++) { + int num = Integer.parseInt(input[j]); + if (num > 0) { + land[i][j] = -1; + } + } + } + + int answer = 0; + + for (int i = 0; i < M; i++) { + for (int j = 0; j < N; j++) { + if (land[i][j] == -1) + continue; + answer = Math.max(answer, getNumber(land, new Position(i, j, 1), M, N)); + } + } + + System.out.println(answer); + } + + private static int getNumber(int[][] land, Position position, int M, int N) { + for (int i = 1; i <= Math.max(M, N); i++) { + if (!isRectangle(land, i, M, N, position.x, position.y)) + return i; + } + return Math.max(M, N); + } + + private static boolean isRectangle(int[][] land, int num, int M, int N, int x, int y) { + if (x + num > M - 1 || y + num > N - 1) + return false; + + if (land[x + num][y + num] == -1) + return false; + + for (int i = 0; i < num; i++) { + if (land[x + num][y + i] == -1 || land[x + i][y + num] == -1) + return false; + } + return true; + } + + private static class Position { + public int x; + public int y; + public int num; + + public Position(int x, int y, int num) { + this.x = x; + this.y = y; + this.num = num; + } + } +} diff --git a/kwyoohae/baekjoon/17305.java b/kwyoohae/baekjoon/17305.java new file mode 100644 index 0000000..a8b3de7 --- /dev/null +++ b/kwyoohae/baekjoon/17305.java @@ -0,0 +1,55 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.StringTokenizer; + +public class Main { + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + int w = Integer.parseInt(st.nextToken()); + + List killo3 = new ArrayList<>(); + List killo5 = new ArrayList<>(); + + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + int killo = Integer.parseInt(st.nextToken()); + int sugar = Integer.parseInt(st.nextToken()); + + if (killo == 3) { + killo3.add(sugar); + } else { + killo5.add(sugar); + } + } + + Collections.sort(killo3, Collections.reverseOrder()); + Collections.sort(killo5, Collections.reverseOrder()); + + long[] sum3 = new long [killo3.size() + 1]; + long[] sum5 = new long [killo5.size() + 1]; + + for (int i = 1; i <= killo3.size(); i++) { + sum3[i] = killo3.get(i -1) + sum3[i-1]; + } + + for (int i = 1; i <= killo5.size(); i++) { + sum5[i] = killo5.get(i -1) + sum5[i-1]; + } + + long answer =0; + int index3 = Math.min(killo3.size(), w/3); + while (index3 >= 0) { + int index5 = Math.min((w - 3 * index3) / 5, killo5.size()); + answer = Math.max(sum3[index3] + sum5[index5] , answer); + index3--; + } + + System.out.println(answer); + } +} \ No newline at end of file diff --git a/kwyoohae/baekjoon/23740.java b/kwyoohae/baekjoon/23740.java new file mode 100644 index 0000000..481f8d5 --- /dev/null +++ b/kwyoohae/baekjoon/23740.java @@ -0,0 +1,81 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +public class Main { + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + + List buses = new ArrayList<>(); + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + + int start = Integer.parseInt(st.nextToken()); + int end = Integer.parseInt(st.nextToken()); + int cost = Integer.parseInt(st.nextToken()); + + Bus bus = new Bus(start, end, cost); + buses.add(bus); + } + + buses.sort((a, b) -> { + if (a.start == b.start) { + return a.end - b.end; + } + return a.start - b.start; + }); + + int start = buses.get(0).start; + int end = buses.get(0).end; + int cost = buses.get(0).cost; + + List answer = new ArrayList<>(); + for (int i = 1; i < buses.size(); i++) { + int oppStart = buses.get(i).start; + int oppEnd = buses.get(i).end; + int oppCost = buses.get(i).cost; + + if (oppStart > end) { + answer.add(new Bus(start, end, cost)); + start = oppStart; + end = oppEnd; + cost = oppCost; + } else { + if (cost > oppCost) + cost = oppCost; + if (end < oppEnd) + end = oppEnd; + } + } + answer.add(new Bus(start, end, cost)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + bw.write(answer.size() + " "); + bw.newLine(); + for (Bus bus : answer) { + bw.write(bus.start + " " + bus.end + " " + bus.cost); + bw.newLine(); + } + bw.flush(); + bw.close(); + } + + private static class Bus { + public int start; + public int end; + public int cost; + + public Bus(int start, int end, int cost) { + this.start = start; + this.end = end; + this.cost = cost; + } + } +} diff --git a/kwyoohae/baekjoon/2655.java b/kwyoohae/baekjoon/2655.java new file mode 100644 index 0000000..cc7ba5b --- /dev/null +++ b/kwyoohae/baekjoon/2655.java @@ -0,0 +1,67 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.*; + +public class Main { + + public static void main(String[] args) throws Exception { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int num = Integer.parseInt(br.readLine()); + + StringTokenizer st; + Block[] blocks = new Block[num + 1]; + int[] dp = new int[num + 1]; + + blocks[0] = new Block(0, 0, 0,0 ); + for (int i = 1; i <= num; i++) { + st = new StringTokenizer(br.readLine()); + + int area = Integer.parseInt(st.nextToken()); + int height = Integer.parseInt(st.nextToken()); + int weight = Integer.parseInt(st.nextToken()); + + blocks[i] = new Block(i, area, height, weight); + } + + Arrays.sort(blocks, (a,b) -> a.area - b.area); + + int maxHeight = 0; + for (int i = 1; i <= num; i++) { + for (int j = 0; j < i; j++) { + + if (blocks[i].weight > blocks[j].weight) { + dp[i] = Math.max(dp[i], dp[j] + blocks[i].height); + } + } + maxHeight = Math.max(maxHeight, dp[i]); + } + + List answer = new ArrayList<>(); + for (int i = num ; i > 0; i--) { + if (maxHeight == dp[i]) { + answer.add(blocks[i].num); + maxHeight -= blocks[i].height; + } + } + + System.out.println(answer.size()); + for (int i = answer.size() - 1; i >= 0; i--){ + System.out.println(answer.get(i)); + } + } + + public static class Block { + public int num; + public int area; + public int height; + public int weight; + + public Block(int num, int area, int height, int weight) { + this.num = num; + this.area = area; + this.height = height; + this.weight = weight; + } + } +} diff --git a/kwyoohae/baekjoon/28017.java b/kwyoohae/baekjoon/28017.java new file mode 100644 index 0000000..671b523 --- /dev/null +++ b/kwyoohae/baekjoon/28017.java @@ -0,0 +1,59 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class Main { + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + int M = Integer.parseInt(st.nextToken()); + + int[][] game = new int[N][M]; + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < M; j++) { + game[i][j] = Integer.parseInt(st.nextToken()); + } + } + + int[][] dp = new int[N][M]; + + for (int i = 0; i < N; i++) { + for (int j = 0; j < M; j++) { + for (int k = 0; k < M; k++) { + if (i == 0) { + dp[i][k] = game[i][k]; + continue; + } + + if (j != k) { + if (dp[i][k] == 0) { + dp[i][k] = dp[i-1][j] + game[i][k]; + } else { + dp[i][k] = Math.min(dp[i][k], dp[i-1][j] + game[i][k]); + } + } + } + } + } + + int answer = dp[N-1][0]; + for (int i = 1; i < M; i++) { + answer = Math.min(answer, dp[N-1][i]); + } + System.out.println(answer); + } + + private static void print(int[][] arr) { + for (int i = 0; i < arr.length; i++) { + for (int j = 0; j < arr[0].length; j++) { + System.out.print(arr[i][j] + " "); + } + System.out.println(); + } + } + +} diff --git a/kwyoohae/baekjoon/28291.java b/kwyoohae/baekjoon/28291.java new file mode 100644 index 0000000..2bb37d6 --- /dev/null +++ b/kwyoohae/baekjoon/28291.java @@ -0,0 +1,108 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.*; + +public class Main { + + public static int[] dw = {1, -1, 0, 0}; + public static int[] dh = {0, 0, 1, -1}; + + private static final int DUST = 1; + private static final int BLOCK = 2; + private static final int LAMP = 3; + + public static void main(String[] args) throws Exception { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String[] input = br.readLine().split(" "); + int W = Integer.parseInt(input[0]); + int H = Integer.parseInt(input[1]); + + int repeatNumber = Integer.parseInt(br.readLine()); + + List lamps = new ArrayList<>(); + List blocks = new ArrayList<>(); + int [][]map = new int[W][H]; + int [][]light = new int[W][H]; + boolean [][]visited = new boolean[W][H]; + + for (int i = 0 ; i < repeatNumber; i++) { + input = br.readLine().split(" "); + int w = Integer.parseInt(input[1]); + int h = Integer.parseInt(input[2]); + + if (input[0].equals("redstone_dust")) + map[w][h] = DUST; + else if (input[0].equals("redstone_block")) { + map[w][h] = BLOCK; + light[w][h] = 15; + blocks.add(new Position(w, h)); + for (int j = 0; j < 4; j++) { + int tw = w + dw[j]; + int th = h + dh[j]; + if (tw < 0 || tw > W - 1 || th < 0 || th > H - 1) + continue; + light[tw][th] = 15; + } + } + else { + map[w][h] = LAMP; + lamps.add(new Position(w, h)); + } + } + + Queue q = new LinkedList<>(); + for (Position block : blocks) { + q.add(block); + } + + while(!q.isEmpty()) { + Position pollPosition = q.poll(); + int pollW = pollPosition.w; + int pollH = pollPosition.h; + if (!visited[pollW][pollH]) { + visited[pollW][pollH] = true; + int energy = light[pollW][pollH]; + for (int i = 0; i < 4; i++) { + int w = pollW + dw[i]; + int h = pollH + dh[i]; + + if (w < 0 || w > W - 1 || h < 0 || h > H - 1) + continue; + else if (map[w][h] == 0) + continue; + + if ((map[w][h] == DUST || map[w][h] == LAMP) && light[w][h] < energy - 1) { + light[w][h] = energy - 1; + } + if (map[w][h] == DUST) + q.add(new Position(w, h)); + } + + if (checkLightOn(light, lamps)) { + System.out.println("success"); + return; + } + } + } + + System.out.println("failed"); + } + + private static boolean checkLightOn(int[][] light, List lamps) { + for (Position lamp : lamps) { + if (light[lamp.w][lamp.h] == 0) + return false; + } + return true; + } + + private static class Position { + public int w; + public int h; + public Position(int w, int h) { + this.w = w; + this.h = h; + } + } +} diff --git a/kwyoohae/baekjoon/28325.java b/kwyoohae/baekjoon/28325.java new file mode 100644 index 0000000..4727bff --- /dev/null +++ b/kwyoohae/baekjoon/28325.java @@ -0,0 +1,56 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class Main { + + public static void main(String[] args) throws Exception{ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + + long []ants = new long[N]; + String []input = br.readLine().split(" "); + for (int i = 0; i < N; i++) { + ants[i] = Long.parseLong(input[i]); + } + + boolean []visited = new boolean[N]; + long answer1 = ants[0]; + if (ants[0] == 0) { + visited[0] = true; + answer1 = 1; + } + for (int i = 1; i < N; i++) { + if (ants[i] > 0) { + answer1 += ants[i]; + } else if (ants[i] == 0 && !visited[getIndex(N, i, 0)] && !visited[getIndex(N, i, 1)]) { + visited[i] = true; + answer1++; + } + } + + long answer2 = 0; + visited = new boolean[N]; + for (int i = 1; i < N; i++) { + if (ants[i] > 0) { + answer2 += ants[i]; + } else if (ants[i] == 0 && !visited[getIndex(N, i, 0)] && !visited[getIndex(N, i, 1)]) { + visited[i] = true; + answer2++; + } + } + + System.out.println(Math.max(answer2, answer1)); + } + + public static int getIndex(int N, int index, int direction) { + if (direction == 0) { + if (index == 0) + return N -1; + return index - 1; + } + + if (index == N -1) + return 0; + return index + 1; + } +} \ No newline at end of file diff --git a/kwyoohae/baekjoon/4650.java b/kwyoohae/baekjoon/4650.java new file mode 100644 index 0000000..bcc53e8 --- /dev/null +++ b/kwyoohae/baekjoon/4650.java @@ -0,0 +1,88 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.*; + +public class Main { + + private static int[] parents; + private static PriorityQueue pq; + + public static void main(String[] args) throws Exception { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + while (true) { + String[] input = br.readLine().split(" "); + int V = Integer.parseInt(input[0]); + + if (V == 0) { + break; + } + parents = new int[V + 1]; + pq = new PriorityQueue<>(); + + for (int i = 0; i < V - 1; i++) { + input = br.readLine().split(" "); + int from = convertToInt(input[0]); + int edgeNum = Integer.parseInt(input[1]); + for (int j = 1; j <= edgeNum; j++) { + int to = convertToInt(input[j* 2]); + int weight = Integer.parseInt(input[j * 2 + 1]); + pq.add(new Node(from, to, weight)); + } + } + + // Initialize + for (int i = 1; i <= V; i++) { + parents[i] = i; + } + + int sum = 0; + while (!pq.isEmpty()) { + Node node = pq.poll(); + if (find(node.from) != find(node.to)) { + union(node.from, node.to); + sum += node.weight; + } + } + System.out.println(sum); + } + } + + private static int convertToInt(String str) { + return str.charAt(0) - 64; + } + + private static void union(int from, int to) { + int p1 = find(from); + int p2 = find(to); + + if (p1 < p2) + parents[p2] = p1; + else + parents[p1] = p2; + + } + + private static int find(int v) { + if(parents[v] == v) + return v; + else + return parents[v] = find(parents[v]); + } + private static class Node implements Comparable { + public int from; + public int to; + public int weight; + + public Node(int from, int to, int weight) { + this.from = from; + this.to = to; + this.weight = weight; + } + + @Override + public int compareTo(Node o) { + return this.weight - o.weight; + } + } +} diff --git a/kwyoohae/baekjoon/7983.java b/kwyoohae/baekjoon/7983.java new file mode 100644 index 0000000..558c6aa --- /dev/null +++ b/kwyoohae/baekjoon/7983.java @@ -0,0 +1,27 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class Main { + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int n = Integer.parseInt(br.readLine()); + + int [][] homework = new int[n][2]; + for (int i = 0; i < n; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + homework[i][0] = Integer.parseInt(st.nextToken()); + homework[i][1] = Integer.parseInt(st.nextToken()); + } + + Arrays.sort(homework, (a, b) -> b[1] - a[1]); + + int remainTime = homework[0][1]; + for (int i = 0; i < n; i++) { + remainTime = Math.min(homework[i][1], remainTime) - homework[i][0]; + } + System.out.println(remainTime); + } +} \ No newline at end of file diff --git a/kwyoohae/baekjoon/9489.java b/kwyoohae/baekjoon/9489.java new file mode 100644 index 0000000..8b1e9f6 --- /dev/null +++ b/kwyoohae/baekjoon/9489.java @@ -0,0 +1,54 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +public class Main { + + public static void main(String[] args) throws Exception{ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + while(true) { + String[] input = br.readLine().split(" "); + int N = Integer.parseInt(input[0]); + int K = Integer.parseInt(input[1]); + + if (N == 0 && K == 0) { + break; + } + + input = br.readLine().split(" "); + + int[] nodes = new int[N + 1]; + int[] parents = new int[N + 1]; + parents[0] = -1; + + int kIndex = 0; + for (int i = 1; i <= N; i++) { + nodes[i] = Integer.parseInt(input[i-1]); + if (nodes[i] == K) + kIndex = i; + } + + int parentIndex = 1; + parents[1] = 0; + for (int i = 2; i <= N; i++) { + parents[i] = parentIndex; + if (i < N && nodes[i] + 1 != nodes[i + 1]) + parentIndex++; + } + + int answer = 0; + for (int i = 1; i <= N; i++) { + if (parents[parents[i]] == parents[parents[kIndex]] && parents[i] != parents[kIndex]) { + answer++; + } + } + + System.out.println(answer); + } + } + +} + +/* +13 1 +1 3 4 5 7 8 9 11 12 14 17 18 20 + */ \ No newline at end of file diff --git a/script/update_readme.py b/script/update_readme.py new file mode 100644 index 0000000..651bc29 --- /dev/null +++ b/script/update_readme.py @@ -0,0 +1,169 @@ +import requests +import base64 +import os + +GH_TOKEN = os.environ.get('GH_TOKEN') + +# 유저, 디렉토리 설정 +users = ["ddingmin", "kjhonggg95", "qsunki", "dydwo0740", "kwyoohae"] +dirs = ["baekjoon"] + +url = f"https://api.github.com/repos/{os.environ.get('GITHUB_REPOSITORY')}/contents/" +solution_url = f"https://github.com/{os.environ.get('GITHUB_REPOSITORY')}/blob/main/" +boj_url = "https://www.acmicpc.net/problem/" +find_level_url = "https://solved.ac/api/v3/problem/show?problemId=" +badge_url = "https://static.solved.ac/tier_small/" + +# GitHub API 호출 + +problems = {} + +for user in users: + for dir in dirs: + target_url = url + user + "/" + dir + + print(f"target_url: {target_url}") + response = requests.get(target_url) + + print(f"Response Statuscode: {response.status_code}") + + file_names = [item["name"] for item in response.json()] + + for file_name in file_names: + solved_number = file_name.split(".")[0] + if solved_number not in problems: + # boj 문제 정보 + data = requests.get(find_level_url + solved_number).json() + + # boj 레벨, 문제 이름 + level = str(data["level"]) + problem_title = data["titleKo"] + + problems[solved_number] = {"name": solved_number, "solved_users": {user: user}, + "problem_link": boj_url + solved_number, + "solution_links": {user: solution_url + user + "/" + dir + "/" + file_name}, + "badge": (badge_url + level + ".svg"), "problem_title": problem_title} + else: + problems[solved_number]["solution_links"][user] = (solution_url + user + "/" + dir + "/" + file_name) + problems[solved_number]["solved_users"][user] = user + +readme = """# Algorithm-Study +solve problem everyday + +## 🤖 스터디 멤버 + + + + + + + + + + + + + + + + +
+ +
+ kjhonggg95 +
+ +
+ dydwo0740 +
+ +
+ qsunki +
+ +
+ ddingmin +
+ +
+ kwYoohae +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ Baekjoon +
+ solved.ac +
+ +
+ +## :heavy_check_mark: Solved +| 문제 | 난이도 | 풀이 링크 | +| :-----: | :-----: | :-----: | +""" + +for key in problems: + line = f"""| {key}번: {problems[key]["problem_title"]} | |""" + for name in users: + if name in problems[key]["solved_users"]: + line += f"""{name} """ + else: + line += name + " " + line += " | \n" + + readme += line + + +update_url = f"https://api.github.com/repos/{os.environ.get('GITHUB_REPOSITORY')}/contents/README.md" +headers = { + "Authorization": f"token {GH_TOKEN}" +} + +# ReadMe 업데이트 + +response = requests.get(update_url, headers=headers) + +if response.status_code == 200: + # Update the content + data = { + "message": "Update Solved Content", + # 생성된 파일 내용을 base64로 인코딩 + "content": base64.b64encode(readme.encode('UTF-8')).decode('ascii'), + "sha": response.json()["sha"], + } + + # Make a PUT request to update the README + response = requests.put(update_url, json=data, headers=headers) + + if response.status_code == 200: + print("README updated successfully.") + else: + print(f"Failed to update README. Status code: {response.status_code}") + print(f"Response Content: {response.content}") +else: + print(f"Failed to fetch README content. Status code: {response.status_code}") + print(f"Response Content: {response.content}")