๐ก๋ฌธ์ ๋ถ์ ์์ฝ
- ์
๋ ฅ: ์ฌ๋ฌ ์ค๋ก ๊ตฌ์ฑ๋ ๋ฌธ์ฅ์ด ์ฃผ์ด์ง๋ค. ๊ฐ ๋ฌธ์ฅ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋จ์ด๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ถ๋ ฅ: ๊ฐ ๋ฌธ์ฅ์์ ๋จ์ด ์์๋ ์ ์งํ๋, ๋จ์ด ์์ ๋ฌธ์๋ค๋ง ๋ค์ง์ด์ ์ถ๋ ฅํด์ผ ํ๋ค.
- ์ ํ ์ฌํญ: ๋ฌธ์ฅ์ ๊ธธ์ด๋ 1 โค ๋ฌธ์ฅ์ ๊ธธ์ด โค 1,000์ด๋ฉฐ, ์ต๋ 100์ค๊น์ง ์
๋ ฅ์ด ์ฃผ์ด์ง๋ค.
๐ก์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
- ์
๋ ฅ ์ฒ๋ฆฌ: ์ฌ๋ฌ ์ค์ ์
๋ ฅ์ ๋ฐ์์ผ ํ๋ฏ๋ก ์ค ๋จ์๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ฌธ์ฅ ์ฒ๋ฆฌ: ๊ฐ ๋ฌธ์ฅ์ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋จ์ด๋ณ๋ก ๋ถ๋ฆฌํ๋ค.
- ๋จ์ด ๋ค์ง๊ธฐ: ๊ฐ ๋จ์ด์ ์์๋ฅผ ๋ค์ง๋๋ค. JavaScript์์๋
split()
, reverse()
, join()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ๋ฌธ์์ด์ ๋ค์ง์ ์ ์๋ค.
- ์ถ๋ ฅ: ๋ค์งํ ๋จ์ด๋ค์ ๋ค์ ํ๋์ ๋ฌธ์ฅ์ผ๋ก ์กฐํฉํ์ฌ ์ถ๋ ฅํ๋ค.
๐ก์ฝ๋
const fs = require('fs');
const path = require('path');
const input = fs.readFileSync(path.join(__dirname, 'input.txt')).toString().trim().split('\\n');
// ['I am happy today', 'We want to win the first prize']
// input์ ๊ฐ ์ค์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ํจ์
const result = input.slice(1).map(line => {
// ์ฒซ ๋ฒ์งธ ์ค์ ์ ์ธํ ๋๋จธ์ง ์ค ์ฒ๋ฆฌ
// line์ ํ์ฌ ์ฒ๋ฆฌํ๊ณ ์๋ ์ค
const reversedWords = line.split(' ').map(word => word.split('').reverse().join(''));
// 1. line.split(' ') - ํ ์ค์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋๋์ด ๋จ์ด๋ก ๋๋ ๋ฐฐ์ด ์์ฑ (['I', 'am', 'happy', 'today'])
// 2. map() - ๊ฐ ๋จ์ด์ ์ด๋ค ์์
์ ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํ
// 3. word.split('') - ๊ฐ ๋จ์ด๋ฅผ ๋ฌธ์ ํ๋์ฉ ๋ถ๋ฆฌ ("happy" โ ['h', 'a', 'p', 'p', 'y'])
// 4. reverse() - ๋ฐฐ์ด์ ์์๋ฅผ ๋ค์ง์ (['h', 'a', 'p', 'p', 'y'] โ ['y', 'p', 'p', 'a', 'h'])
// 5. join('') - ๋ฐฐ์ด์ ๋ค์ ํ๋์ ๋ฌธ์์ด๋ก ํฉ์นจ (['y', 'p', 'p', 'a', 'h'] โ "yppah")
return reversedWords.join(' ');
// ๊ฐ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ๋ฌธ์์ด๋ก ๋ฐํ
});
console.log(result.join('\\n'));
๐ก์๊ฐ ๋ณต์ก๋
- ์
๋ ฅ ์ฒ๋ฆฌ: ๋ฌธ์ฅ์ ๊ธธ์ด๊ฐ ์ต๋ 1,000์ด๊ณ , ์ต๋ 100์ค์ด๋ฏ๋ก O(N) ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
์ฌ๊ธฐ์ N์ ์
๋ ฅ๋ ๋ฌธ์ฅ์ ์ ์ฒด ๋ฌธ์ ์์ด๋ค.
- ๋จ์ด ๋ค์ง๊ธฐ: ๊ฐ ๋จ์ด๋ฅผ ๋ค์ง๋ ์ฐ์ฐ์ ๋จ์ด ๊ธธ์ด๋งํผ ์๊ฐ์ด ์์๋๋ฏ๋ก, ๊ฐ ๋ฌธ์ฅ์ ๋ํด O(M)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. M์ ํ ๋ฌธ์ฅ์ ๋ฌธ์ ๊ธธ์ด์ด๋ค.