코드업 파이썬(Python) 기초 100제 - 6091번 ~ 6094번

코드업 파이썬(Python) 기초 100제 - 6091번 ~ 6094번

알고리즘 공부를 위해 코드업 사이트(https://codeup.kr/)의 기초 100제를 시작합니다.

블로그에 올라온 모든 코드는 파이썬(Python)으로 작성되어 있습니다.

Python의 기초 100제를 확인하기 위해서는 다음 사이트로 이동하면 됩니다.

https://codeup.kr/problemsetsol.php?psid=33

6091 : [기초-종합] 함께 문제 푸는 날(설명)(py)

반인, 군인, 프로그래머, 탑코더 등 아주 많은 사람들이 들어와 문제를 풀고 있는데,

실시간 채점 정보는 메뉴의 채점기록(Judge Status)을 통해 살펴볼 수 있다.

자! 여기서...잠깐..

같은 날 동시에 가입한 3명의 사람들이 온라인 채점시스템에 들어와 문제를 푸는 날짜가

매우 규칙적이라고 할 때, 다시 모두 함께 문제를 풀게 되는 그날은 언제일까?

예를 들어 3명이 같은 날 가입/등업하고, 각각 3일마다, 7일마다, 9일마다

한 번씩 들어온다면, 처음 가입하고 63일 만에 다시 3명이 함께 문제를 풀게 된다.

갑자기 힌트?

왠지 어려워 보이지 않는가?

수학에서 배운 최소공배수를 생각한 사람들도 있을 것이다. 하지만, 정보에서 배우고 경험하는

정보과학의 세상은 때때로 컴퓨터의 힘을 빌려 간단한 방법으로 해결할 수 있게 한다.

아래의 코드를 읽고 이해한 후 도전해 보자.

day는 날 수, a/b/c는 방문 주기이다.

물론, 아주 많은 다양한 방법이 있을 수 있다.

정보과학의 문제해결에 있어서 정답은?

하나가 아니라 주어진 시간/기억공간으로 정확한 결과를 얻을 수 있는 모든 방법이다.

따라서, 모든 문제들에는 정답이 하나뿐만이 아니다.

새로운, 더 빠른, 더 간단한 방법을 다양하게 생각해보고 여러가지 방법으로 도전해 볼 수 있다.

▷ 해설

a와 b, c 모두 같이 들어오는 날에는 day와 나눌 경우 0이 나온다.

예를 들어 a=3, b=7, c=9 일 경우 63이 정답이 되는데 63을 3으로 나눈 나머지가 0, 63을 7로 나눈 나머지가 0, 63을 9로 나눈 나머지가 0이 된다는 특징을 가진다.

이 방법을 이용해 반복문이 끝나는 조건을 걸 수 있다.

a, b, c = map(int, input().split()) day = 1 while True: if day % a == 0 and day % b == 0 and day % c == 0: break day += 1 print(day)

6092 : [기초-리스트] 이상한 출석 번호 부르기1(설명)(py)

정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.

선생님은 출석부를 보고 번호를 부르는데,

학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부른다.

그리고 얼굴과 이름이 잘 기억되지 않는 학생들은 번호를 여러 번 불러

이름과 얼굴을 빨리 익히려고 하는 것이다.

출석 번호를 n번 무작위로 불렀을 때, 각 번호(1 ~ 23)가 불린 횟수를 각각 출력해보자.

▷ 참고

- d = [] #어떤 데이터 목록(list) 을 순서대로 저장하기 위해 아무것도 없는 리스트 변수 만들기

- d.append(값) #d 리스트의 마지막에 원하는 값을 추가(append)해 넣음

- d[a[i]] += 1 #2중 리스트 참조 : 만약 a[i]의 값이 1이었다면? d[1] += 1 이 실행되는 것이다. 1번 카운트 1개 증가..

어떤 값을 기록했다가 다시 사용할 필요가 있을 때, 필요한 변수(variable)를 만들어 사용하는 것처럼,

여러 개의 값을 하나로 묶어 목록으로 기록했다가 다시 사용할 필요가 있을 때, 리스트(list)를 만들어 사용할 수 있다.

리스트는 변수들을 모아 놓은 변수라고 생각할 수도 있고, 참조번호를 이용해 간단하고 편리하게 사용할 수 있다.

▷ 해설

nlist는 n번 부른 학생들의 값을 한 줄로 받은 뒤 리스트 형식으로 저장한다.

우리는 총 23명의 학생이 있는걸 알고 있으므로 23번째 인덱스까지 0인 students리스트를 초기화 시킨다.

이후 총 이름을 부른 횟수만큼 반복문을 돌며 nlist의 값을 꺼내온 뒤 이름이 불러진 학생의 list의 값을 1 더해준다.

마지막으로 호출 된 횟수를 모두 출력하면 된다.

n = int(input()) nlist = list(map(int, input().split())) students = [0 for _ in range(23)] for i in range(n): students[nlist[i]-1] += 1 for i in range(23): print(students[i], end=" ")

6093 : [기초-리스트] 이상한 출석 번호 부르기2(py)

정보 선생님은 수업을 시작하기 전에 이상한 출석을 부른다.

학생들의 얼굴과 이름을 빨리 익히기 위해 번호를 무작위(랜덤)으로 부르는데,

영일이는 선생님이 부른 번호들을 기억하고 있다가 거꾸로 불러보는 것을 해보고 싶어졌다.

출석 번호를 n번 무작위로 불렀을 때, 부른 번호를 거꾸로 출력해 보자.

▷ 참고

python에서는 list를 stack대신 이용하기도 한다. 이런 특징을 가지고 pop을 하게 되면 맨뒤의 값이 빠져나오고 list에서는 삭제가 된다. 이 방법을 통해 nlist가 빌때까지 값을 pop하면 번호가 거꾸로 출력된다.

n = int(input()) nlist = list(map(int, input().split())) while nlist: print(nlist.pop(), end=" ")

6094 : [기초-리스트] 이상한 출석 번호 부르기3(py)

정보 선생님은 오늘도 이상한 출석을 부른다.

영일이는 오늘도 다른 생각을 해보았다.

출석 번호를 다 부르지는 않은 것 같은데... 가장 빠른 번호가 뭐였지?

출석 번호를 n번 무작위로 불렀을 때, 가장 빠른 번호를 출력해 보자.

단,

첫 번째 번호와 마지막 번호가 몇 번인지는 아무도 모른다.

음수(-) 번호, 0번 번호도 있을 수 있다.

참고

리스트에 출석 번호를 기록해 두었다가, 그 중에서 가장 작은 값을 찾아내면 된다.

그런데, 가장 작은 값은 어떻게 어떤 것과 비교하고, 어떻게 찾아야 할까?

▷ 해설

이상한 출석 번호 부르기를 풀기 위해서는 list에서 사용할 수 있는 함수를 적극 활용하면 된다.

이번 문제는 오름차순으로 정렬하는 sort를 이용하면 간단하게 풀수 있다. sort로 정렬된 값 중 맨 앞의 값인 0번째 값을 출력하면 그 list안에서 가장 작은 값을 알 수 있다.

n = int(input()) nlist = list(map(int, input().split())) nlist.sort() print(nlist[0])

from http://netflixthewho.tistory.com/37 by ccl(A) rewrite - 2021-06-29 01:27:34