๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก(ํ•ด์‹œ)

by ์ฃผ๋ฐœ2 2020. 3. 5.
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/42577

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ ์ค‘, ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, ๊ตฌ์กฐ๋Œ€ ์ „ํ™”๋ฒˆํ˜ธ๋Š” ์˜์„์ด์˜ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ ‘๋‘์‚ฌ์ž…๋‹ˆ๋‹ค. ๊ตฌ์กฐ๋Œ€ : 119 ๋ฐ•์ค€์˜ : 97 674 223 ์ง€์˜์„ : 11 9552 4421 ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด phone_book ์ด solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์–ด๋–ค ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฉด false๋ฅผ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด true๋ฅผ r

programmers.co.kr

์ฝ”๋“œ

class Solution {
    	public boolean solution(String[] phone_book) {
		boolean answer = true;
		boolean flag = true;
		for(int i=0; i<phone_book.length; i++) {
			for(int j=0; j<phone_book.length; j++) {
				// ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ
				if(i!=j && phone_book[j].startsWith(phone_book[i])) {
					answer = false;
					flag = false;
					break;
				}
			}
			if(!flag)
				break;
		}
		return answer;
	}

}

ํ’€์ด

phone_book์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์„ ํƒ์ƒ‰ํ•œ๋‹ค.

starsWith() ๋ฉ”์†Œ๋“œ๋Š” ๋Œ€์ƒ ๋ฌธ์ž์—ด์ด ํŠน์ • ๋ฌธ์ž ๋˜๋Š” ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.

 

์ ‘๋‘์‚ฌ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์–ด๋„ false๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋˜๋ฏ€๋กœ, ์‹œ๊ฐ„์ ์œผ๋กœ ๋‹จ์ถ•์‹œํ‚ค๊ธฐ ์œ„ํ•ด flag ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ๋Š”๋ฐ,

๋งŒ์•ฝ ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ => ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ฐพ์„ ํ•„์š”๋„ ์—†์œผ๋ฏ€๋กœ for๋ฌธ์„ ๋ชจ๋‘ ํƒˆ์ถœํ•œ๋‹ค.

 

 

์ƒ๊ฐ

phone_book ์˜ ๋ฒ”์œ„๋Š” 1,000,000 ์ดํ•˜์ด๋‹ค.

๊ทธ๋ž˜์„œ ์™„์ „ํƒ์ƒ‰์„ ๋Œ๋ฆฌ๋ฉด O(1,000,000 * 1,000,000) ์œผ๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ค„ ์•Œ๊ณ  ํ•ด๋ดค๋Š”๋ฐ,, ํšจ์œจ์„ฑ์—์„œ ํ†ต๊ณผ๋ฅผ ํ•ด์„œ ์ข€ ๋†€๋ž๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ 100๋งŒ๋ฒˆ ์ „๋ถ€ ๋„๋Š” ์ผ€์ด์Šค๊ฐ€ ์—†์–ด์„œ์ธ์ง€, ์•„๋‹ˆ๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๊ฐ€ ์‹œ๊ฐ„(?)์ชฝ์—์„œ ํ›„ํ•ด์„œ ์ธ์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค . .

 

 

 

๋‹ค๋ฅธ ํ’€์ด

class Solution {
    public boolean solution(String[] phoneBook) {
       for(int i=0; i<phoneBook.length-1; i++) {
            for(int j=i+1; j<phoneBook.length; j++) {
                if(phoneBook[i].startsWith(phoneBook[j])) {return false;}
                if(phoneBook[j].startsWith(phoneBook[i])) {return false;}
            }
        }
        return true;
    }
}

๋‚˜๋„ ์ฒ˜์Œ์—๋Š” ๋‘ ๋ฒˆ์งธ for๋ฌธ์„ j = i+1๋ถ€ํ„ฐ ๋Œ๋ ค๋ดค์ง€๋งŒ, ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ํ‹€๋ฆฌ๋‹ค๊ณ  ๋‚˜์™”๋‹ค. ๋ฐ˜๋ก€๊ฐ€ ์กด์žฌํ–ˆ๋‹ค.

๋งŒ์•ฝ phone_book ์˜ ์š”์†Œ๊ฐ€ ["1237" , "45" , "123"] ์ผ ๊ฒฝ์šฐ, 

๋‘ ๋ฒˆ์งธ for๋ฌธ์„ j=i+1๋ถ€ํ„ฐ ๋Œ๋ฆฌ๊ฒŒ ๋˜๋ฉด, 123์ด 1237์˜ ์ ‘๋‘์–ด์ง€๋งŒ, ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ i, j ๋‘˜๋‹ค ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ •๋‹ต์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค.

 

์œ„์—์„œ ๋‘ ๋ฒˆ ๊ฒ€์ƒ‰ํ•˜๋Š”๊ฒƒ์ด for๋ฌธ ์ „๋ถ€๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ๋„ ์‹œ๊ฐ„์ด ์งง๋‹ค.

6.63ms => 0.86ms

๊ฑฐ์˜ 8๋ฐฐ ๊ฐ€๋Ÿ‰ ๊ฐ์†Œํ•œ๋‹ค.

ํ•ด์‹œ ๋ฌธ์ œ์ง€๋งŒ, ํ•ด์‹œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ(?) ๋ฌธ์ œ๋‹ค . .

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€