[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‚˜๋จธ์ง€ ํ•œ ์  (Python)

2021. 6. 24. 02:15ใ†๐Ÿ’ป ๊ฐœ๋ฐœ/Algorithm

์ตœ๊ทผ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฐ๋ชจ ์˜ˆ์ œ๋กœ ๋‚˜์™”๋˜ ๋ฌธ์ œ์ด๋‹ค.


https://programmers.co.kr/learn/courses/18/lessons/1878

 

์„ธ๊ฐœ์˜ ์ขŒํ‘œ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๊ณ , ์ง์‚ฌ๊ฐํ˜•์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋‚˜๋จธ์ง€ ํ•œ๊ฐœ์˜ ์ขŒํ‘œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.
์ง์‚ฌ๊ฐํ˜•์˜ ๊ฐ ๋ณ€์ด x, y์ถ•๊ณผ ํ‰ํ–‰ํ•˜๊ณ , ์„ธ ์ ์„ ๊ทธ๋ ค๋ณด๋ฉด x์™€ y์—์„œ ํ•œ๋ฒˆ์”ฉ๋งŒ ๋‚˜์˜จ ๊ฐ’์˜ ์ขŒํ‘œ๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ–๊ฒŒ๋œ๋‹ค.

 

์ •๋‹ต ์ฝ”๋“œ
def solution(v): 
  # x, y์ขŒํ‘œ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ฆฌ์ŠคํŠธ 
  x = [] 
  y = [] 
  answer = [] 
	
  # ์ด์ค‘๋ฐฐ์—ด ์ˆœํšŒ 
  for i in v:
    if i[0] not in x: 
	  x.append(i[0]) 
	else: 
	  x.remove(i[0]) 
	if i[1] not in y: 
	  y.append(i[1]) 
	else: 
	  y.remove(i[1]) 
  answer = x + y 
	
  return answer

x์™€ y ์ขŒํ‘œ๋“ค์„ ๊ฐ๊ฐ ๋”ฐ๋กœ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•œ๋‹ค.
์ด๋•Œ, ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์ขŒํ‘œ๋ผ๋ฉด ํ•ด๋‹น ์ขŒํ‘œ ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž…์‹œ์ผœ์ฃผ๊ณ , ์•„๋‹ˆ๋ผ๋ฉด (์ด๋ฏธ ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด๋ผ๋ฉด) ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ตœ์ข…์ ์œผ๋กœ ์ค‘๋ณต๊ฐ’์ด ์—†๋Š” ํ•˜๋‚˜์˜ ์ขŒํ‘œ๋งŒ ๊ฐ๊ฐ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.

 

๋‹ค๋ฅธ์‚ฌ๋žŒ ํ’€์ด

 

1. ๋žŒ๋‹ค ํ‘œํ˜„๋ฒ•

def solution(v): 
  answer = [] 
  x = sorted(list(map(lambda x:x[0], v))) 
  y = sorted(list(map(lambda y:y[1], v))) 

  if (x[0] != x[1]): 
	answer.append(x[0]) 
  elif (x[0] == x[1]) : 
	answer.append(x[2]) 
  if (y[0] != y[1]) : 
	answer.append(y[0]) 
  elif(y[0] == y[1]): 
	answer.append(y[2]) 
		
  return answer

๋žŒ๋‹ค๋กœ ํ’€๊ณ ์‹ถ์—ˆ๋Š”๋ฐ ์•„์ง์€ ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ์‹คํŒจ..!
์ž…๋ ฅ ๋ฐฐ์—ด v์—์„œ x์™€ y๊ฐ’ ๊ฐ๊ฐ์„ ์ •๋ ฌ์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ์œ„์ฒ˜๋Ÿผ ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ 
๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’๋“ค์€ ์ธ๋ฑ์Šค 0, 1, 2๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ ํ…๋ฐ ์ด๋•Œ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋น„๊ต ํƒ์ƒ‰ํ•ด์„œ ๋‘๊ฐœ์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด
๋‹ค๋ฅธ ํ•œ๊ฐœ์˜ ๊ฐ’์„ append, ๋‹ค๋ฅด๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ append ์‹œํ‚จ๋‹ค. (์ •๋ ฌํ–ˆ์œผ๋ฏ€๋กœ ๋‚˜๋จธ์ง€ ๋‘๊ฐœ๊ฐ€ ๊ฐ™์€ ๊ฐ’์ด ๋œ๋‹ค.)

2. xor ์‚ฌ์šฉ

def solution(pos): 
  x = pos[0][0] ^ pos[1][0] ^ pos[2][0] 
  y = pos[0][1] ^ pos[1][1] ^ pos[2][1] 
  
  return [x,y]

๋น„ํŠธ์—ฐ์‚ฐ์ž XOR์„ ์‚ฌ์šฉํ•ด์„œ ํ’€์ดํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋น„ํŠธ์—ฐ์‚ฐ์œผ๋กœ ํ’€๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐ๋„ ๋ชปํ–ˆ๋Š”๋ฐ..!
์–ด๋–ค ์›๋ฆฌ๋ƒ๋ฉด, ๊ฐ™์€๊ฐ’ 2๊ฐœ์™€ ๋‹ค๋ฅธ๊ฐ’ 1๊ฐœ๋ฅผ xor ์—ฐ์‚ฐ์‹œํ‚ค๋ฉด ๋‹ค๋ฅธ๊ฐ’ 1๊ฐœ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค๋Š” ์›๋ฆฌ์ด๋‹ค.
a ^ a = 0
a ^ a ^ b = b

3. count() ์‚ฌ์šฉ

def solution(v): 
  # x, y์ขŒํ‘œ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ฆฌ์ŠคํŠธ 
  x = [] 
  y = [] 

  # ์ž…๋ ฅ๋œ ์ด์ค‘ ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰ 
  for i in v: 
    x.append(i[0]) 
    y.append(i[1]) 
		
	# x์ขŒํ‘œ ๋ฆฌ์ŠคํŠธ์— ๋˜‘๊ฐ™์€ ๊ฐ’์ด ๋‘๊ฐœ์žˆ๋‹ค๋ฉด 
	if x.count(i[0]) == 2: 
	  # set()์„ ์‚ฌ์šฉํ•ด ์ค‘๋ณต์„ ์ œ๊ฑฐ, list๋กœ ๋ณ€ํ™˜ํ›„ ์ œ๊ฑฐํ•œ๋‹ค 
	  x = list(set(x)) 
	  x.remove(i[0]) 
				
	# y์ขŒํ‘œ: x์™€ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ 
	if y.count(i[1]) == 2: 
	  y = list(set(y)) 
	  y.remove(i[1]) 
				
  # x์™€ y๋ฆฌ์ŠคํŠธ ์—ฐ๊ฒฐ 
  x.extend(y) 
    
  return x 

์—ฌ๊ธฐ์„œ๋Š” ๋‹จ์ˆœํžˆ count()๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, collections ๋ชจ๋“ˆ์˜ Counter ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์™€๋„ ๋œ๋‹ค.
์ž…๋ ฅ๋˜๋Š” 3๊ฐœ์˜ ์ขŒํ‘œ์ค‘์—์„œ x์™€ y๊ฐ€ ๊ฐ๊ฐ ๋˜‘๊ฐ™์€ ๊ฐ’์ด 2๊ฐœ์ธ ๊ฐ’์ด ์žˆ๋‹ค.
์ด๋“ค์„ ์ œ๊ฑฐํ•˜๋ฉด ๋‚˜๋จธ์ง€ ํ•œ์ ์˜ ์ขŒํ‘œ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๊ฒƒ.
๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ extend()๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ x.extend(y) ํ•˜๊ฒŒ๋˜๋ฉด x๋ฆฌ์ŠคํŠธ ์•ˆ์— y์›์†Œ๋“ค์„ ์˜ค๋ฅธ์ชฝ ๋์— ์‚ฝ์ž…ํ•˜๋Š”๊ฒƒ.
์ฐธ๊ณ ๋ธ”๋กœ๊ทธ: https://m.blog.naver.com/wideeyed/221541104629

์ž…๋ ฅ ์ขŒํ‘œ๊ฐ€ ์„ธ๊ฐœ๋ฟ์ด๋ผ ๋น„ํŠธ์—ฐ์‚ฐ์ž๋กœ ํ’€์ดํ•œ ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ–ˆ๋‹ค.. ์กฐ๊ฑด๋ฌธ๋„ ํ•˜๋‚˜๋„ ์•ˆ์“ฐ๊ณ ,,! ๐Ÿ‘€