2023. 10. 6. 16:27ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1205
-> ์ด์ ๋ฌธ์ ํ์ด
9. ๊ฐ์ฅ ์งง์ ๋ฌธ์ ๊ฑฐ๋ฆฌ
์ค๋ช
ํ ๊ฐ์ ๋ฌธ์์ด s์ ๋ฌธ์ t๊ฐ ์ฃผ์ด์ง๋ฉด ๋ฌธ์์ด s์ ๊ฐ ๋ฌธ์๊ฐ ๋ฌธ์ t์ ๋จ์ด์ง ์ต์๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ๋ฌธ์์ด s์ ๋ฌธ์ t๊ฐ ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด๊ณผ ๋ฌธ์๋ ์๋ฌธ์๋ก๋ง ์ฃผ์ด์ง๋๋ค.
๋ฌธ์์ด์ ๊ธธ์ด๋ 100์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ๊ฐ ๋ฌธ์์ด s์ ๊ฐ ๋ฌธ์๊ฐ ๋ฌธ์ t์ ๋จ์ด์ง ๊ฑฐ๋ฆฌ๋ฅผ ์์๋๋ก ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
teachermode e
์์ ์ถ๋ ฅ 1
1 0 1 2 1 0 1 2 2 1 0
๋ฌธ์ ํ์ด 1
public int[] solution(String s, String x)
{
int[] answer = new int[s.length()];
Set<Integer> set = new HashSet<>();
for (int i = 0; i< s.length(); i++)
{
set.add(s.indexOf(x, i));
}
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0 ; i< answer.length; i++)
{
for (Integer integer : set)
{
arrayList.add(Math.abs(integer- s.indexOf(s.charAt(i), i)));
}
answer[i] = arrayList.stream().min(Integer::compareTo).get();
arrayList = new ArrayList<>();
}
return answer;
}
๐ฉ๐ป : ๋ฏธ๋ จํ ๋์ ํ์ด ๋ฐฉ๋ฒ ... ์ฐ์ indexOf๋ฅผ ์ด์ฉํด์ ์ฃผ์ด์ง ๋ฌธ์ x์ ๋ํ index ์์น๋ฅผ ๋ชจ๋ ๊ตฌํ๋ค.
๊ทธ๋ฆฌ๊ณ Set์ ์ด์ฉํด์ ์ค๋ณต์ ์ ๊ฑฐํด์ index ์์น๋ค์ ์ ์ฅํ๊ณ ,
๊ทธ ๋ค์, answer๋ฅผ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋๋ฐ set์ ์ ์ฅ๋ index ๊ฐ์ ํด๋น ๋ฌธ์์ด์ ์์น์์ ๋บ ๋ค์ (Math.abs๋ฅผ ํ ์ด์ ๋ ์ ๋๊ฐ์ผ๋ก ์์ ๊ฐ์ ์์ ๊ธฐ ์ํด์) ๊ทธ ๊ฐ์ Arraylist์ ๋ด์๊ณ , ๊ทธ ๋ค์.. ๋บ ๊ฐ ์ค ๊ฐ์ฅ ์์ ๊ฐ(๊ฐ์ฅ ์งง์ ๊ฑฐ๋ฆฌ)์ ๊ตฌํด์ answer ๋ฐฐ์ด์ ๋ฃ์ด์คฌ๊ณ ,
๊ทธ ๋ค์ answer๋ฅผ ๋ฆฌํดํ๋ค. .
(์ฐธ ํ๋ค๊ฒ๋ ํ์๋ค.)
๋ฌธ์ ํ์ด 2
public int[] solution2(String s, char t)
{
int[] answer = new int[s.length()];
int p = 1000;
for (int i = 0; i < s.length(); i++)
{
if (s.charAt(i) == t)
{
p = 0;
answer[i] = p;
}
else
{
p++;
answer[i] = p;
}
}
p = 1000;
for (int i = s.length() - 1; i >= 0; i--)
{
if (s.charAt(i) == t)
{
p = 0;
}
else
{
p++;
answer[i] = Math.min(answer[i], p);
}
}
return answer;
}
}
๐พ : ๋จผ์ ๊ฐ์ฌ๋์ ๋ฌธ์์ด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ฒ ๊ฐ๊ณ , ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ํ๋ฒ ๋ฐ๋ณต๋ฌธ์ ๋๋๋ก ํ๋ค.
p๋ ์ฐ์ ์ ๋นํ ํฐ ๊ฐ์ผ๋ก ์ด๊ธฐํํด์ค๋ค.
1. ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ
๋จผ์ ์ฃผ์ด์ง ๋ฌธ์์ด s ์ ๊ธธ์ด๋งํผ for๋ฌธ์ ๋๋ฉด์
s.charAt(i)๊ฐ ์ฃผ์ด์ง ๋ฌธ์ t ์ ๊ฐ์ผ๋ฉด p ์๋ 0์ผ๋ก ์ค์ ํ ๋ค์ answer ๋ฐฐ์ด์ p ๊ฐ์ ์ ์ฅํ๋ค. (p๊ฐ ์ฃผ์ด์ง ๋ฌธ์์์ ํด๋น ๋ฌธ์์ ๊ฑฐ๋ฆฌ๊ฐ ๋๋ค.)
๊ทธ๋ฆฌ๊ณ t์ ๊ฐ์ง ์๋ค๋ฉด p ์์ +1 ์ ํด์ฃผ๊ณ , answer ๋ฐฐ์ด์ p ๊ฐ์ ์ ์ฅํ๋ค.
๊ทธ๋ ๊ฒ ํ๋ฉด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํํ๋ฉด์ ์ผ์ชฝ t ๊ฐ์ ๋ํ ๋ฌธ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ฒ ๋๋ค.
for (int i = 0; i < s.length(); i++)
{
if (s.charAt(i) == t)
{
p = 0;
answer[i] = p;
}
else
{
p++;
answer[i] = p;
}
}
2. ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ
๊ทธ ๋ค์์ ์ด์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์งํํ๋ฉด์ ์ฃผ์ด์ง ๋ฌธ์ t์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ answer ๊ฐ์ ๋ฃ์ด์ฃผ๋ ๋ฐ ์ด๋ ๊ธฐ์กด์ ๋ค์ด์๋ ๊ฐ๋ณด๋ค ๊ฐ์ด ์ ์ ๊ฒฝ์ฐ์๋ง p ๊ฐ์ answer ๋ฐฐ์ด์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
p = 1000;
for (int i = s.length() - 1; i >= 0; i--)
{
if (s.charAt(i) == t)
{
p = 0;
}
else
{
p++;
answer[i] = Math.min(answer[i], p);
}
}
๐ฉ๐ป : ์ด๋ ๊ฒ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋๊ณ ์์ฒญ ๋น๋น ๋๋ ค์ ๋ฌธ์ ๋ฅผ ํผ ๊ฒ ๊ฐ๋ค... ์ด ๋ฐฉ์ ๊ธฐ์ตํด๋ฌ์ผ์ง..