1. λ¬Έμ μ€λͺ
1λΆν° nκΉμ§ λ²νΈκ° λΆμ΄μλ nλͺ μ μ¬λμ΄ μμ΄ λλ§μκΈ°λ₯Ό νκ³ μμ΅λλ€. μμ΄ λλ§μκΈ°λ λ€μκ³Ό κ°μ κ·μΉμΌλ‘ μ§νλ©λλ€.
- 1λ²λΆν° λ²νΈ μμλλ‘ ν μ¬λμ© μ°¨λ‘λλ‘ λ¨μ΄λ₯Ό λ§ν©λλ€.
- λ§μ§λ§ μ¬λμ΄ λ¨μ΄λ₯Ό λ§ν λ€μμλ λ€μ 1λ²λΆν° μμν©λλ€.
- μμ¬λμ΄ λ§ν λ¨μ΄μ λ§μ§λ§ λ¬Έμλ‘ μμνλ λ¨μ΄λ₯Ό λ§ν΄μΌ ν©λλ€.
- μ΄μ μ λ±μ₯νλ λ¨μ΄λ μ¬μ©ν μ μμ΅λλ€.
- ν κΈμμΈ λ¨μ΄λ μΈμ λμ§ μμ΅λλ€.
λ€μμ 3λͺ μ΄ λλ§μκΈ°λ₯Ό νλ μν©μ λνλ λλ€.
tank → kick → know → wheel → land → dream → mother → robot → tank
μ λλ§μκΈ°λ λ€μκ³Ό κ°μ΄ μ§νλ©λλ€.
- 1λ² μ¬λμ΄ μμ μ 첫 λ²μ§Έ μ°¨λ‘μ tankλ₯Ό λ§ν©λλ€.
- 2λ² μ¬λμ΄ μμ μ 첫 λ²μ§Έ μ°¨λ‘μ kickμ λ§ν©λλ€.
- 3λ² μ¬λμ΄ μμ μ 첫 λ²μ§Έ μ°¨λ‘μ knowλ₯Ό λ§ν©λλ€.
- 1λ² μ¬λμ΄ μμ μ λ λ²μ§Έ μ°¨λ‘μ wheelμ λ§ν©λλ€.
- (κ³μ μ§ν)
λλ§μκΈ°λ₯Ό κ³μ μ§νν΄ λκ°λ€ 보면, 3λ² μ¬λμ΄ μμ μ μΈ λ²μ§Έ μ°¨λ‘μ λ§ν tank λΌλ λ¨μ΄λ μ΄μ μ λ±μ₯νλ λ¨μ΄μ΄λ―λ‘ νλ½νκ² λ©λλ€.
μ¬λμ μ nκ³Ό μ¬λλ€μ΄ μμλλ‘ λ§ν λ¨μ΄ words κ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, κ°μ₯ λ¨Όμ νλ½νλ μ¬λμ λ²νΈμ κ·Έ μ¬λμ΄ μμ μ λͺ λ²μ§Έ μ°¨λ‘μ νλ½νλμ§λ₯Ό ꡬν΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- λλ§μκΈ°μ μ°Έμ¬νλ μ¬λμ μ nμ 2 μ΄μ 10 μ΄νμ μμ°μμ λλ€.
- wordsλ λλ§μκΈ°μ μ¬μ©ν λ¨μ΄λ€μ΄ μμλλ‘ λ€μ΄μλ λ°°μ΄μ΄λ©°, κΈΈμ΄λ n μ΄μ 100 μ΄νμ λλ€.
- λ¨μ΄μ κΈΈμ΄λ 2 μ΄μ 50 μ΄νμ λλ€.
- λͺ¨λ λ¨μ΄λ μνλ²³ μλ¬Έμλ‘λ§ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
- λλ§μκΈ°μ μ¬μ©λλ λ¨μ΄μ λ»(μλ―Έ)μ μ κ²½ μ°μ§ μμΌμ λ λ©λλ€.
- μ λ΅μ [ λ²νΈ, μ°¨λ‘ ] ννλ‘ return ν΄μ£ΌμΈμ.
- λ§μ½ μ£Όμ΄μ§ λ¨μ΄λ€λ‘ νλ½μκ° μκΈ°μ§ μλλ€λ©΄, [0, 0]μ return ν΄μ£ΌμΈμ.
μ μΆλ ₯ μ
n | words | result |
---|---|---|
3 | ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] | [3,3] |
5 | ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] | [0,0] |
2 | ["hello", "one", "even", "never", "now", "world", "draw"] | [1,3] |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
3λͺ
μ μ¬λμ΄ λλ§μκΈ°μ μ°Έμ¬νκ³ μμ΅λλ€.
- 1λ² μ¬λ : tank, wheel, mother
- 2λ² μ¬λ : kick, land, robot
- 3λ² μ¬λ : know, dream,
tank
μ κ°μ μμλ‘ λ§μ νκ² λλ©°, 3λ² μ¬λμ΄ μμ μ μΈ λ²μ§Έ μ°¨λ‘μ λ§ν tank
λΌλ λ¨μ΄κ° 1λ² μ¬λμ΄ μμ μ 첫 λ²μ§Έ μ°¨λ‘μ λ§ν tank
μ κ°μΌλ―λ‘ 3λ² μ¬λμ΄ μμ μ μΈ λ²μ§Έ μ°¨λ‘λ‘ λ§μ ν λ μ²μ νλ½μκ° λμ€κ² λ©λλ€.
μ
μΆλ ₯ μ #2
5λͺ
μ μ¬λμ΄ λλ§μκΈ°μ μ°Έμ¬νκ³ μμ΅λλ€.
- 1λ² μ¬λ : hello, recognize, gather
- 2λ² μ¬λ : observe, encourage, refer
- 3λ² μ¬λ : effect, ensure, reference
- 4λ² μ¬λ : take, establish, estimate
- 5λ² μ¬λ : either, hang, executive
μ κ°μ μμλ‘ λ§μ νκ² λλ©°, μ΄ κ²½μ°λ μ£Όμ΄μ§ λ¨μ΄λ‘λ§μΌλ‘λ νλ½μκ° λ°μνμ§ μμ΅λλ€. λ°λΌμ [0, 0]μ returnνλ©΄ λ©λλ€.
μ
μΆλ ₯ μ #3
2λͺ
μ μ¬λμ΄ λλ§μκΈ°μ μ°Έμ¬νκ³ μμ΅λλ€.
- 1λ² μ¬λ : hello, even,
now
, draw - 2λ² μ¬λ : one, never, world
μ κ°μ μμλ‘ λ§μ νκ² λλ©°, 1λ² μ¬λμ΄ μμ μ μΈ λ²μ§Έ μ°¨λ‘μ 'r'λ‘ μμνλ λ¨μ΄ λμ , nμΌλ‘ μμνλ now
λ₯Ό λ§νκΈ° λλ¬Έμ μ΄λ μ²μ νλ½μκ° λμ€κ² λ©λλ€.
μΆμ²: νλ‘κ·Έλλ¨Έμ€ μ½λ© ν μ€νΈ μ°μ΅, https://school.programmers.co.kr/learn/challenges
2. νμ΄ λ°©λ²
λ¬Έμ μμ μ μν λλ§μκΈ° 3κ°μ§ 쑰건μ κ° λ¨μ΄κ° μ±λ¦½νλμ§ μ²΄ν¬ ν΄μ£Όλ©΄ λλ€.
- μ λ¨μ΄μ λμ리μ μ΄λ² λ¨μ΄μ μμλ¦¬κ° μΌμΉνλκ°?
- μ΄λ―Έ μΌλ λ¨μ΄μΈκ°? -> λλ νμ¬ μ‘°ν μ€μΈ λ¨μ΄κ° μ΅μ΄μ λ¨μ΄μ΄λ©΄ mapμ μ μ₯νκ³ , κ° λ¨μ΄λ§λ€ mapμ μλμ§ κ²μ¬νλ€. mapμ μμΌλ©΄ 2 λ²μ§Έλ‘ λμ¨ λ¨μ΄ μ΄λ―λ‘ 2λ² μ‘°κ±΄μμ failμ΄λ€.
- λ¨μ΄ κΈΈμ΄κ° 1μΈκ°?
3. μ½λ λΆμ
μμ μ€λͺ ν κ·Έλλ‘ μ½λλ₯Ό μ§°λ€.
import java.io.*;
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
HashMap<String, Integer> map = new HashMap<>();
int [] answer = new int []{};
if(words[0].length() == 1){
return new int[]{1,1};
}
map.put(words[0], 1);
for(int i = 1; i < words.length; i++){
answer = new int[] {(i%n)+1, (i/n) + 1};
// 1. λλ§μκΈ° κ·μΉ μ€ν¨
if(words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0)){
return answer;
}
// 2. μ΄λ―Έ μΌλ λ¨μ΄ μ¬μ©
if(map.get(words[i]) != null){
return answer;
}else {
map.put(words[i],1);
}
// 3. λ¨μ΄ κΈΈμ΄κ° 1
if(words[i].length() == 1) {
return answer;
}
}
answer = new int [] {0,0};
return answer;
}
}
4. μ’μμ λ§μ΄ λ°μ λ€λ₯Έ μ¬λμ νμ΄
import java.util.HashSet;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = { 0, 0 };
char chEnd = words[0].charAt(words[0].length() - 1);
char chStart;
System.out.print(chEnd + " ");
HashSet<String> log = new HashSet<>();
log.add(words[0]);
for (int i = 1; i < words.length; i++) {
chStart = words[i].charAt(0);
log.add(words[i]);
// λλ§μκΈ°κ° μλκ±°λ, μ¬μ©λ λ¨μ΄μ κ°μκ° νμ¬κΉμ§ λμ¨ λ¨μ΄μ κ°μμ μΌμΉνμ§ μμ κ²½μ°
// λλ§μκΈ°λ₯Ό λλΈλ€.
if (chEnd != chStart || log.size() != i + 1) {
System.out.print(i + 1 + "!");
answer[0] = (i % n)+1;
answer[1] = (i / n) + 1;
break;
}
chEnd = words[i].charAt(words[i].length() - 1);
System.out.print(chEnd + " ");
}
System.out.println();
System.out.println("(" + answer[0] + ", " + answer[1] + ")");
return answer;
}
}
setμ μ€λ³΅λ κ° μ μ₯μ νμ©νμ§ μλλ€λ κ²μ νμ©ν νμ΄μ΄λ€.
λλ§μκΈ°λ λ¨μ΄κ° μ λΆ μ μΌλ¬΄μ΄ ν΄μΌνλ―λ‘, setμ μ μ₯λ λ¨μ΄μ κ°μμ μ§κΈκ» λμ¨ λ¨μ΄μ κ°μκ° μΌμΉν΄μΌ νλ€.
λ§μ½ setμ μ μ₯λ κ°μκ° νμ¬κΉμ§ λμ¨ λ¨μ΄μ κ°μλ³΄λ€ μλ€λ©΄, νμ¬κΉμ§ λμ¨ λ¨μ΄λ€ μ€ μ€λ³΅λ λ¨μ΄ μ¬μ©μ΄ μλ€λ κ²μ΄λ€. μ΄κ²μΌλ‘ μ€λ³΅ 체ν¬λ₯Ό νμλ€.
mapλ³΄λ€ ν¨μ¬ κΉλνλ€.
λν setμ κ²½μ° set.addν¨μλ λ§μ½ μ€λ³΅λ κ°μ μ μ₯νλ €κ³ νλ©΄ false
λ₯Ό λ°ννλ―λ‘ μ΄λ₯Ό μ΄μ©ν΄μ λ¬Έμ λ₯Ό νμ΄λ λκ² λ€.