-
์์ด๋๋ฅผ ๋ชจ๋ฅด๋ ํ๊ตญ์ธ ๋๊ฐ์น๊ตฌ A์ SNS๋ฅผ ์ฐพ๋๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ฐพ๋ ์์๋ ์๋์ ๊ฐ๋ค.
1. ๋๋ผ๋ฅผ ์ฐพ๋๋ค. ํน์ ์ธ์ด์ ๋ฐ์์ ๋น๊ตํ์ฌ ํ๊ตญ์ธ์ ์ฐพ๋๋ค. 2. ํ๋กํ ์ฌ์ง์ด ์น๊ตฌ์ด๊ฑฐ๋ ๋๋์ธ ์ฌ๋์ ์ฐพ๋๋ค. 3. ์น๊ตฌ์ ์ด๋ฆ, ์๋ ์์ผ ๋ฑ ์น๊ตฌ์ธ ๊ฒ ๊ฐ์ ์์ด๋๋ฅผ ์ฐพ๋๋ค.
- ์์ ๊ฐ์ด ์ด๋ค ๊ฒ์์ ํ์ฌ๋ ํน์ ํญ๋ชฉ์ ์ฃผ๋ชฉํ๋ ๊ฒ์ '๊ฒ์'์ ํน์ง์ด๋ค.
- ์ฃผ๋ชฉํ๋ ํญ๋ชฉ์ 'ํค(key)'๋ผ๊ณ ์ง์นญํ๊ณ , ๊ฒ์ ๊ณผ์ ์ ์ดํด๋ณด์.
1. ํค ๊ฐ๊ณผ ์ผ์นํ๋๋ก ์ง์ (๊ตญ๊ฐ) 2. ํค ๊ฐ์ ๊ตฌ๊ฐ์ ์ง์ (๋๋์ ๋์ด๋) 3. ํค ๊ฐ๊ณผ ๋น์ทํ๋๋ก ์ง์ (์น๊ตฌ๊ฐ ์ฌ์ฉํ ๊ฒ ๊ฐ์ ์์ด๋)
- ๋ฌผ๋ก , ์กฐ๊ฑด์ ํ๋์ผ ์๋ ์์ง๋ง ์ฌ๋ฌ ๊ฐ์ผ ์๋ ์๋ค.
-
๊ฒ์ ๊ธฐ๋ฒ์์์ ๋ช๋ช์ ์๋ฃ๊ตฌ์กฐ์ ์์กดํ๋ค. ์คํฐ๋์์๋ ๋ฐฐ์ด์ ๊ฒ์์ ๋ค๋ฃฌ๋ค.
- ๋ฌด์์๋ก ๋์ด๋์ ๋ฐ์ดํฐ ์งํฉ์์ ๊ฒ์ ์ํ
- ์ ๋ ฌ๋ ๋ฐ์ดํฐ ์งํฉ์์ ๋น ๋ฅธ ๊ฒ์ ์ํ
- ์ถ๊ฐ, ์ญ์ ๊ฐ ์์ฃผ ์ผ์ด๋๋ ๋ฐ์ดํฐ ์งํฉ์์ ๋น ๋ฅธ ๊ฒ์ ์ํ
- ์ฒด์ธ๋ฒ : ๊ฐ์ ํด์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ํ ๋ฆฌ์คํธ๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- ์คํ ์ฃผ์๋ฒ : ๋ฐ์ดํฐ๋ฅผ ์ํ ํด์ ๊ฐ์ด ์ถฉ๋ํ ๋ ์ฌํด์ํ๋ ๋ฐฉ๋ฒ
- ์์๊ฐ ์ง์ ๋ชจ์์ผ๋ก ๋์ด์ ๋ฐฐ์ด์์์ ๊ฒ์
- ์ํ๋ ํค(์กฐ๊ฑด) ๊ฐ์ ๊ฐ๋ ์์๋ฅผ ๋ง๋ ๋๊น์ง ๋งจ ์๋ถํฐ ์์๋๋ก ์์๋ฅผ ๊ฒ์
- ์ ํ ๊ฒ์(Linear Search) ๋๋ ์์ฐจ ๊ฒ์(Sequential Search)์ด๋ผ๊ณ ํจ
-
์์ ์์ ๋ก ๋ณด๋ ์ ํ ๊ฒ์์ ์ข ๋ฃ ์กฐ๊ฑด
- ์กฐ๊ฑด 1 : ๊ฒ์ํ ๊ฐ์ ๋ฐ๊ฒฌํ์ง ๋ชปํ๊ณ ๋ฐฐ์ด์ ๋์ ๋๋ฌํ ๊ฒฝ์ฐ(๊ฒ์ ์คํจ)
- ์กฐ๊ฑด 2 : ๊ฒ์ํ ๊ฐ๊ณผ ๊ฐ์ ์์๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ(๊ฒ์ ์ฑ๊ณต)
-
์ค์ต
public static int seqSearch(int[] n, int t) { int i = 0; while (true) { if (i == n.length) return -1; if (n[i] == t) return i; i++; } }
-
์ ํ ๊ฒ์์ ์ข ๋ฃ ์กฐ๊ฑด ๊ฒ์ฌ ๋น์ฉ์ 50%๋ก ์ค์ด๋ ๋ฐฉ๋ฒ
- ๊ฒ์ํ๊ณ ์ ํ๋ ํค ๊ฐ์ ๋งจ ๋ ์์์ ์ ์ฅ
- ์ด ๊ฒฝ์ฐ ์กฐ๊ฑด 1์ ๊ฒ์ฌํ์ง ์๊ณ ์กฐ๊ฑด 2๋ง ๊ฒ์ฌ
-
์ค์ต
public static void main(String[] args) { int[] serachTargetArray = {6, 1, 2, 3, 4, 8, 9, 7, 5}; int[] tempTargetArray = new int[searchTargetArray.length]; for(int i = 0; i < serachTargetArray.length; i++) tempTargetArray[i] = serachTargetArray[i]; seqSearchSen(tempTargetArray, 9); } public static int seqSearchSen(int[] n, int t) { n[n.length - 1] = t; int i = 0; while (true) { if (n[i] == t) break; i++; } return i == n.length ? -1 : i; }
- ์์๊ฐ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ์ ์ฉํ๋ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
-
์์ ์์ ๋ก ๋ณด๋ ์ด์ง ๊ฒ์์ ์ข ๋ฃ ์กฐ๊ฑด
- ์กฐ๊ฑด 1 : ๊ฒ์ ๋ฒ์๊ฐ ๋ ์ด์ ์๋ ๊ฒฝ์ฐ(๊ฒ์ ์คํจ)
- ์กฐ๊ฑด 2 : ๊ฒ์ํ ๊ฐ๊ณผ ๋ฐฐ์ด์ ์ค์ ๊ฐ์ด ์ผ์นํ๋ ๊ฒฝ์ฐ(๊ฒ์ ์ฑ๊ณต)
-
์ค์ต
public static int binSearch(int[] n, int t) { int start = 0; int end = n.length - 1; do { int center = (start + end) / 2; if (n[center] == t) return center; else if (n[center] < t) start = center + 1; else end = center - 1; } while (start <= end); return -1; }
-
์ฝ๋
static int seqSearch(int[] n, int t) { int i = 0; // 1 while(i < n.length) // 2 { if(n[i] == t) // 3 { // ๊ฒ์ ์ฑ๊ณต return i; // 4 } i++; // 5 } // ๊ฒ์ ์คํจ return -1; // 6 }
-
์ ํ ๊ฒ์์์์ ๊ฐ ๋จ๊ณ ์คํ ํ์์ ๋ณต์ก๋
๋จ๊ณ ์คํ ํ์ ๋ณต์ก๋ 1 1 O(1) 2 n/2 O(n) 3 n/2 O(n) 4 1 O(1) 5 n/2 O(n) 6 1 O(1) O(1) + O(n) + O(n) + O(1) + O(n) + O(1) = O(max(1,n,n,1,n,1)) = O(n)
-
์ฝ๋
static int binSearch(int[] n, int t) { // ๊ฒ์ ๋ฒ์์ ์์(์ฒ์) ์ธ๋ฑ์ค int start = 0; // 1 // ๊ฒ์ ๋ฒ์์ ์ข ๋ฃ(๋) ์ธ๋ฑ์ค int end = n.length -1; // 2 do { // ์ค์ ์์์ ์ธ๋ฑ์ค int center = (start+end) / 2; // 3 if(n[center] == t) // 4 { // ๊ฒ์ ์ฑ๊ณต return center; // 5 } else if(n[center] < key) // 6 { // ๊ฒ์ ๋ฒ์๋ฅผ ๋ค์ชฝ ๋ฐ์ผ๋ก ์ขํ๋ค. start = center + 1; // 7 } else{ // ๊ฒ์ ๋ฒ์๋ฅผ ์์ชฝ ๋ฐ์ผ๋ก ์ขํ๋ค. end = center -1; // 8 } } while(start <= end); // 9 // ๊ฒ์ ์คํจ return -1; // 10 }
-
์ด์ง ๊ฒ์์์์ ๊ฐ ๋จ๊ณ ์คํ ํ์์ ๋ณต์ก๋
๋จ๊ณ ์คํ ํ์ ๋ณต์ก๋ 1 1 O(1) 2 1 O(1) 3 log n O(log n) 4 log n O(log n) 5 1 O(1) 6 log n O(log n) 7 log n O(log n) 8 log n O(log n) 9 log n O(log n) 10 1 O(1) O(1) + O(1) + O(log n) + ... + O(1) = O(log n)
O(1)
< O(log n)
< O(n)
< O(n log n)
< O(nยฒ)
< O(2โฟ)
< O(n!)
< O(nโฟ)
-
๋ฌธ์ ์ค๋ช
- ์ํฌ์๋ ์ํ์ ํฌ๊ธฐํ ์ฌ๋์ ์ค๋ง์
๋๋ค. ์ํฌ์ ์ผ์ธ๋ฐฉ์ ๋ชจ์๊ณ ์ฌ์ ์ํ ๋ฌธ์ ๋ฅผ ์ ๋ถ ์ฐ์ผ๋ ค ํฉ๋๋ค. ์ํฌ์๋ 1๋ฒ ๋ฌธ์ ๋ถํฐ ๋ง์ง๋ง ๋ฌธ์ ๊น์ง ๋ค์๊ณผ ๊ฐ์ด ์ฐ์ต๋๋ค.
1๋ฒ ์ํฌ์๊ฐ ์ฐ๋ ๋ฐฉ์: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2๋ฒ ์ํฌ์๊ฐ ์ฐ๋ ๋ฐฉ์: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3๋ฒ ์ํฌ์๊ฐ ์ฐ๋ ๋ฐฉ์: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
- 1๋ฒ ๋ฌธ์ ๋ถํฐ ๋ง์ง๋ง ๋ฌธ์ ๊น์ง์ ์ ๋ต์ด ์์๋๋ก ๋ค์ ๋ฐฐ์ด answers๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๋ง์ ๋ฌธ์ ๋ฅผ ๋งํ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
- ์ํฌ์๋ ์ํ์ ํฌ๊ธฐํ ์ฌ๋์ ์ค๋ง์
๋๋ค. ์ํฌ์ ์ผ์ธ๋ฐฉ์ ๋ชจ์๊ณ ์ฌ์ ์ํ ๋ฌธ์ ๋ฅผ ์ ๋ถ ์ฐ์ผ๋ ค ํฉ๋๋ค. ์ํฌ์๋ 1๋ฒ ๋ฌธ์ ๋ถํฐ ๋ง์ง๋ง ๋ฌธ์ ๊น์ง ๋ค์๊ณผ ๊ฐ์ด ์ฐ์ต๋๋ค.
-
์ ํ์ฌํญ
- ์ํ์ ์ต๋ 10,000 ๋ฌธ์ ๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค.
- ๋ฌธ์ ์ ์ ๋ต์ 1, 2, 3, 4, 5์ค ํ๋์ ๋๋ค.
- ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ๋ฐ์ ์ฌ๋์ด ์ฌ๋ฟ์ผ ๊ฒฝ์ฐ, returnํ๋ ๊ฐ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
-
java ํ์ด
import java.util.*; class Solution { public int[] solution(int[] answers) { int[] student1 = { 1, 2, 3, 4, 5 }; int[] student2 = { 2, 1, 2, 3, 2, 4, 2, 5 }; int[] student3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }; int[] tempA = new int[3]; for (int i = 0; i < answers.length; i++) { if (answers[i] == student1[i % 5]) { tempA[0]++; } if (answers[i] == student2[i % 8]) { tempA[1]++; } if (answers[i] == student3[i % 10]) { tempA[2]++; } } int temp = tempA[0]; for (int i = 1; i < tempA.length; i++) { if (tempA[i] > temp) { temp = tempA[i]; } } List<Integer> answer = new ArrayList<Integer>(); for (int i = 0; i < tempA.length; i++) { if (temp == tempA[i]) { answer.add(i + 1); } } int[] returnValue = new int[answer.size()]; for (int i = 0; i < answer.size(); i++) { returnValue[i] = answer.get(i); } return returnValue; } }
-
c# ํ์ด
using System.Collections.Generic; using System.Linq; public class Solution { public int[] solution(int[] answers) { int[] student1 = { 1, 2, 3, 4, 5 }; int[] student2 = { 2, 1, 2, 3, 2, 4, 2, 5 }; int[] student3 = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }; // ์ ์๋ฅผ ์ ์ฅํ ์์ ๋ฐฐ์ด ์์ฑ int[] tempArray = new int[3]; // ๋ฌธ์ ์ ๋ต๋ณ์ ์์ ํ์ํ๋ฉด์ ์ํฌ์๋ค์ ๋ต์ ์ฒดํฌ ํ ์ ์ ์ฆ๊ฐ for (int i = 0; i < answers.Length; i++) { // 1๋ฒ ์ํฌ์ ์ ์ ์ฆ๊ฐ if (answers[i] == student1[i % 5]) { tempArray[0]++; } // 2๋ฒ ์ํฌ์ ์ ์ ์ฆ๊ฐ if (answers[i] == student2[i % 8]) { tempArray[1]++; } // 3๋ฒ ์ํฌ์ ์ ์ ์ฆ๊ฐ if (answers[i] == student3[i % 10]) { tempArray[2]++; } } int max = 0; for(int i = 0; i < tempArray.Length; i++) { if (max < tempArray[i]) max = tempArray[i]; } List<int> list = new List<int>(); for(int i = 0; i < tempArray.Length; i++) { if (max == tempArray[i]) list.Add(i + 1); } int[] answer = new int[list.Count]; for (int i = 0; i < answer.Length; i++) { answer[i] = list[i]; } return answer; } }
-
๋ฌธ์
-
์๊ทผ์ด๋ ๋๋ฌด M๋ฏธํฐ๊ฐ ํ์ํ๋ค. ๊ทผ์ฒ์ ๋๋ฌด๋ฅผ ๊ตฌ์ ํ ๊ณณ์ด ๋ชจ๋ ๋งํด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, ์ ๋ถ์ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ์์ฒญํ๋ค. ์ ๋ถ๋ ์๊ทผ์ด๋ค ์ง ๊ทผ์ฒ์ ๋๋ฌด ํ ์ค์ ๋ํ ๋ฒ๋ชฉ ํ๊ฐ๋ฅผ ๋ด์ฃผ์๊ณ , ์๊ทผ์ด๋ ์๋ก ๊ตฌ์ ํ ๋ชฉ์ฌ์ ๋จ๊ธฐ์ ์ด์ฉํด์ ๋๋ฌด๋ฅผ ๊ตฌํ ๊ฒ์ด๋ค.
-
๋ชฉ์ฌ์ ๋จ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ํ๋ค. ๋จผ์ , ์๊ทผ์ด๋ ์ ๋จ๊ธฐ์ ๋์ด H๋ฅผ ์ง์ ํด์ผ ํ๋ค. ๋์ด๋ฅผ ์ง์ ํ๋ฉด ํฑ๋ ์ด ๋ ์ผ๋ก๋ถํฐ H๋ฏธํฐ ์๋ก ์ฌ๋ผ๊ฐ๋ค. ๊ทธ ๋ค์, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด๋ฅผ ๋ชจ๋ ์ ๋จํด๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์, ๋์ด๊ฐ H๋ณด๋ค ํฐ ๋๋ฌด๋ H ์์ ๋ถ๋ถ์ด ์๋ฆด ๊ฒ์ด๊ณ , ๋ฎ์ ๋๋ฌด๋ ์๋ฆฌ์ง ์์ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ ์ค์ ์ฐ์ํด์๋ ๋๋ฌด์ ๋์ด๊ฐ 20, 15, 10, 17์ด๋ผ๊ณ ํ์. ์๊ทผ์ด๊ฐ ๋์ด๋ฅผ 15๋ก ์ง์ ํ๋ค๋ฉด, ๋๋ฌด๋ฅผ ์๋ฅธ ๋ค์ ๋์ด๋ 15, 15, 10, 15๊ฐ ๋ ๊ฒ์ด๊ณ , ์๊ทผ์ด๋ ๊ธธ์ด๊ฐ 5์ธ ๋๋ฌด์ 2์ธ ๋๋ฌด๋ฅผ ๋ค๊ณ ์ง์ ๊ฐ ๊ฒ์ด๋ค. (์ด 7๋ฏธํฐ๋ฅผ ์ง์ ๋ค๊ณ ๊ฐ๋ค)
-
์๊ทผ์ด๋ ํ๊ฒฝ์ ๋งค์ฐ ๊ด์ฌ์ด ๋ง๊ธฐ ๋๋ฌธ์, ๋๋ฌด๋ฅผ ํ์ํ ๋งํผ๋ง ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ค. ์ด๋, ์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
-
-
์ ๋ ฅ
-
์ฒซ์งธ ์ค์ ๋๋ฌด์ ์ N๊ณผ ์๊ทผ์ด๊ฐ ์ง์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ค๊ณ ํ๋ ๋๋ฌด์ ๊ธธ์ด M์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 1,000,000, 1 โค M โค 2,000,000,000)
-
๋์งธ ์ค์๋ ๋๋ฌด์ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค. ๋๋ฌด์ ๋์ด์ ํฉ์ ํญ์ M์ ๋๊ธฐ ๋๋ฌธ์, ์๊ทผ์ด๋ ์ง์ ํ์ํ ๋๋ฌด๋ฅผ ํญ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค. ๋์ด๋ 1,000,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ ์ ๋๋ 0์ด๋ค.
-
-
์ถ๋ ฅ
- ์ ์ด๋ M๋ฏธํฐ์ ๋๋ฌด๋ฅผ ์ง์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด์ ์ ๋จ๊ธฐ์ ์ค์ ํ ์ ์๋ ๋์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
- ํด๋น ๋ฌธ์ ๋ ๋ณด๋ฅ