{"componentChunkName":"component---src-templates-post-template-jsx","path":"/algo/posts/2021-03-29--002","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"62d744c7-0814-5fb0-a013-70df217823c6","html":"<p><span class=\"title__sub1\">#. 테스트 문제</span></p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/67183f8250f34f0646023cd103d64a8b/10ab7/002-01.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 81.25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACiklEQVQ4y5WT7U/TUBTG+2+bIPEDJmgEI8b4jfgBiILzA5pgEFgIL2Zv3dq1Xdd2a1cms4N1a9exsr48no6poGwJN/n1tOm5zz3n3HOYpvYUzdoCKsXHUPh5iGTLhbkxfJ4gy2YewbOXgNEbxP7rmTCiuAKOe4nT0+c4PnmGbPYFZOEVxNJLfD9aBF9cBldYgttZJcF1hMM1RDNgFrdEzK2JePtVw5ONMhY2JcS4f0UREMezYfJFETvfDpFjBQiyjt39Y7BsCYU8i0pFxnDoT5ynHXN3MVarBVmS0DB0uL0eDL2Oeq1OQkOEYTgWegiMbXdxft5Cj8SS9263S6lFkxRv7IMEna6NM9NAj6zjkKB9iWB0TWIhwiAgtYgc7zIz5eXPGuY3Naxs61h4rxIaBv7Nz3Dq5UREPLF3YcoZAZn0CfLyKQpSjsji8rIEp83DrYjoSwI8i6fI87DbOaqzPClDdH/KI6EEnz2A20/D6+xh0NtH60cK58oWege7MFMf0eRSkJRVqPIGlWdv3FZJSf5GFv+xTN1sosCVwXMV1GpnKJeryOV4CKJKbVTFp3QR77ZZfNgRsZrKYv1LCd5wNEn9nggtqw2xoqIsVaHqJjTdgGk2oFP7mIaBHK/hMK/gpFhDOiPhqKDgyg/GEYUhEd2CvpnkMaLqdwcjnF24MC/6uHB9DK5p05ReTiKJJhH9dylhkNxlPCagRu5f+XC8IeHDuxqOnZKNycEBtVFA/knD/+bfCWI8z0OjQalqNXQ6HXAlDpIgoknp1hUFNVWDqqiQRAkyjWIyAO12Gy2aMMuyxqK3m59xHRfWT4tEG1CqCgQSM0jM0HUodCk2HeL0HLI2vL43tQSYzPsvJ1Wog2P96tEAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"002 01\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/67183f8250f34f0646023cd103d64a8b/d9199/002-01.png\"\n        srcset=\"/devHistoryBlog/static/67183f8250f34f0646023cd103d64a8b/8ff5a/002-01.png 240w,\n/devHistoryBlog/static/67183f8250f34f0646023cd103d64a8b/e85cb/002-01.png 480w,\n/devHistoryBlog/static/67183f8250f34f0646023cd103d64a8b/d9199/002-01.png 960w,\n/devHistoryBlog/static/67183f8250f34f0646023cd103d64a8b/07a9c/002-01.png 1440w,\n/devHistoryBlog/static/67183f8250f34f0646023cd103d64a8b/10ab7/002-01.png 1552w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<hr>\n<p><span class=\"title__sub1\">#. 결과 및 풀이</span></p>\n<p><span class=\"title__sub2\">1. 풀이</span></p>\n<ul>\n<li>처음엔 문자열 sort를 생각했는데, pattern의 길이가 길면 sort 비용이 클 것이다.</li>\n<li>문자열의 각 문자를 아스키 코드값으로 바꿔 int[]로 변환하여 비교한다.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Test</span>\n<span class=\"token keyword\">void</span> 아나그램<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">Assertions</span><span class=\"token punctuation\">.</span><span class=\"token function\">assertArrayEquals</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token keyword\">int</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">{</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span><span class=\"token number\">6</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> 아나그램<span class=\"token function\">_solution</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"BACDGABCDA\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"ABCD\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> 아나그램<span class=\"token function\">_solution</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> text<span class=\"token punctuation\">,</span> <span class=\"token class-name\">String</span> pattern<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token comment\">// 대문자만 들어온다고 가졍하자.</span>\n    <span class=\"token comment\">// 대문자 A-Z까지의 아스키 코드값은 65 ~ 90, 26개</span>\n    <span class=\"token keyword\">final</span> <span class=\"token keyword\">int</span> MIN_ASCII <span class=\"token operator\">=</span> <span class=\"token number\">65</span><span class=\"token punctuation\">,</span> RANGE <span class=\"token operator\">=</span> <span class=\"token number\">26</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token comment\">// 패턴 문자열의 각 문자를 아스키 코드값으로 변화하여</span>\n    <span class=\"token comment\">// 해당 index에 카운트를 더한다.</span>\n    <span class=\"token comment\">// 즉, ABCD는 [1,1,1,1,0,0,0,...,0] 이 된다.</span>\n    <span class=\"token comment\">// ABAZ 일 경우 [2,1,0,0,0,...,0,1] 이 된다.</span>\n    <span class=\"token keyword\">int</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> patternAscii <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token keyword\">int</span><span class=\"token punctuation\">[</span>RANGE<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span> alpha <span class=\"token operator\">:</span> pattern<span class=\"token punctuation\">.</span><span class=\"token function\">toCharArray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        patternAscii<span class=\"token punctuation\">[</span>alpha<span class=\"token operator\">-</span>MIN_ASCII<span class=\"token punctuation\">]</span><span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token class-name\">List</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Integer</span><span class=\"token punctuation\">></span></span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i<span class=\"token operator\">=</span><span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">&lt;</span>text<span class=\"token punctuation\">.</span><span class=\"token function\">length</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token punctuation\">(</span>pattern<span class=\"token punctuation\">.</span><span class=\"token function\">length</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">int</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> compareArr <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token keyword\">int</span><span class=\"token punctuation\">[</span>RANGE<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> j<span class=\"token operator\">=</span><span class=\"token number\">0</span><span class=\"token punctuation\">;</span> j<span class=\"token operator\">&lt;</span>pattern<span class=\"token punctuation\">.</span><span class=\"token function\">length</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> j<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            compareArr<span class=\"token punctuation\">[</span>text<span class=\"token punctuation\">.</span><span class=\"token function\">charAt</span><span class=\"token punctuation\">(</span>i<span class=\"token operator\">+</span>j<span class=\"token punctuation\">)</span><span class=\"token operator\">-</span>MIN_ASCII<span class=\"token punctuation\">]</span><span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        \n        <span class=\"token keyword\">boolean</span> isAnagram <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> j<span class=\"token operator\">=</span><span class=\"token number\">0</span><span class=\"token punctuation\">;</span> j<span class=\"token operator\">&lt;</span><span class=\"token number\">26</span><span class=\"token punctuation\">;</span> j<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>patternAscii<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> compareArr<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                isAnagram <span class=\"token operator\">=</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n                <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>isAnagram<span class=\"token punctuation\">)</span>\n            result<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token keyword\">return</span> result<span class=\"token punctuation\">.</span><span class=\"token function\">stream</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">mapToInt</span><span class=\"token punctuation\">(</span>i<span class=\"token operator\">-></span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toArray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<hr>\n<p><span class=\"title__sub2\">배웠다</span></p>\n<ul>\n<li>문자열 비교를 위와 같이 아스키 코드값으로 할 수도 있구나.</li>\n</ul>","fields":{"tagSlugs":["/tags/문자열-비교/"],"slug":"/algo/posts/2021-03-29--002"},"frontmatter":{"title":"[참고] 아나그램(Anagram)","tags":["문자열 비교"],"date":"2021-03-29","description":"문자열 비교"}}},"pageContext":{"slug":"/algo/posts/2021-03-29--002"}},"staticQueryHashes":[]}