μ½λ©ν μ€νΈ μ°μ΅ - 체μ‘볡
μ μ¬μκ°μ λλμ΄ λ€μ΄, μΌλΆ νμμ΄ μ²΄μ‘볡μ λλλΉνμ΅λλ€. λ€νν μ¬λ² 체μ‘λ³΅μ΄ μλ νμμ΄ μ΄λ€μκ² μ²΄μ‘볡μ λΉλ €μ£Όλ € ν©λλ€. νμλ€μ λ²νΈλ 체격 μμΌλ‘ λ§€κ²¨μ Έ μμ΄, λ°λ‘ μλ²
programmers.co.kr
π λ¬Έμ μ€λͺ
μ μ¬μκ°μ λλμ΄ λ€μ΄, μΌλΆ νμμ΄ μ²΄μ‘볡μ λλλΉνμ΅λλ€. λ€νν μ¬λ² 체μ‘λ³΅μ΄ μλ νμμ΄ μ΄λ€μκ² μ²΄μ‘볡μ λΉλ €μ£Όλ € ν©λλ€. νμλ€μ λ²νΈλ 체격 μμΌλ‘ λ§€κ²¨μ Έ μμ΄, λ°λ‘ μλ²νΈμ νμμ΄λ λ°λ‘ λ·λ²νΈμ νμμκ²λ§ 체μ‘볡μ λΉλ €μ€ μ μμ΅λλ€. μλ₯Ό λ€μ΄, 4λ² νμμ 3λ² νμμ΄λ 5λ² νμμκ²λ§ 체μ‘볡μ λΉλ €μ€ μ μμ΅λλ€. 체μ‘λ³΅μ΄ μμΌλ©΄ μμ μ λ€μ μ μκΈ° λλ¬Έμ 체μ‘볡μ μ μ ν λΉλ € μ΅λν λ§μ νμμ΄ μ²΄μ‘μμ μ λ€μ΄μΌ ν©λλ€.
μ 체 νμμ μ n, 체μ‘볡μ λλλΉν νμλ€μ λ²νΈκ° λ΄κΈ΄ λ°°μ΄ lost, μ¬λ²μ 체μ‘볡μ κ°μ Έμ¨ νμλ€μ λ²νΈκ° λ΄κΈ΄ λ°°μ΄ reserveκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, 체μ‘μμ μ λ€μ μ μλ νμμ μ΅λκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
π₯ μ νμ¬ν
1οΈβ£ μ 체 νμμ μλ 2λͺ μ΄μ 30λͺ μ΄νμ λλ€.
2οΈβ£ 체μ‘볡μ λλλΉν νμμ μλ 1λͺ μ΄μ nλͺ μ΄νμ΄κ³ μ€λ³΅λλ λ²νΈλ μμ΅λλ€.
3οΈβ£ μ¬λ²μ 체μ‘볡μ κ°μ Έμ¨ νμμ μλ 1λͺ μ΄μ nλͺ μ΄νμ΄κ³ μ€λ³΅λλ λ²νΈλ μμ΅λλ€.
4οΈβ£ μ¬λ² 체μ‘λ³΅μ΄ μλ νμλ§ λ€λ₯Έ νμμκ² μ²΄μ‘볡μ λΉλ €μ€ μ μμ΅λλ€.
5οΈβ£ μ¬λ² 체μ‘볡μ κ°μ Έμ¨ νμμ΄ μ²΄μ‘볡μ λλλΉνμ μ μμ΅λλ€.
μ΄λ μ΄ νμμ 체μ‘볡μ νλλ§ λλλΉνλ€κ³ κ°μ νλ©°,
λ¨μ 체μ‘λ³΅μ΄ νλμ΄κΈ°μ λ€λ₯Έ νμμκ²λ 체μ‘볡μ λΉλ €μ€ μ μμ΅λλ€.
π μ μΆλ ₯ μ
n | lost | reserve | return |
5 | [2, 4] | [1, 3, 5] | 5 |
5 | [2, 4] | [3] | 4 |
3 | [3] | [1] | 2 |
μ μΆλ ₯ μ μ€λͺ
μ μΆλ ₯ μ #1
1λ² νμμ΄ 2λ² νμμκ² μ²΄μ‘볡μ λΉλ €μ£Όκ³ , 3λ² νμμ΄λ 5λ² νμμ΄ 4λ² νμμκ² μ²΄μ‘볡μ λΉλ €μ£Όλ©΄ νμ 5λͺ μ΄ μ²΄μ‘μμ μ λ€μ μ μμ΅λλ€.
μ μΆλ ₯ μ #2
3λ² νμμ΄ 2λ² νμμ΄λ 4λ² νμμκ² μ²΄μ‘볡μ λΉλ €μ£Όλ©΄ νμ 4λͺ μ΄ μ²΄μ‘μμ μ λ€μ μ μμ΅λλ€.
β» κ³΅μ§ - 2019λ
2μ 18μΌ μ§λ¬Έμ΄ 리λ΄μΌλμμ΅λλ€.
β» κ³΅μ§ - 2019λ
2μ 27μΌ, 28μΌ ν
μ€νΈμΌμ΄μ€κ° μΆκ°λμμ΅λλ€.
π€¨ κ³ λ―Ό
νμλ² Greedy μ ν νμ΅
λ¬Έμ μ μ΄ν΄
μ νμ¬ν 쑰건 체ν¬
κ° μ£Όμ΄μ§ λ°°μ΄λ³λ‘ μ²λ¦¬ν idx κ°κ³Ό value κ° μΈν μ μ΄λ€ κ°μ κΈ°μ€μΌλ‘ ν κ²μΈμ§
μ¬λ² 체μ‘볡μ κ°μ Έμ¨ νμμ 체μ‘볡 λλ μ²λ¦¬
π» 1μ°¨ μ½λ©
1μ°¨ μ μΆ.
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
// μ 체 νμ μ - λλλΉν νμ μ = μ΄κΈ° answer
// 5 - 2 = 3;
int answer = n - lost.length;
// λλ λΉν νμμ λ§νΌ λλ outer for
for (int i = 0; i < lost.length; i++) {
// λΉλ € μ€ μ μλ νμ μ λ§νΌ λλ inner for
for (int j = 0; j < reserve.length; j++) {
// μμ΄λ²λ¦° νμμ λ²νΈμ λΉλ € μ€ μ μλ νμμ λ²νΈκ° κ°λ€λ©΄
if (lost[i] == reserve[j]) {
// λ΅μμ§ κ±΄μ +1
answer++;
// λΉλ €μ€μ μλ νμμ λ²νΈμ -1 λμ
reserve[j] = 0;
// λλλΉν νμμ λ²νΈλ₯Ό -1 λμ
lost[i] = 0;
// inner for break ν outer for μ§ν νλ€.
break;
} // end of if
} // end of inner for
} // end of outer for
// λλλΉν νμμ λ§νΌ λλ outer for
for (int i = 0; i < lost.length; i++) {
// μμ΄λ²λ¦° νμμ λ²νΈμ λΉλ € μ€ μ μλ νμμ λ²νΈκ° κ°μ κ²½μ° μ²λ¦¬ νμ§ μλλ‘,
// -1κ°μ λνμ¬ continue μ²λ¦¬
if (lost[i] == 0) continue;
// λΉλ € μ€ μ μλ νμ μλ§νΌ λλ inner for
for (int j = 0; j < reserve.length; j++) {
// μμ΄λ²λ¦° νμμ λ²νΈμ λΉλ € μ€ μ μλ νμμ λ²νΈκ° κ°μ κ²½μ° μ²λ¦¬ νμ§ μλλ‘,
// -1κ°μ λνμ¬ continue μ²λ¦¬
if (reserve[j] == 0) continue;
// λ§μ½, μμ΄λ²λ¦° νμμ λ²νΈμ λΉλ €μ€μ μλ νμμ λ²νΈκ° μλ€ +-1 μ΄λ©΄
if (lost[i] == reserve[j] + 1 || lost[i] == reserve[j] - 1) {
// λ΅μμ§ κ±΄μ +1
answer++;
// λΉλ €μ€ μ μλ νμμ λ²νΈμ -1 λμ
reserve[j] = 0;
// inner for break ν outer for μ§ν νλ€.
break;
} // end of if
} // end of inner for
} // end of outer for
return answer;
}
}
κ³΅λΆ νλ 그리λ μκ³ λ¦¬μ¦κ³Όλ λ€λ₯΄κ² λ무 무μνκ² μμ€λ₯Ό λλ € λ°μ κ²°κ³Ό κ°κ³Ό μ±μ κΉμ§ λ¬Έμ μκ²λ μ°μ μμλ₯Ό μ‘κ³ νμλ€...
π 1μ°¨ μ±μ
μ΄λ»κ² μ μ©§κ².. μνλ 그리λ μκ³ λ¦¬μ¦κ³Όλ λ€λ₯΄κ² λ¨μ forλ¬Έμ λλ € νμ΄λ₯Ό νλ€.
μ΄κ±΄ μλλ€ μΆμ΄μ λ€λ₯Έ μ¬λλ€μ μμ€λ₯Ό 보며 곡λΆνκΈ° μμνμλ€.
π» 2μ°¨ μ½λ©
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = 0;
// μ 체 νμμ μλ§νΌ νμ λ°°μ΄ μμ±
int[] students = new int[n + 1];
// λͺ¨λ νμλ€μ΄ 체μ‘볡 1κ°λ₯Ό κ°μ§κ³ μλ€κ³ κ°μ νμ¬ κ°μ μΈν
for (int i = 0; i < n; ++i) {
students[i] = 1;
}
// 체μ‘볡 μ΄κΈ°μΈν
// System.out.println("init suit cnt = " + Arrays.toString(students));
// λλ λΉν νμμ 체μ‘볡 κ°μ -1
for (int i = 0; i < lost.length; ++i) students[lost[i] - 1]--;
// 체μ‘볡 λλ μ²λ¦¬
// System.out.println("lost suit cnt = " + Arrays.toString(students));
// μ¬λΆμ΄ μλ νμμ 체μ‘볡 κ°μ +1
for (int i = 0; i < reserve.length; ++i) students[reserve[i] - 1]++;
// μ¬λΆ μ²λ¦¬
// System.out.println("reserve suit cnt = " + Arrays.toString(students));
// νμμ λ§νΌ λλ for
for (int i = 0; i < n; ++i) {
// iλ³΄λ€ μλ²νΈ μ²λ¦¬( 0λ²λ³΄λ€ μμ μκΈ°λλ¬Έμ μμΈ μ²λ¦¬ )
if (students[i] == 2 && i > 0 && students[i - 1] == 0) {
students[i]--; // μ¬λΆ 체μ‘볡 λΉλ €μ€ μ²λ¦¬
students[i - 1]++; // 체μ‘볡 λ°μ μ²λ¦¬
}
// iλ³΄λ€ λ·λ²νΈ μ²λ¦¬( nλ²λ³΄λ€ μμ μκΈ°λλ¬Έμ μμΈ μ²λ¦¬ )
if (students[i] == 2 && i < n && students[i + 1] == 0) {
students[i]--; // μ¬λΆ 체μ‘볡 λΉλ €μ€ μ²λ¦¬
students[i + 1]++; // 체μ‘볡 λ°μ μ²λ¦¬
}
} // end of outer for
// System.out.println("after suit cnt = " + Arrays.toString(students));
for (int i = 0; i < n; ++i) if (students[i] > 0) answer++;
return answer;
}
}
μ¬λ¬ μ½λ©μ λ΄€μ§λ§ λ΄κ° μΆκ΅¬νλ κ°μ₯ μ§κ΄μ μ΄λ©° λ°°μΈ μ μμλ μμ€μλ€.
μ¬λ¬λ² λΆμνλ©° μ΄ μμ€μ νμ μ μ‘μ λ΄κ³ μμ νκ³ μΆμμΌλ μλ²½νλ€ λΌλ λ§ λ°μ μλ μ¬λλ€.
π 2μ°¨ μ±μ
β± μμμκ° λ° νκΈ°
μμ μκ° μ½ 8μκ°.
그리λ μκ³ λ¦¬μ¦μ λνμ¬ μ ν νμ΅μ΄ νμνμκ³ , μκ³ λ¦¬μ¦μ λν μ§μμ΄ μλ€λ κ±Έ κΊ λ¬μλ€.
λμ κ³νλ², νμΌλ§, 그리λ λ±λ± μ λͺ ν μκ³ λ¦¬μ¦μ 곡λΆλ₯Ό ν΄μΌκ² λ€λ μκ°μ΄ λ λ€.
λ¨μνκ² λ¬Έμ μ μ«κ²¨ ν μ€νΈ κ²°κ³Όμ μ±μ κ²°κ³Όμ μΉμ€νμ§ μκ³ λͺμΌ λͺμκ°μ΄ 걸리λλΌλ κΈ°λ³Έμ΄ μ€μνλ§νΌ μ±μ€νκ² μ°¨κ³‘ 차곑 μ§μμ μμμΌ κ² λ€λ μκ°μ΄ λ€κ² λ§λ€μ΄μ€ λ¬Έμ μ΄λ€.