๋ฌธ์ 1๏ธโฃ (๋ฆฌํธ ์ฝ๋_๋ชจ์ ๋ฌธ์์ด ์ ๋ ฌ)
https://leetcode.com/problems/count-sorted-vowel-strings/description/
๐ก IDEA : ๊ท์น์ฑ์ ํ์ ํ๋ค.
[a, e, i, o, u]
-> a(1) e(1) i(1) o(1) u(1) = 5
[aa, ae, ai, ao, au, ee, ei, eo, eu, ii, io, iu, oo, ou, uu]
-> a(5) + e(4) + i(3) + o(2) + u(1) = 15
[aaa, aae, aai, aao, aau, aee, aei, aeo, aeu, ali, ...]
-> a (15) + e(10) + i(6) + o(3) + u(1) = 35
ํ์ด (1)
โก๏ธ ์์์๋ถํฐ ๊ฐฑ์ ํ๋ ๋ฐฉ์. ์์ ์ค์ ํฉ์ a์ ๊ฐ์ ๋ฃ๊ณ ๋๋จธ์ง๋ ์ ์ ๊ฐ์์ ํ๋์ฉ ๋นผ๋ฉด ๋๋ค๋ ๊ท์น์ฑ์ ์๊ฐํ์๋ค.
class Solution {
public int countVowelStrings(int n) {
List<Integer>[] answer = new List[n+1];
// ArrayList ์์ฑ
for (int i=0; i<=n; i++) {
answer[i] = new ArrayList<>();
}
// ์ฒซ์งธ์ค ์ด๊ธฐํ
for (int i=1; i<=5; i++) {
answer[1].add(1);
}
for (int i=2; i<=n; i++) {
for (int j=1; j<=5; j++) {
if (j==1) {
int sum = answer[i-1].stream().mapToInt(Integer::intValue).sum();
answer[i].add(sum);
continue;
}
answer[i].add(answer[i].get(j-2) - answer[i-1].get(j-2));
}
}
return answer[n].stream().mapToInt(Integer::intValue).sum();
}
}
ํด๋น ๋ฐฉ์์ ๊ท์น์ฑ์ ๋ง์ผ๋ ๊ตณ์ด ArrayList ๋ฅผ ํตํด ๋ชจ๋ ๊ฐ์ ์ ์ฅํ๋ ค๊ณ ํ๋ค๋ ์ ๊ณผ ๋นํจ์จ์ ์ธ ๊ท์น์ฑ์ด๋ผ๋ ์ ์์ ์๊ฐ์ด O(n2) ์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง๊ฐ ๋ง์ด ์๊ธธ ์ ์๋ ์ฝ๋์ด๋ค.
ํ์ด (2)
โก๏ธ ๋ค์์ ๋ถํฐ ๊ฐฑ์ ํ๋ ๋ฐฉ์, ๊ตฌํ๊ณ ์ํ๋ ์์น (j) ์ ๊ฐ๊ณผ ์ ์ฐจ๋ก์์์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฐ ๋ค์๊ฐ (j+1) ์ ํฉ์ด ํด๋น ์์น (j) ์ ๊ฐ์ด๋ผ๋ ๊ท์น์ฑ์ ํ์ฉ.
class Solution {
public int countVowelStrings(int n) {
int[] strs = new int[] {1,1,1,1,1};
for (int i=1; i<n; i++) {
for (int j=3; j>=0; j--) {
strs[j] += strs[j+1];
}
}
int answer = 0;
for (int num : strs) {
answer += num;
}
return answer;
}
}
ํฌ๊ธฐ๊ฐ 5์ธ ๋ฐฐ์ด์ ์ฌ์ฉํจ์ผ๋ก์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์๋ค. ์๊ฐ์ O(n2) ์ผ๋ก ๊ฑฐ์ ๋์ผํ ๊ฒ ๊ฐ๋ค.
๋ฌธ์ 2๏ธโฃ (๋ฆฌํธ ์ฝ๋_ํ์ค์นผ ์ผ๊ฐํ)
https://leetcode.com/problems/pascals-triangle/description/
๐ก IDEA : ๊ท์น๋๋ก ์ฑ์คํ๊ฒ ์ฝ๋๋ก ์ฎ๊ธด๋ค.
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> answer = new ArrayList<>();
List<Integer> row;
int sum = 0;
for (int i=1; i<= numRows; i++) { // numRows ๋งํผ์ ์ค์ ์์ฑํด์ผํจ
row = new ArrayList<>();
for (int j=1; j<=i; j++) { // numRows ๊ฐ ๋งํผ์ ์์ ์์ฑ ํ์
if (j==1 || j==i) { // ์ฒ์๊ณผ ๋์ ๋ฌด์กฐ๊ฑด 1
row.add(1);
// System.out.printf("%d ์ค์ 1 ์ถ๊ฐ\n", i);
continue;
}
sum = answer.get(i-2).get(j-2) + answer.get(i-2).get(j-1);
row.add(sum);
// System.out.printf("%d ์ค์ %d ์ถ๊ฐ\n", i, sum);
}
answer.add(row);
// System.out.println("์ข
๋ฃ");
}
return answer;
}
}
โก๏ธ ์ฃผ์ด์ง ๊ท์น์ฑ์ ๋ง์ถฐ ๋ฆฌ์คํธ์ ๊ณ์ํด์ ๊ฐ์ ์ถ๊ฐํ๋ค. ๋ค๋ง ์ฒ์๊ณผ ๋์ ๋ฌด์กฐ๊ฑด 1 ์ด๋ฏ๋ก ํด๋น ๋ถ๋ถ์ if ๋ฌธ์ ํตํด ํด๊ฒฐํ์๋ค.
๋ฌธ์ 3๏ธโฃ (ํ๋ก๊ทธ๋๋จธ์ค_์ ์ ์ผ๊ฐํ)
https://school.programmers.co.kr/learn/courses/30/lessons/43105
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ก IDEA : ์์ ํผ ๋ ๋ฌธ์ ์์ Math.max() ์ ๊ฐ๋ ์ ์ถ๊ฐํ ๋ฟ์ด์ง, ์๋๊ณผ์ ์ ๊ฑฐ์ ๋์ผ.
class Solution {
public int solution(int[][] triangle) {
int N = triangle.length;
for (int i=1; i<N; i++) {
for (int j=0; j<=i; j++) {
// (1) ์๋์ ํด๋นํ ๊ฒฝ์ฐ
if (j == 0) { // (1)-1 ์ฒซ๋ฒ์งธ
triangle[i][j] += triangle[i-1][0];
continue;
}
else if(j == i) { // (1)-2 ๋ง์ง๋ง
triangle[i][j] += triangle[i-1][j-1];
continue;
}
// (2) ๋๋จธ์ง ์ค๊ฐ๊ฐ ์ฒ๋ฆฌ
triangle[i][j] += Math.max(triangle[i-1][j-1], triangle[i-1][j]);
}
}
// (3) Max ๊ฐ ํ์ธ ํ ๋ฐํ
int max = -1;
for (int num : triangle[N-1]) {
max = Math.max(num, max);
}
return max;
}
}
โ ์ถ๊ฐ๋ก ํ์ธํด๋ณด๋ฉด ์ข์ ๋ฌธ์
โก๏ธ ์ด ์ธ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๊ณผ๊ฑฐ์ ํ์๋ ๋น์ทํ ์ ํ์ ๋ฌธ์ ์ด์ง๋ง ์ข ๋ ์๊ฐ์ด ํ์ํ ๋ฌธ์ ๊ฐ ๋ ์ฌ๋ผ ํด๋น ๋ฌธ์ ๋งํฌ๋ฅผ ์ฌ๋ ค๋ก๋๋ค! ํน์ ์ด ์ธ๋ฌธ์ ๋ฅผ ํ๊ณ ์์ ๊ฐ์ด ์๊ฒผ๋ค๋ฉด ์ด ๋ฌธ์ ๋ ํ์ด๋ณด๋ ๊ฒ์ ์ถ์ฒ โค๏ธ
๋ฌธ์ 1 (https://school.programmers.co.kr/learn/courses/30/lessons/12913)
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ 2 (https://www.acmicpc.net/problem/1149)
'TIL ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| TIL (2024.06.12) (0) | 2024.06.13 |
|---|---|
| TIL (2024.06.11) _ (Programmers) ์ ๊ตญ ์ฌ์ฌ (0) | 2024.06.11 |
| TIL (2024.06.06) (0) | 2024.06.07 |
| TIL (2024.06.05) (1) | 2024.06.05 |
| TIL 24์ผ์ฐจ (2022.01.05) (0) | 2023.01.05 |