-
[Algorithm] ์ฐ์ ๋ถ๋ถ์์ด๐ปProgramming/Algorithm 2024. 3. 5. 18:24
๋ฌธ์
N๊ฐ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์ฃผ์ด์ง๋๋ค.
์ด ์์ด์์ ์ฐ์๋ถ๋ถ์์ด์ ํฉ์ด ํน์ ์ซ์ M์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ช ๋ฒ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๋ง์ฝ N=8, M=6์ด๊ณ ์์ด์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
1 2 1 3 1 1 1 2
ํฉ์ด 6์ด ๋๋ ์ฐ์๋ถ๋ถ์์ด์ {2, 1, 3}, {1, 3, 1, 1}, {3, 1, 1, 1}๋ก ์ด 3๊ฐ์ง์ ๋๋ค.๋ ์ด์ค for๋ฌธ์ ๋๋ฉด์ ํ์ดํ๋ฉด ์ฝ๊ฒ ์ง๋ง ๊ทธ๋ ๊ฒ ๋์์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๊ฐ O(N^2)๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋ง์ฝ N์ด 0~100000000 M๋ 0~1000000์ ๋ ๋๋ ๊ฒฝ์ฐ์๋ ์์ฒญ๋ ํฌ๊ธฐ๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
๊ทธ๋์ ์ ๋ฒ์ ๋ฐฐ์ ๋
์ฌ๋ผ์ด๋ฉ ์๋์ฐ(https://suucong.tistory.com/74)์๊ณ ๋ฆฌ์ฆ๊ณผ ํฌํฌ์ธํฐ(https://suucong.tistory.com/73)์๊ณ ๋ฆฌ์ฆ์ ํฉ์ณ์ ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ด ๋๋๋ก ๊ตฌํํด๋ณด์๋ค.
ํฌ์ธํฐ๋ฅผ i์ j๋ก ๋๊ณ , ๊ณ์ i๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์ ๋ํด์ฃผ๊ณ , window๊ฐ M๋ณด๋ค ํด ๊ฒฝ์ฐ์ j๋ฅผ M๋ณด๋ค ํฌ์ง ์์ ๋๊น์ง ๋ฐ๋ณตํด์ ๋บ๋ค.
๋บ ๊ฐ์ด M๊ณผ ์ผ์นํ ๊ฒฝ์ฐ answer์ 1์ ๋ํด์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ด ๊ฒฝ์ฐ์ ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ด ๋๋ค!
์ฝ๋๋ก ๊ตฌํํด๋ณธ ๊ฒ์ ์์ฑํด๋ณด๊ฒ ๋ค.
import java.util.Scanner; public class Section3_4_MyVer { private int solution(int n, int m, int[] list) { int answer = 0; int window = list[0]; int j = 0; for(int i = 1; i < n; i++) { window += list[i]; while(window > m && j >= 0) { window -= list[j++]; } if(window == m) answer++; } return answer; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Section3_4_MyVer main = new Section3_4_MyVer(); int n = scanner.nextInt(); int m = scanner.nextInt(); int[] list = new int[n]; for(int i = 0; i < n; i++) { list[i] = scanner.nextInt(); } System.out.println(main.solution(n, m, list)); } }
์ด์ ๊ฐ์ด ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์์๋ค.
'๐ปProgramming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ฝ์ ์ ๋ ฌ(Insertion Sort) (0) 2024.03.28 [Algorithm] ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort) (0) 2024.03.27 [Algorithm] ์ ํ์ ๋ ฌ(Selection Sort) (0) 2024.03.26 [Algorithm] Sliding Window ์๊ณ ๋ฆฌ์ฆ (0) 2024.03.03 [Algorithm] Two pointers ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๊ณตํต์์ ๊ตฌํ๊ธฐ (0) 2024.03.02