카테고리 없음

코딩테스트 with <이코테>, 구현

oogieon_n_on 2022. 7. 24. 03:41

시뮬레이션 구현

1. 상하좌우

- 첫째 줄에 공간의 크기를 나타내는 n이 주어진다.
- 둘째 줄에 여행가 a가 이동할 계획서 내용이 주어진다. 
- 첫째줄에 여행가 a가 최종적으로 도착할 지점의 좌표(x,y)를 공백으로 구분하여 출력한다. 
- 입력예시: 5  
          R R R U D

- 출력예시: 3 4

단순한 접근으로 푼 나의 풀이 

# 나의 풀이 

n = int(input())

plans = input().split()

# plans = R R R U D

x,y = 1,1

for plan in plans:
    
    if plan == 'L':
        if y == 1:  # 이동할 수 없으면 무시 
            y += 0
        else:
            y -= 1 # 그렇지않으면 이동 
    
    elif plan == 'R':
        if y < n:
            y += 1
        else:
            y += 0
            
    elif plan == 'U':
        if x == 1:
            x += 0
        else:
            x -= 1
    elif plan == 'D':
        if x < n:
            x +=1
        else:
            x += 0
    
print(x,y)

코드가 정돈된 느낌없이 직관적으로 갖다 붙힌 느낌 

 

반면 책에서 제시한 깔끔한 풀이 

# 예시답안
n = int(input())

x,y = 1,1

plans = input().split()

move_types = ['L','R','U','D']
dx = [0,0,-1,1]
dy = [-1,1,0,0]

# 리스트로 각각 받아서 반복문으로 매칭시키는 걸 잘 봐두기 
for plan in plans: # plan 하나씩 꺼내기 
    for i in range(len(move_types)): # 꺼낸 plan 이동방법과 매칭시키기 
        if plan == move_types[i]:
            nx = x + dx[i]
            ny = y + dy[i]
    
    # n*n범위를 넘어가면 실행 건너뛰기 
    if nx < 1 or ny < 1 or nx > n or ny > n:
        continue  
        
    x, y = nx, ny
        
print(x,y)

 

2. 시각

 - 룰 : 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지  
 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램 작성하기

 - 입력예시 : 5
 - 출력예시 : 11475

 

처음부터 문제를 잘못 파악해서 다시 고쳤으나 결국 풀지 못한 나의 풀이법 

# 나의 풀이법 GG 

N = int(input())

if N == 3 or N ==13 or N == 23:
    x = list(range(3))
    y = [3]
    
elif 0<=N<3 or 3<N<10:
    x = [0]
    y =list(range(N))
    
elif 10<=N<13 or 13<N<20:
    x = [1]
    y = list(range(10))
else:
    x = [2]
    y = list(range(4))
    


a = list(range(6))
b = list(range(10))
c = list(range(6))
d = list(range(10))

print(x)
print(y)
print(a)
print(b)
print(c)
print(d)

count=0
for h in x:
    for g in y:
        for i in a:
            for j in b:
                for k in c:
                    for l in d:
                        if g == 3 or h==3 or i == 3 or j ==3 or k ==3 or l ==3 :
                            count +=1
        
print(count)

이중 삼중 사중 포문이 아주 환상적인 모습이다 ^ㅡ^

 

책에서 나온 심플하고 간단한 풀이법 

N = int(input())

count = 0
for i in range(N+1):
    for j in range(60):
        for k in range(60):
            
            if '3' in str(i) + str(j) + str(k):
                count += 1
print(count)

그냥 문자열로 바꿔서 더해 000000 부터 N0000까지 모든 수를 카운트 하면 되는거였다 하하