This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-04] sumin #162 - #188

Merged
ksumini merged 2 commits into
mainfrom
sumin-#162
Sep 5, 2023
Merged

[2023-09-04] sumin #162#188
ksumini merged 2 commits into
mainfrom
sumin-#162

Conversation

@ksumini

Copy link
Copy Markdown
Contributor

PR Summary

풀이시간: 50분

<input>

  • w, h: 방의 가로, 세로 (1 ≤ w, h ≤ 20)
  • 방의 정보
    • .: 깨끗한 칸
    • *: 더러운 칸
    • x: 가구
    • o: 로봇 청소기의 시작 위치
  • 더러운 칸의 개수는 10개를 넘지 않으며, 로봇 청소기의 개수는 항상 하나
  • 입력의 마지막 줄에는 0이 두 개

<solution>

  • 더러운 칸(최대 10)개의 순서를 모두 구하고(10!), 각 더러운 칸(10개)에 대해 BFS를 모두 돌리면 최악의 경우 10! * 400 * 10 = 14,515,200,000로 시간 초과
  • 따라서, 매 순열마다 BFS를 수행하지 않고 미리 시작지점과 더러운 칸들 간의 거리를 계산 = O(WH10)
  • 모든 순열을 만들어 모든 칸을 방문하는데 걸리는 시간 중 최소값을 구한다. -> 모든 순열을 구하는데 O(10! * 10)

<시간복잡도>
O(W * H * 10) + O(더러운 칸의 개수! * 더러운 칸의 개수) = 최대 36,292,000의 연산횟수

@ksuminiksumini added the BOJ label Sep 4, 2023
@ksuminiksumini self-assigned this Sep 4, 2023
@ksuminiksumini linked an issue Sep 4, 2023 that may be closed by this pull request

@zsmallazsmalla left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주석과 코드가 깔끔해서 이해하기 어렵지 않았습니다. 고려할 점을 남겼으니 검토 부탁드리겠습니다! 고생하셨습니다 수민님!

Comment threadBOJ/로봇 청소기/sumin.py Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 메트릭스는 결국 대각선 r=c인 요소를 기준으로 대칭이 되므로, 88행에서
distances[i][j] = distances[j][i] = dist[dirty[j][0]][dirty[j][1]]
이렇게 대칭 원소까지 값을 할당하고, 이후 대칭 원소의 값은 탐색하지 않는 방향으로 탐색하면 BFS 횟수를 반으로 줄일 수 있을 것 같습니다!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 감사합니다 지수님!! 대칭성까지는 생각도 못했는데 배워갑니당~!!

@limstonestonelimstonestone left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭐라 피드백드리기 어려울 정도로 깔끔하고 정석적으로 풀이해내신 것 같습니다 .. ㅎ
변수명, 주석들도 한 눈에 잘 들어오네요 감사합니다 ~!

@Woo-YeolWoo-Yeol left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수민님 문제풀이도 당연히 말할 것 도 없지만 시간 복잡도 계산도 잘해주셔서 너무 감사합니다. 고생하셨습니다 수민님!

@ksumini
ksumini merged commit 295aa13 into mainSep 5, 2023
@ksumini
ksumini deleted the sumin-#162 branch September 5, 2023 15:01
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOJ] 로봇 청소기

4 participants

@ksumini@Woo-Yeol@zsmalla@limstonestone