- 내가 쓴 코드 -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# NxN 지도를 만들 것인가? N, 그냥 좌표로 움직여도 될 듯.
# 무시되는 제한 조건을 구현해야 한다.
# LRUD를 구현해야 한다.
 
= size = int(input())
commands = list(input().split())
 
class traveler:
    def __init__(self):
        global size
        self.position = [11]  #y, x좌표다
        self.size = size
        
    def L(self):
        if self.position[1== 1:
            return self.position[1]
        
        self.position[1-= 1
        return self.position[1]
    
    def R(self):
        if self.position[1== self.size:
            return self.position[1]
        
        self.position[1+= 1
        return self.position[1]
    
    def U(self):
        if self.position[0== 1:
            return self.position[0]
        
        self.position[0-= 1
        return self.position[0]
    
    def D(self):
        if self.position[0== self.size:
            return self.position[0]
        
        self.position[0+= 1
        return self.position[0]
 
    def coordination(self):
        return self.position
 
= traveler()
 
for cmd in commands:
    if cmd == 'L':
        A.L()
    
    elif cmd == 'R':
        A.R()
    
    elif cmd == 'U':
        A.U()
    
    elif cmd == 'D':
        A.D()
 
for xy in A.coordination():
    print(xy, end = ' ')
cs

클래스로 구현해봤다.


- 해설 -

L, R ,U ,D에 따른 dx, dy를 정해주고,

plans에 입력한  각 plan에 따라

move_types 중에 일치하는게 있다면,

그 일치하는 것의 dx, dy를 시행해준다.

만약 move_types를 시행하고 있는데, 조건에 제한된다면 continue로 넘긴다.

x, y는 완성된 nx, ny다.

 

음.. 나는 클래스로 구현하는게 더 편한 것 같다.




- 내 코드 -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#3, 13, 23, 30~39, 43, 53 = 15개
#분에 3이 걸렸으면 그 분당 60개가 있다. - 15 * 60 = 900
#3이 안 쓰여있는 분당 15개가 있다 - 45 * 15 = 450 + 225 = 675
#즉 한 시간에는 1575개가 있다.
#3이 쓰여있는 시에는 3600개가 있다.
 
hours = list(range(0int(input())+1))  
#5시까지라면 0시, 1시 .... 5시이므로 6시간의 값을 가져야한다.
count = 0
 
for i in hours:
    if '3' in str(i):
         count += 3600-1575
         
    count += 1575
 
print(count)
cs

- 해설-

브루트 포스를 쓰라는 거였구나.

연산 횟수를 생각해 봤는가?

-> 연산이 크거나 시간복잡도가 높지 않다면 다 굴려보는 것도 방법이다.

다음 해설로 넘어가기 전에 브루트 포스로 다시 짜보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#24, 60, 60이 차근차근 올라가는 리스트를 짠다.
#아무래도 문자열로 해야겠지?
 
= int(input())
times = []
count = 0
for hour in range(0, N+1):   #0~23시
    for minute in range(060):
        for second in range(060):
            times.append(str(hour)+str(minute)+str(second))
            # 00:05:13 => '0513' 꼴로 저장됨
            
for time in times:
    if '3' in time:
        count += 1
    
print('입력한 N :', N, '\n답 :',count)
cs

입력한 N : 5 답 : 11475

잘 나온다.

앗!

시,분,초를 모두 문자열로 만들어서 세는 것 보다,

각 변수에 3이 있는지 체크하는게 훨씬 나을 것이다.




- 해설 봐버림 -

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#알파벳을 숫자로 치환한다.
alp_lst = ['a','b','c','d','e','f','g','h']
alp_dic = {}
for i in range(8):
    alp_dic[alp_lst[i]] = i+1
 
steps = [(-2-1), (-21), (2-1), (21), (-12), (-1-2), (12), (1-2)]
 
coord = input() #c2
coord = [int(alp_dic[coord[0]]), int(coord[1])] #3, 2
 
row = coord[1]
column = coord[0]
movable = 0
 
for step in steps:
   next_row = row+step[0]
   next_column = column+step[1]
   
   if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
       movable += 1
       
print(coord, movable)
cs

 

계속 한방에 뭉쳐서 해결하려는 버릇이 있다.

각 경우에 해당하는 부등식에 따라 count를 더하는 방식으로 쓰고 있었는데,

갈피가 안 잡혔다.

 

행 / 열로 나누어서 경우의 수(8가지)가 제한에 걸리지 않으면 체크하는 방식을 쓰는게 더 나아보인다.




-내 코드-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
= input()
string = []
integer = []
 
for str in S:
    try:
        integer.append(int(str))
    except:
        string.append(str)
string = sorted(string)
int_sum = sum(integer)
string.append(int_sum)
 
for i in string:
    print(i, end='')
cs

예외처리를 통해서 문자열과 정수형을 구분했다.

정답이구만~

진짜 같은 방식이어도 다르게 표현하는게 코딩이구나 싶다.

 


뭔가 퀴즈 푸는 것 같은 문제가 많아서 재밌었다.

복사했습니다!