# 1 ๊ฐ ์๋ฆฌ ์ซ์์ ํฉ ๊ตฌํ๊ธฐ java
์ซ์์ ๊ฐ์ N
N๊ฐ์ ์ซ์์ ๋์ด
5
54321
54321/10000 == 5
54321%10000 == 4321
4321/1000 == 4
4321%1000 == 321
์ด๋ฐ ๋ก์ง์ผ๋ก ํ๋ฉด ๋ณต์กํ๋ค. ๊ตฌํํ๊ธฐ๋ ์ด๋ ค์ธ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋, ๊ฐ์ฅ ํต์ฌ์ ์ธ ๊ฒ์ N์ด 100์ด๋ฏ๋ก 100์๋ฆฌ ์๋ฅผ int, long ํ์ผ๋ก ๋ฐ์ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์๋ฃํ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ธฐ ๋๋ฌธ์
๊ทธ๋ฌ๋ฏ๋ก String์ผ๋ก ๋ฐ์์ผํ๋ค.
๋ฌธ์์ด "54321"์ ๊ฐ ์๋ฆฌ ์๋ฅผ ๋ฝ์๋ด๋ ค๋ฉด toCharArray() ๋ฉ์๋ ํธ์ถํ์ฌ ๋ฌธ์ํ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ผํ๋ค.
๊ทธ๋ฌ๊ณ ๋์ ๋ฌธ์ ์ซ์๋ฅผ ์ซ์๋ก ๋ณํํ๊ธฐ์ํด '1' -> 1 ์์คํค์ฝ๋๋ฅผ ์ด์ฉํ๋ค.
๋ฌธ์'1'์ ์ซ์1๋ก ๋ณํ
'1' - 48 ๋๋ '1' - '0'
์ค์ ์ฝ๋ฉ ํ ์คํธ์์ ์๋ชป๋ ๊ฑธ ์ค๊ฐ์ ๊นจ๋ฌ์์ ๋ ๋ฐ๊พธ๊ธฐ ์ฝ์ง ์๋ค. ๋นํฉํ๊ณ ์๊ฐ์ด ์ด๋ฐํ๊ธฐ ๋๋ฌธ์
๊ทธ๋ฌ๋ฏ๋ก ์ฝ๋ฉ ํ๊ธฐ์ ๋ฌธ์ ๋ฅผ ๋จผ์ ์๋ฒฝํ ๋ถ์ํ์!
์ดํด๋ง ํ๊ณ ์ค์ ๋ก ์ฝ๋ฉํด๋ณด์ง ์์ผ๋ฉด ์๋๋ค.
# 2 ํ๊ท ๊ตฌํ๊ธฐ java
์ผ์ผ์ด ํ๋์ฉ ๊ณ์ฐํ์ง ๋ง๊ณ , ๊ท์น์ ๋ฐ๊ฒฌํ์ฌ ํ๋์ ๊ณต์์ผ๋ก ์ ๋ฆฌํด์ ๊ณ์ฐํ๋ค.
# 3 ๊ตฌ๊ฐํฉ ๊ตฌํ๊ธฐ 1 java
์ง์ ๊ฐ์๊ฐ ๋ง์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌํ ๊ณ ๋ ค
์๋ณธ ๋ฐฐ์ด ๊ณ ์ ๋์ด ์์ผ๋ฏ๋ก ํฉ๋ฐฐ์ด ์ด์ฉํ์ฌ ๊ตฌ๊ฐํฉ ๊ตฌํ๊ธฐ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ด์, ์ด์ค ๋ฐ๋ณต๋ฌธ X ์๊ฐ๋ณต์ก๋ nxn
์์๋ณด๊ณ ์ผ๋ฐ์ ์ธ ์์์ ์ธ๋ฑ์ค ์ฐจ์ด๋ ์ฃผ์ํ์
๋ฐ๋ ๊ฐ์๊ฐ ๋ง์ผ๋ฏ๋ก BufferedReader ์ด์ฉ
์ฌ๋ฌ ๊ฐ ์ซ์ ๋ฐ์ผ๋ฏ๋ก 10๋ง๊ฐ intํ ๋ณ์ ๊ฐ๊ฐ์ผ๋ก ๋ฐ๊ธฐ ๋ณด๋ค๋ StringTokenizer ์ด์ฉ
ํฌ๊ธฐ๊ฐ ํฌ๋ฏ๋ก ์ต๊ด์ ์ผ๋ก long
#4 ์ฐ์๋ ์์ฐ์์ ํฉ ๊ตฌํ๊ธฐ java
์ซ์์ ๊ฐ์ N์ด ํฌ๋ฏ๋ก O(nlogn)๋ ์ํ, ๊ทธ๋ฌ๋ฏ๋ก O(n) ์๊ฐ๋ณต์ก๋์ธ ํฌ ํฌ์ธํฐ ์ฌ์ฉํ์ฌ ์ฐ์๋ ์์ ํฉ ํํ
2n == n
์ด๊ธฐํ
sum = 1 // start_index์ end_index๊ฐ ํํํ๋ ์์ ๋ฒ์์ ํฉ, ๋งจ ์ฒ์์๋ ๋๋ค 1์ ๊ฐ๋ฆฌํค๋ฏ๋ก ์ดํฉ์ 1
count = 1// ์๊ธฐ ์์ ํ๋๋ก๋ง ์ด๋ฃจ์ด์ง ํํ
ํฌ ํฌ์ธํฐ ์ด๋ ์์น // ๋ญ ๋จผ์ ํ๋ ์ง ์์ ์ฃผ์
sum == N // count++; end_index++; sum = sum + end_index;
sum > N // sum = sum - start_index; start_index++;
sum <N // end_index++; sum = sum + end_index;
end_index == N์ด๋ฉด start_index ๋นผ๊ณ end_index ํ ๊ฐ๋ก๋ง ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅํ๋ฏ๋ก ๋ ์ด์ ๊ฒ์ฌํ ํ์๊ฐ ์์ด์ ธ while๋ฌธ์ ์กฐ๊ฑด์์ end_index != N์ด๋ค.
#5 ์ฃผ๋ชฝ์ ๋ช ๋ น
2๊ฐ์ ํฉ์ ํฌ๊ธฐ ๋น๊ตํ์ฌ์ผ ํ๋ฏ๋ก ์ ๋ ฌ๊ณผ ํฌํฌ์ธํฐ ์ด์ฉํด์ผํ๋ค.
์ ๋ ฌ์ ์๊ฐ๋ณต์ก๋ O(nlogn), ํฌ ํฌ์ธํฐ๋ O(n) ์ด๋ฏ๋ก ์ด ์๊ฐ๋ณต์ก๋๋ O(nlogn)
์ด๊ธฐํ
int i = 0; // ์ต์๊ฐ
int j = N-1; // ์ต๋๊ฐ
int count = 0 // ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์
ํฌ ํฌ์ธํฐ ์ด๋ ์์น
A[i] + A[j] == M // i++, j-- ์ฌ๋ฃ๋ ํ๋ฒ ์ฌ์ฉํ๋ฉด ๋ ์ฌ์ฉํ์ง ๋ชปํ๋ฏ๋ก
A[i] + A[j] > M // j--
A[i] + A[j] < M // i++
Arrays.sort();
while๋ฌธ์ ์กฐ๊ฑด์์ i<j ์ด์ด์ผ ํ๋ค. i != j ๋ 7, 8์ผ๋ ์๋ก ์๊ฐ๋ ค์ ์๋๋ค. ์ค๋ณต ๊ฒ์ฌ
# 6 DNA ๋น๋ฐ๋ฒํธ (1)
์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋? 2๊ฐ์ ํฌ์ธํฐ๋ก ๋ฒ์๋ฅผ ์ง์ ํ ๋ค์ ์ ์งํ ์ฑ๋ก ์ด๋ํ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ, O(n)
์กฐ๊ฑด A, C, G, T ๊ฐ ๋ฌธ์์ ์ต์ ๊ฐ์๋ฅผ ๋ง์กฑํ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ๊ฒฝ์ฐ์ ์
ex)์กฐ๊ฑด์ 1, 0, 0, 1
์ ์ฒด ๋ฌธ์์ด์ GATA, ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ 2
GA // T๊ฐ 1๊ฐ ๋ถ์กฑ, X
AT // A 1๊ฐ, T 1๊ฐ O
TA // A 1๊ฐ, T 1๊ฐ O
๊ทธ๋ฌ๋ฏ๋ก ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ 2๊ฐ์ง์ด๋ค.
์ฃผ์ด์ง ์ ์ฒด ๋ฌธ์์ด์ ๊ธธ์ด์ธ ๋ฐ์ดํฐ์ ์ต๋ํฌ๊ธฐ๋ 1,000,000์ด์ง๋ง ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ด์ฉํ๋ฉด ์๊ฐ๋ณต์ก๋ O(n)์ด๋ค.
๊ฐ์ด๋ฐ์ ์๋ ๋ฐ์ดํฐ๋ ๊ธฐ์กด์ ์์๋ ๊ฒ์ด๋ฏ๋ก, ๋งจ ์๊ณผ ๋ค์ ์๋ ๋ฐ์ดํฐ๋ง ๋ณํ๋ฏ๋ก ์ด๊ฒ๋ง ๊ฒ์ฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ค.
1. ๋งจ ์ฒ์ ๋ถ๋ถ ๋ฌธ์์ด ๊ฒ์ฌ
2. ๋ค์๋ถํฐ ํ ์นธ ์ฉ ์ด๋ํ๋ฉฐ ๊ฒ์ฌ
# 7 DNA ๋น๋ฐ๋ฒํธ (2)
๋ฐ์ดํฐ์ ์ต๋ํฌ๊ธฐ๊ฐ 1๋ฐฑ๋ง์ด๋ฏ๋ก ์ ๋ ฅ ๋ฐ๋ ๊ฐ์๊ฐ ๋ง์ผ๋ฏ๋ก BufferedReader ์ด์ฉ,
์ผ์ผ์ด charํ ๋ฐฐ์ด ์์ ํ๊ฐ์ฉ ์ ๋ ฅ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ ํ๋ฒ์ ๋ฐฐ์ด ๊ฐํธํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ํ ์ค๋ก ์ ๋ ฅ ๋ฐ๊ธฐ ์ํด์
StringTokenizer ์ด์ฉ
์ด๊ธฐํ
int Result = 0; // ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฆ, ๋น๋ฐ๋ฒํธ๋ก ํ ์ ์๋ ๋ถ๋ถ ๋ฌธ์์ด์ ๊ฒฝ์ฐ์ ์
int[] checkArr = new int[4]; // ๋ถ๋ถ ๋ฌธ์์ด์ด ๋ง์กฑ ํด์ผํ๋ ์กฐ๊ฑด
int[] myArr = new int[4]; // ํ์ฌ ๋ถ๋ถ ๋ฌธ์์ด์ด ๋ง์กฑํ๋ ์กฐ๊ฑด
int checkSecret = 0; // ํ์ฌ ๋ถ๋ถ ๋ฌธ์์ด์ด ๋ง์กฑํ๋ ์กฐ๊ฑด์ ๊ฐ์
char[] A; // ์ ์ฒด ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ๋ด์ ๋ฐฐ์ด์ ๋ํ ๋ ํผ๋ฐ์ค ๋ณ์
br.readLine().toCharArray() // ํ ์ค ๋ฌธ์์ด๋ก ์ฝ์ด์ ๋ฌธ์์ด ๋ฐฐ์ด๋ก ๋ง๋ฆ
Add(A[i]) // ๋ฌธ์์ด ๋ฐฐ์ด A์ i๋ฒ์งธ ์์๋ฅผ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ์ถ๊ฐ, ์ฆ ๊ฒ์ฌ ํฌํจ
// ์์ ์ฃผ์
myArr[0]++;
if(myArr[0] == checkArr[0]) checkSecret++; // if๋ฌธ์ ์กฐ๊ฑด์ ์ฃผ์
Remove(A[i]) {
// ์์ ์ฃผ์
if(myArr[0] == checkArr[0]) checkSecret--;
myArr[0]--;
}
1. ๋งจ ์ฒ์ ๋ถ๋ถ ๋ฌธ์์ด ๊ฒ์ฌ
for(int i = 0; i<P; i++){
Add(A[i])
}
if(checkSecret == 4) Result++; // ๋ง์ฝ ์ฒ์ ๋ถ๋ถ ๋ฌธ์์ด์ด 4๊ฐ์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ฉด ๊ฒฝ์ฐ์ ์์ +1
2. ๋ค์ ๋ถํฐ ํ ์นธ์ฉ ์ด๋ํ๋ฉด ์ ๋ถ๋ถ ๋ฌธ์์ด ๊ฒ์ฌ
for(int i = P; i<S; i++) { // ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ๋ฒ์๋ฅผ ์ง์ ํ๊ณ ์๋ 2๊ฐ์ ํฌ์ธํฐ i, j ์ฃผ์, i๊ฐ ๋งจ ๋ค, j๊ฐ ๋งจ ์
int j = i - P;
Add(A[i]); // ์ด๋ฏธ ๋งจ ์ฒ์ ๋ถ๋ถ ๋ฌธ์์ด ๊ฒ์ฌ์์ ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ๊ฐ์ด๋ฐ์ ์๋ ๋ฐ์ดํฐ๋ ๊ฒ์ฌ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์,
Remove(A[j]); // ์ ๋๋ง ๊ฒ์ฌํ๋ฉด ๋๋ค.
if(checkSecret == 4) Result++; //
}
# 8 ์คํ์ผ๋ก ์ค๋ฆ์ฐจ์ ์์ด ๋ง๋ค๊ธฐ
์คํ ํ์ ์ ์ถ
1. ํ์ฌ ์์ด(์คํ)์์ ๋ค์ด์๋ ์ >= ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ์์ฐ์
๋์ ๊ณ์ push(), ๋ง์ง๋ง์ pop() ํ๋ฒ
2. ํ์ฌ ์์ด(์คํ) ์์ ๋ค์ด ์๋ ์ < ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ์์ฐ์
๋์ ๊ณ์ pop()
if(ํ์ฌ ์์ด ์์ ๋ค์ด ์๋ ์> ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ ์์ฐ์) ์ธ ๊ฒฝ์ฐ // pop()์ผ๋ก ์์ด์ ํํํ ์ ์์ผ๋ฏ๋ก NO ์ถ๋ ฅ, ์์ ๊ฒฝ์ฐ์๋ push()์ pop()์ผ๋ก ์์ด์ ํํํ ์ ์๋ค.
# 9 13 ์นด๋๊ฒ์
1๋ฒ ์นด๋๊ฐ ๊ฐ์ฅ ์, N๋ฒ ์นด๋๊ฐ ๊ฐ์ฅ ์๋
๊ฐ์ฅ ๋ง์ง๋ง์ ๋จ๋ ์นด๋๋?
์์ชฝ์์ ์ฝ์ , ์ญ์ ๊ฐ ์ผ์ด๋๋ฏ๋ก Queue ์๋ฃ๊ตฌ์กฐ ์ด์ฉ
Queue<Integer> myQueue = new LinkedList<>();
์นด๋๊ฐ 1๊ฐ ๋จ์ ๋๊น์ง ๋ฐ๋ณต
# 10 14 ์ ๋๊ฐ ํ ๊ตฌํํ๊ธฐ
์ ๋๊ฐ ํ์ด๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ ์๋ ์กด์ฌX, ๋ฌธ์ ์์ ๋ง๋ ๊ฒ์ด๋ค.
1. ์ ๋๊ฐ์ด ๊ฐ์ฅ ์์ ๊ฐ
2. ๊ฐ์ฅ ์์ ์ ๋๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ, ๊ทธ ์ค์์ ๊ฐ์ฅ ์์ ์ ์ถ๋ ฅ // ์ฆ, ์์ ์ ์์ ์ค์์ ์์๋ฅผ ์ถ๋ ฅ
// ์ ๋ ฅ์ด 0, 0์ด ์๋๋ ๋ก ๋๋์ด์ง
์ ๋ ฅ์ด 0์ด๋ฉด ์ถ๋ ฅ, ๊ทธ ์ธ์ด๋ฉด ์ถ๊ฐ
ํ์ด ํ ํ ๋น์ด์๋ ๋ฐ, ์ ๋ ฅ์ด 0์ด๋ฉด 0์ถ๋ ฅ
์ง๋ฌธ ์ฝ๊ณ ๋์ ์ดํดํ, ๋ด๊ฐ ๋ง๊ฒ ์ดํดํ ๊ฒ์ธ์ง ์๊ธฐ ์ํด ์์ ๋ฅผ ๋ณด๋ฉด์ ๊ฒ์ฌ
๋ฐ์ดํฐ์ ์ต๋ํฌ๊ธฐ N์ด 100,000 ์ญ๋ง์ด๋ฏ๋ก BufferedReader
์ฐ์ ์์ ํ์ ์ ๋ ฌ ๊ธฐ์ค ์ ์
PriorityQueue<Integer> myQueue = new PriorityQueue<>((o1, o2) - >{
return ์ด ์์์ด๋ฉด //
์์์ด๋ฉด //
});