일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스파크
- 알고리즘
- 토이프로젝트
- 프로그래밍
- 스프링부트
- c언어
- 스프링
- 위클리챌린지
- 해킹실습
- 이클립스
- 문제풀이
- 리눅스마스터 2급 2차
- 필기
- 빅데이터
- 파이썬
- 엘라스틱서치
- SQL 정리
- 백준
- 코딩테스트
- 문법
- 기초
- MySQL
- 데이터프로그래밍
- 모의해킹
- 오라클
- SQL
- 프로그래머스
- 자바
- SQL 문법
- 데이터베이스
- Today
- Total
개발일기
백준 1547번 파이썬 풀이 : 공 본문
문제 링크 : https://www.acmicpc.net/problem/1547
1547번: 공
첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것
www.acmicpc.net
문제
세준이는 컵 3개를 탁자 위에 일렬로 엎어놓았다. 컵의 번호는 맨 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다.
먼저 1번 컵의 아래에 공을 하나 넣는다. 세준이는 두 컵을 고른 다음, 그 위치를 맞바꾸려고 한다. 예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다. 이때 공은 움직이지 않기 때문에, 공의 위치는 맨 처음 1번 컵이 있던 위치와 같다.
세준이는 컵의 위치를 총 M번 바꿀 것이며, 컵의 위치를 바꾼 방법이 입력으로 주어진다. 위치를 M번 바꾼 이후에 공이 들어있는 컵의 번호를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것을 의미한다. X와 Y의 값은 3보다 작거나 같고, X와 Y가 같을 수도 있다.
컵을 이동시킨 후에 공이 컵 바깥에 있는 경우는 없다.
출력
첫째 줄에 공이 들어있는 컵의 번호를 출력한다. 공이 사라져서 컵 밑에 없는 경우에는 -1을 출력한다.
문제 풀이
# 공의 갯수는 3개 고정이다.
# 공의 위치는 움직이지 않는다.
# 이 두가지의 문제를 가지고 문제를 풀이했다.
1. 3칸 크기의 배열을 생성한 후 1, 2, 3을 대입한다.
2. 예제를 입력하면 해당 값이 들어있는 배열의 값들을 바꿔 준다. ex) 3 1 을 입력하면 배열에는 3, 2, 1이 들어간다.
3. 0번째 배열의 값을 출력해주면 공이 들어있는 컵의 번호를 알 수 있다.
# 여기서 중요한 점은 예제로 입력하는 값이 배열의 인덱스가 아니라 배열의 값 이기 때문에 값을 입력하면 배열의 인덱스를 리턴해주는 함수를 새로 구현해 주었다.
* 이 부분도 배열이 3칸으로 고정이 되어있어 가능하다는 점, 컵의 갯수가 많아지면 코드의 효율성도 떨어진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def getIndex(num, set_answer):
for i in range(3):
if set_answer[i] == num:
return i
M = int(input())
answer = [1, 2, 3]
tempX, tempY = 0, 0
for i in range(M):
X, Y = map(int, input().split())
tempX = getIndex(X, answer)
tempY = getIndex(Y, answer)
temp = answer[tempX]
answer[tempX] = answer[tempY]
answer[tempY] = temp
print(answer[0])
|
cs |
컵의 위치는 움직이지 않기 때문에 answer 배열의 첫번째인 0번째 배열을 출력해주면 해당 공이 있는 컵의 번호를 알 수 있다.
전체 코드 링크 : https://github.com/Hmgi/Prepare-CodingTest/blob/master/Baekjoon/1547.py
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 1703번 파이썬 풀이 : 생장점 (0) | 2021.08.05 |
---|---|
백준 1598번 파이썬 풀이 : 꼬리를 무는 숫자 나열 (0) | 2021.08.05 |
백준 1018번 파이썬 풀이 : 체스판 다시 칠하기 (4) | 2021.08.04 |
백준 1009번 파이썬 풀이 : 분산처리 (3) | 2021.08.02 |
백준 1010번 파이썬 풀이 : 다리 놓기 (0) | 2021.08.02 |