문제:

대한민국을 비롯한 대부분의 나라에서는 터널 내에서의 차선 변경을 법률로 금하고 있다. 조금만 관찰력이 있는 학생이라면 터널 내부에서는 차선이 파선이 아닌 실선으로 되어 있다는 것을 알고 있을 것이다. 이는 차선을 변경할 수 없음을 말하는 것이고, 따라서 터널 내부에서의 추월은 불가능하다.

소문난 명콤비 경찰 대근이와 영식이가 추월하는 차량을 잡기 위해 한 터널에 투입되었다. 대근이는 터널의 입구에, 영식이는 터널의 출구에 각각 잠복하고, 대근이는 차가 터널에 들어가는 순서대로, 영식이는 차가 터널에서 나오는 순서대로 각각 차량 번호를 적어 두었다.

N개의 차량이 지나간 후, 대근이와 영식이는 자신들이 적어 둔 차량 번호의 목록을 보고, 터널 내부에서 반드시 추월을 했을 것으로 여겨지는 차들이 몇 대 있다는 것을 알게 되었다. 대근이와 영식이를 도와 이를 구하는 프로그램을 작성해 보자.

입력:

입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이가 적은 차량 번호 목록이 주어진다. 각 차량 번호는 6글자 이상 8글자 이하의 문자열로, 영어 대문자('A'-'Z')와 숫자('0'-'9')로만 이루어져 있다.

같은 차량 번호가 두 번 이상 주어지는 경우는 없다.

출력:

첫째 줄에 터널 내부에서 반드시 추월을 했을 것으로 여겨지는 차가 몇 대인지 출력한다.

풀이방법:

먼저 들어간 차량부터 1이라고 라벨링을 할 때, 추월한 차량의 뒤 차량들 중에는 본인 차의 숫자보다 작은 숫자가 반드시 존재하게 된다. 따라서 이러한 경우를 추월한 차량이라고 생각하고 갯수를 세도록 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= int(input())
 
in_car = {}
for i in range(1, N+1):
    number = input()
    in_car[number] = i
 
order = []
for j in range(1, N+1):
    out = input()
    order.append(in_car[out])
 
answer = 0
for i in range(N):
    for j in range(i+1, N):
        if order[i] > order[j]:
            answer+=1
            break
 
print(answer)
cs

문제링크:

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

 

2002번: 추월

입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이

www.acmicpc.net

 

'Algorithm > Python' 카테고리의 다른 글

[Programmers] Lv 2. 롤케이크 자르기  (0) 2023.07.14
[BOJ] 1111. IQ Test  (0) 2023.07.13
[Programmers]Lv 2. 숫자 변환하기  (0) 2023.07.11
[BOJ] 2623. 음악프로그램  (0) 2023.07.10
[BOJ] 1343. 폴리오미노  (0) 2023.07.07

문제:

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -2^62보다 크거나 같고, 2^62보다 작거나 같다.

 

준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.

입력:

첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1<=N<=100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.

출력:

첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.

풀이방법:

 숫자를 입력받으면서 HashTabel을 만들고, 이를 item 리스트로 만들면서 조건에 맞게 정렬을 하면 된다.

1
2
3
4
5
6
7
8
9
10
= int(input())
hashTable={}
for _ in range(N):
    h = int(input())
    if h in hashTable:
        hashTable[h] += 1
    else:
        hashTable[h] = 1
hashList = sorted(list(hashTable.items()),key=lambda x : (-x[1],x[0]))
print(hashList[0][0])
cs

문제링크:

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

 

'Algorithm > Python' 카테고리의 다른 글

[BOJ]1543. 문서 검색  (0) 2020.07.02
[BOJ]5525. IOIOI  (0) 2020.06.30
[BOJ]5052. 전화번호 목록  (0) 2020.06.23
[BOJ]12865. 평범한 배낭  (0) 2020.06.18
[BOJ]10830. 행렬 제곱  (0) 2020.06.16

문제:

상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.

 

각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.

 

상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.

입력:

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다.(2<=n<=10^6) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고, "enter"나 "leave"가 주어진다. "enter"인 경우는 출근, "leave"인 경우는 퇴근이다.

 

회사에 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다. 사람들의 이름은 알파벳 대소문자로 구성된 5글자 이하의 문자열이다.

출력:

현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다.

풀이방법:

 동명이인이 없고, 대소문자가 다른 경우에는 다른 이름이기 때문에 한 사람이 출근하고 퇴근하는 것은 독립적이다. 따라서 python의 dict을 이용해서 해쉬를 구성하도록 했다. 

 "enter"와 "leave"와 상관 없이 처음 이름이 등장한다면 출근이고, 두 번째로 이름이 등장한다면 퇴근하는 것이라 생각하고, 처음 등장하면 True로 값을 새로 저장하고, 다시 등장하면 False로 바꿔주도록 했다.

 모두 확인했다면 dict의 items()를 사용해서 key, value 쌍으로 묶어주고, 역순 정렬을 한 뒤 , value 값이 True인 것만 출력하도록 했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
n=int(input())
 
companyLog={}
 
for _ in range(n):
    name,log=input().split()
    if companyLog.get(name):
        companyLog[name]=False
    else:
        companyLog[name]=True
 
for n,l in sorted(companyLog.items(),reverse=True):
    if l==True:
        print(n)
cs

문제링크:

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

 

7785번: 회사에 있는 사람

문제 상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다. 각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다. 상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성

www.acmicpc.net

 

'Algorithm > Python' 카테고리의 다른 글

[2019 Kakao winter internship]크레인 인형뽑기 게임  (0) 2020.04.21
[BOJ]2863. 이게 분수?  (0) 2020.04.16
[BOJ]1718. 암호  (0) 2020.04.09
[BOJ]1302 베스트셀러  (0) 2020.04.07
[BOJ]1051. 숫자 정사각형  (0) 2020.03.26

+ Recent posts