반응형

3023

https://www.acmicpc.net/problem/3023

 

3023번: 마술사 이민혁

첫째 줄에 왼쪽 위 부분의 행의 개수 R과 열의 개수 C가 주어진다. (1 ≤ R, C ≤ 50) 다음 R개 줄에는 C개의 문자 '.' 또는 '#'가 주어진다. 마지막 줄에는 에러의 위치 A와 B가 주어진다. (1 ≤ A ≤ 2R, 1

www.acmicpc.net

[정답1]

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
import sys
R, C = map(int, sys.stdin.readline().split())
= []
= [[0 for j in range(2*C)] for i in range(2*R)]
for r in range(R):
    a.append(sys.stdin.readline().strip())
for i in range(R):
    for j in range(C):
        b[i][j] = a[i][j]
for i in range(R):
    for j in range(C, 2*C):
        b[i][j] = b[i][2*C-j-1]
for i in range(R, 2*R):
    for j in range(2*C):
        b[i][j] = b[2*R-i-1][j]
 
A, B = map(int, sys.stdin.readline().split())
if b[A-1][B-1== '#':
    b[A-1][B-1= '.'
else:
    b[A-1][B-1= '#'
 
for r in range(2*R):
    for c in range(2*C):
        print(b[r][c], end = '')
    print()
cs

 

.

.

.

[풀이]

for문을 통해서 기본, 오른쪽 대칭, 위아래 대칭순으로 각각 해주었다.

for문을 여러번 써서 지저분해보인다.

슬라이싱을 이용한 방법을 알아보았다.

[정답2]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
R, C = map(int, sys.stdin.readline().split())
= []
for r in range(R):
    a = sys.stdin.readline().strip()
    b += [a + a[::-1]]
+= b[::-1]
 
A, B = map(int, sys.stdin.readline().split())
if b[A-1][B-1== '#':
    b[A-1= b[A-1][:B-1+ '.' + b[A-1][B:]
else:
    b[A-1= b[A-1][:B-1+ '#' + b[A-1][B:]
 
for r in range(2*R):
    print(b[r])
cs

 

훨씬 깔끔해졌다.

 

처음 입력을 받음과 동시에 오른쪽 대칭(+a[::-1])을 추가해준다.

오른쪽 대칭을 한 상태에서 위아래 대칭이 곧 원점 대칭과 같음을 이용하여

b의 역순(+b[::-1])을 추가해준다.

에러 추가는 b[A-1]의 type이 str이기 때문에 b[A-1][B-1]을 바로 바꾸지 못하고

행 전체를 바꿔 입력해준다.

반응형
반응형

10988

https://www.acmicpc.net/problem/10988

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

[정답]

1
2
3
4
5
6
import sys
= sys.stdin.readline().strip()
if S == S[::-1]:
    print('1')
else:
    print('0')
cs

 

.

.

.

[풀이]

슬라이싱을 이용하면 간단히 해결. 반복문 없이 파이썬의 문자열 기능을 이용한다.

S[::-1]은 문자열 S의 처음부터 끝까지 역순으로 출력해준다.

 

sys 모듈을 사용하지 않고 input() 함수를 이용해도 되나, 습관이다.

반복적으로 사용할때 sys가 시간단축에 도움이 된다고 한다.

sys에 관해선 다음에 자세히 알아보도록 하자.

반응형
반응형

1834

https://www.acmicpc.net/problem/1834

 

1834번: 나머지와 몫이 같은 수

N으로 나누었을 때 나머지와 몫이 같은 모든 자연수의 합을 구하는 프로그램을 작성하시오. 예를 들어 N=3일 때, 나머지와 몫이 모두 같은 자연수는 4와 8 두 개가 있으므로, 그 합은 12이다.

www.acmicpc.net

[정답]

1
2
3
4
5
= int(input())
result = 0
for n in range(1, N):
    result += N*+ n
print(result)
cs

.

.

.

[풀이]

간단한 문제다. 정수를 입력받고 반복문으로 끝내버리면 된다.

반복문 없이 수학적으로 (N**3-N)//2 만으로도 계산가능하다.

1
print((N**3-N)//2)
cs

(시간단축 but 직관성↓)

 

반응형
반응형

이썬 어린이 탈출 일지.

정사정없이  

제부터 매일 1문제 이상

탈 털어버리자.

발은 각오로

릿.

반응형

+ Recent posts