개발 공부/알고리즘 이론

[삼성SW테스트 준비] 1. 입력받기

5묘 2022. 8. 5. 17:52

한 달 정도 남은 삼성 하반기 코테때문에 고민이 많았다.
계속 백준 단계별을 풀며 기초를 차근차근 쌓는 것이 맞을지, 아니면 삼성 SW 테스트에서 빈출로 나오는 DFS, BFS, 시뮬레이션으로 바로 넘어가는 것이 나을지 말이다.

고민하다가, 속성으로 삼성 코테 유형을 연습할 수 있는 좋은 블로그 글을 발견해서 우선 여기 나온 문제들을 먼저 풀어보기로 했다. 삼성 기출을 속성으로 설명해주시고, 기출문제 중 아주 쉬운 것들을 먼저 추천해주셔서 빠르게 DFS, BFS유형을 복습하고 삼성 기출에 익숙해질 수 있을 것 같았다.

(알파카고수 님의 블로그 글 참고:https://m.blog.naver.com/wpghks7/221584113312)

 

[파이썬으로 시작하는 삼성 SW역량테스트] - 1. 입력받기

알고리즘에 대해 본격적으로 진행하기 이전에 우선 입력을 어떻게 받는지에 대해 알아보도록 하겠다. C, ...

blog.naver.com


1) 가변 인자

# 가변 인자
# 5 1 2 3 4 5 이런 식으로 앞에 숫자에 따라 뒤에 받아야 할 숫자가 달라질 경우.
while True:
    a, *arr = map(int, input().split())
    if a == 0:
        break

    print(a, arr)

2) 1차원 리스트

# 1차원 리스트
a = [0] * 10
b = [0 for _ in range(10)]

3) 2차원 리스트

* 절대 쓰면 안되는 방법

arr = [[5] * 3] * 3
arr[2][1] = 2
print(arr)
#출력 결과: [[5, 2, 5], [5, 2, 5], [5, 2, 5]]

써야 하는 방법

# 써야 하는 방법
arr_1 = [[5] * 3 for _ in range(3)]
arr_2 = [[5 for _ in range(3)] for z in range(3)]

arr_1[2][1] = 2
arr_2[2][1] = 2

print(arr_1)
print(arr_2)

# 출력 결과
# [[5, 5, 5], [5, 5, 5], [5, 2, 5]]
# [[5, 5, 5], [5, 5, 5], [5, 2, 5]]

4) 반복해서 입력 받기

L, A, B, C, D = [int(input()) for _ in range(5)]
# 입력 예시
# 25
# 44
# 6
# 7
# 5

5) 2차원 배열 입력받기

이미지 출처: 알파카고수님 블로그

공백으로 구분되어 입력받을 경우 (Ex. 오른쪽)

# 공백으로 구분되어 입력받을 경우
n, m = map(int, input().split())
arr_1 = [list(map(int, input().split())) for _ in range(n)]
# 출력 결과
# [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 6, 0], [0, 0, 0, 0, 0, 0]]

붙어서 입력될 경우 (Ex. 왼쪽)

# 붙어있는 것이 입력될 경우
# map을 쓰면 입력받은 숫자 하나하나가 리스트 요소가 됨.
n, m = map(int, input().split())
arr_2 = [list(map(int, input())) for _ in range(n)]
# 출력 결과
# [[1, 0, 1, 1, 1, 1], [1, 0, 1, 0, 1, 0], [1, 0, 1, 0, 1, 1], [1, 1, 1, 0, 1, 1]]

6) 빠른 입력

import sys
a = sys.stdin.readline().rstrip()

이걸 매번 치는 것이 귀찮으므로, 아래와 같이 input에 lmabda 이용해 정의해두면 그냥 input()으로 처리 가능

import sys
input = lambda: sys.stdin.readline().rstrip()

 

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

전에 풀어본 문제인데, 여기에 람다로 정의한 sys.stdin.readline() 함수를 활용해보았다.

# 15552 빠른 A+B
import sys
read = lambda: sys.stdin.readline().rstrip()

T = int(read())
for tc in range(1, T+1):
    N, M = map(int, read().split())
    print(N + M)

사용자 입장에서는 긴 코드를 다시 치지 않아도 되서 간편하긴 한데, 시간은 lambda로 미리 정의할 때가 더 걸렸다.