이숭간 공부기록

동빈나 2021 이코테_2-1.구현 (시뮬레이션, 완전탐색) 본문

알고리즘/알고리즘 기초공부

동빈나 2021 이코테_2-1.구현 (시뮬레이션, 완전탐색)

이숭간 2021. 2. 1. 23:16
728x90
  • 구현 : 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정 / 문제에서 요구하것이 구현에 맞춰져 있는문제들
  • 즉 풀이를 떠올리는것은 쉽지만 소스코드로 옮기기 어려운 문제를 말함

 

  • 예를들면 알고리즘은 간단한데 코드가 지나치게 길어지는문제
  • 실수연산, 특정소수점자리까지 출력해야하는 문제
  • 문자열을 특정한 기준에 따라 끊어 처리해야 하는 문제 ( 문자열처리는 파이썬이 강력함 )
  • 적절한 라이브러리를 찾아 사용해야 하는 문제

 

 예제문제 1 ) 상하좌우 이동시키기

내가 작성한 코드

n = int(input())
plan = list(input().split())


row = 1
line = 1

for move in plan:
    if move == 'R':
        if line == n:
            continue
        line +=1
    elif move == 'U':
        if row == 1:
            continue
        row -= 1
    elif move == 'L':
        if line == 1:
            continue
        line -= 1
    elif move == 'D':
        if row == n:
            continue
        row += 1
        
    
print(row, line)

동빈나님 정답코드

차이점 : 나는 if문을 4개써서 L,R,U,D를 체크한것과 달리 동빈나님은 배열을 써서 포문을 돌리면서 if문으로 체크함

공간에서 벗어나는 조건 확인하는 부분에서, nx와 같은 임시(?) 위치를 두고 그 위치가 벗어나면 원본위치를 바꾸지않고 넘어가는식으로함

나는 그냥 그떄그때 원본위치를 확인함 

 

스위치문이 필요할것같은상황 = 포문+이프문

 

예제문제2 ) 시각_3이 하나라도있는 경우의수

내코드 : 전체가능한경우의수 - 3이 하나도 없는 경우의수

n = int(input())

all = (n+1)*60*60

if n>3:
    k = n-1
else:
    k = n

no_3 = 45*45*(k+1)

answer = all-no_3

print(answer)

동빈나님 코드 : 가능한 모든시각의 경우를 하나씩 모두 세서 품 : 단순히 시각을 1씩 증가시키면서 3이 하나라도 포함되어있는지 확인

전체를 다해도 24*60*60 = 86,400가지는 많은경우의수가 아니므로 충분히 빠른시간에 탐색가능

예제문제3) 왕실의 나이트 ( 나이트가 갈수있는 곳의 경우의수)

내코드 : 움직일수있는 8가지를 행, 열로 배열로 만든뒤 포문돌려서 모두 움직여본후, 움직일때마다 칸을 벗어낫는지 확인  

리스트를 이용하여 방향벡터를 정의한다. ( 나이트가 이동할수 있는 8가지 방향 정의 dx, dy)

input = input()
n = input[0]
m = int(input[1])-1

list = ['a','b','c','d','e','f','g','h']

for i in range(len(list)):
    if n == list[i]:
        n = i

count = 0

dx = [1, -1, -2, -2, 1, -1, 2, 2]
dy = [2, 2, 1, -1, -2, -2, 1, -1]

for i in range(len(dx)):
    nx = m+dx[i]
    ny = n+dy[i]
    
    if nx <0 or nx>8 or ny <0 or ny>8:
        continue
    
    count += 1
    
print(count)

동빈나님 정답코드

예제문제4) 문자열 재정렬 : 알파벳은 오름차순으로정렬하여 출력하고, 그뒤로 모든 숫자를 더한값을 출력

내코드 : 주의,, 변수이름 str같은 쓰이는 이름으로 짓지말자

data = input()
count = 0
list = []
for i in data:
    if i.isdigit():
        count += int(i)
    else:
        list.append(i)
        

list.sort()

print(''.join(list)+str(count))

동빈나님 정답코드