부끄럽게도 정답률이 꽤 높은 문제임에도 불구하고 시간이 꽤 걸렸던 문제이다.

90이라는 max 값을 구하기는 상당히 쉬운데, 행열을 출력하는 부분 때문에 조금 난항을 겪었다.

다음 코드처럼 나는 작성했더니 결과가 잘 나왔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
arr = []
maxN = [0]
for i in range(9):
    arr.append(list(map(int, sys.stdin.readline().split())))
for i in range(9):
    for j in range(9):
        if max(arr[i]) == arr[i][j] and max(arr[i])>=maxN[0]:
            maxN.pop()
            maxN.append(arr[i][j])
            i_num = i
            j_num = j
        else:
            pass
print(maxN[0])
print(i_num+1, j_num+1)
cs

 

딱 봐도 자랑스럽게 내세울만한 코드는 아니다... 오히려 지저분한 코드라는 생각이 확실히 들긴 한다.

 

리스트를 꽤 많이 사용했다. 

도저히 어떻게 list에 값을 넣지 않고 처리를 해야 할지 생각이 안 나서 저렇게 maxN처럼 전역변수처럼 리스트를 처리해서 해당 값을 이중 for문 내에 있는 if문의 조건에 따라 업데이트시키는(line 8~) 방법을 사용했다.

 

그리고 딱 봐도 for문에 이중for문까지 있어서 시간 복잡도가 O(n^2)이 나와서 시간 초과가 될 것 같았다.

그래서 line 4에서와 같이 input()을 사용하지 않고 sys.stdin.readline()를 사용해서 처리했다.

그렇게 처리할 경우, 다음과 같은 실행시간이 나와서 잘 처리가 되었다.

해당 코드의 실행시간

추후에 다시 이 코드로 돌아와서 조금 더 깔끔한 코드를 손봐줄 필요성이 강하게 느껴진다...

 

 

문제 출처: https://www.acmicpc.net/problem/2566

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net


일단 조금 고생을 해서 slicing을 통해서 나는 문제를 해결하였다.

다음의 코드로 돌렸을 때 맞기는 했다.

1
2
3
4
5
6
7
8
9
10
num = input()
# print(num[len(num)-2:len(num)])
if int(num[len(num)-2:len(num)]) <= 10:
    if num[len(num)-2:len(num)-1== '0':
        print(int(num[0:len(num)-2])*10+ int(num[len(num)-1:len(num)]))
    else:
        print(int(num[0:len(num)-2]) + int(num[len(num)-2:len(num)]))
else:
    print(int(num[0:len(num)-1]) + int(num[len(num)-1:len(num)]))
 
cs

다만, 코드가 사실 무적이나 더럽(?)다라는 생각이 들기는 한다...

분명히 더 아름다운 코드를 짤 수는 있겠지만.. 일단 당장은 저런 식으로 풀 수 있다는 것으로 만족하고,

추후에 조금 더 공부를 하고, 조금 더 좋은 아이디어가 생기면 다시 풀어볼 생각이다.

 

 

문제 출처: https://www.acmicpc.net/problem/15873

 

15873번: 공백 없는 A+B

자연수 A, B (0 < A, B ≤ 10)가 첫 번째 줄에 주어진다. 단, 두 수의 사이에는 공백이 주어지지 않는다. 두 수의 앞에 불필요한 0이 붙는 경우는 없다.

www.acmicpc.net

 


list(map(int, input().split()))을 잘 사용해서,

조건식에 맞게 잘 출력되도록 처리만 하면 되는 간단한 문제이다.

 

1
2
3
4
5
6
= sum(list(map(int, input().split())))
= sum(list(map(int, input().split())))
if a >= b:
    print(a)
else:
    print(b)
cs

 

문제 출처: https://www.acmicpc.net/problem/5596

 

5596번: 시험 점수

대한고등학교에 재학 중인 민국이와 만세는 4과목(정보, 수학, 과학, 영어)에 대한 시험을 봤다. 민국이와 만세가 본 4과목의 점수를 입력하면, 민국이의 총점 S와 만세의 총점 T 중에서 큰 점수

www.acmicpc.net

 


간단하게 int로 input을 받은 후,

결과값을 17배 시키고,

이를 이진수로 바꾸기 위해서 bin을 하용합니다.

1
2
3
4
5
N = int(input(), 2)
 
result = N * 17
 
print(bin(result)[2:])
cs

 

 

출처: https://www.acmicpc.net/problem/5893

 

5893번: 17배

첫째 줄에 이진수 N이 주어진다. N은 최대 1000자리인 이진수이며, 0이 들어오는 경우는 없다.

www.acmicpc.net

파이썬을 입문하는 사람이라면 꼭 이 사이트를 알아야 한다고 생각한다.

생가보다 많은 사람들이 모르는 사이트이기 때문에 이렇게 소개를 하고자 한다.

 

파이썬 튜터(Python Tutor)라는 사이트이다.

 

이 사이트에서는 코드를 입력하면, 해당 코드를 한 줄 한 줄 과정을 수동으로 조작하면서 시각화된 코드를 볼 수 있다.

파이썬 입문자에게 첫 번째 벽인 반복문의 경우, 이 사이트를 통해서 공부를 하면 매우 효과적이라고 생각된다.

 

http://www.pythontutor.com/

 

Python Tutor - Visualize Python, Java, C, C++, JavaScript, TypeScript, and Ruby code execution

VISUALIZE CODE EXECUTION Learn Python, Java, C, C++, JavaScript, and Ruby Python Tutor helps people overcome a fundamental barrier to learning programming: understanding what happens as the computer runs each line of code. You can use it to write Python, J

www.pythontutor.com


[파이썬 튜터 사용 방법]

1. 사이트에 들어가게 되면 다음과 같은 창이 뜬다.

빨간색으로 표시한 부분 (Start visualizing your code now)를 클릭하라

 

2. Start visualizing your code now를 클릭하면 다음과 같은 창이 뜰 것이다. 

   여기에 원하는 코드를 입력하면 된다.

코드를 입력하고 나면 1과 2중에 선택해서 클릭하면 된다.

3. 코드를 입력하고 난 후 위의 사진에서 보이는 것과 같이 1과 2 중에서 선택해서 클릭하면 된다.

   그런데 몇 주간 사용해본 결과 1번보다는 2번을 더 많이 사용하게 된다는 느낌이 들었다.

 

4. Live Programming Mode를 누르면 다음과 같은 창이 뜬다.

   별표로 표시된 막대를 끌어서 원하는 과정으로 옮길 수가 있다.

   또는 그 밑에 있는 버튼 4개(First, Prev, Next, Last)로 옮길 수도 있다.


[파이썬 튜터 사용 영상 - Live Programming Mode]


[파이썬 튜터 사용 영상 - visual  execution]

혹시 visual execution을 누르면 어떤 형태로 볼 수 있는지 궁금한 사람들을 위해서 유튜브 영상 링크를 걸었으니 확인하면 된다.

https://www.youtube.com/watch?v=4Cgxx8whqso 

 

 


 

 

참고로  Java Tutor C Tutor C++ Tutor JavaScript Tutor Ruby Tutor 도 존재하기 때문에 이에 대해서 공부하는 사람들은 이런 사이트들을 활용해도 매우 유용할 것으로 보인다.

파이썬으로 간단한 계산기 만들기 프로그램이다.

일단 나눗셈의 경우 integer(정수) 값만 출력이 되는 것으로 했다.


코드 작성 순서는 다음과 같다

 

1. 전역변수를 설정한다.

2. calc()함수를 만든다.

3. 메인코드를 통해 총 4번 반복을 해서 사칙연산을 한 번씩 출력해볼 수 있도록 한다.

4. 계산연산자(oper)와 숫자 2개(var1, var2)를 받는다.

5. calc함수를 불러와서 계산한다.

6. 출력한다.

 


 

 

+ Recent posts