# HackerRank Solution: The Captain's Room [3 Methods]

Author: Bashir Alam

## Question: The Captain's Room [Python Sets]

Mr. Anant Asankhya is the manager at the INFINITE hotel. The hotel has an infinite amount of rooms.

One fine day, aย finiteย number of tourists come to stay at the hotel.
The tourists consist of:
โ A Captain.
โ An unknown group of families consisting ofย Kย members per group whereย Kย โ ย 1.

The Captain was given a separate room, and the rest were given one room per group.

Mr. Anant has an unordered list of randomly arranged room entries. The list consists of the room numbers for all of the tourists. The room numbers will appearย Kย times per group except for the Captain's room.

Mr. Anant needs you to help him find the Captain's room number.
The total number of tourists or the total number of groups of families is not known to you.
You only know the value ofย Kย and the room number list.

Input Format

The first line consists of an integer,ย K, the size of each group.
The second line contains the unordered elements of the room number list.

Constraints

1 < K < 1000

Output Format

Output the Captain's room number.

Sample Input

`51 2 3 6 5 4 4 2 5 3 6 1 6 5 3 2 4 1 2 5 1 4 3 6 8 4 3 1 5 6 2 `

Sample Output

`8`

The list of room numbers containsย 31ย elements. Sinceย Kย isย 5, there must beย 6ย groups of families. In the given list, all of the numbers repeatย 5ย times except for room numberย 8.
Hence,ย 8ย is the Captain's room number.

If you are new to python then I would recommend reading out Python Sets before attempting this question.

## Possible Solutions

### 1. Using Sets and Counters

In this solution, we start by reading the total number of elements and the room numbers into a list. We then use the `Counter` from the `collections` module to count the occurrences of each room number. Using a for loop, we iterate through the counter to find and print the room number that appears only once, which is the Captain's room. This method employs `Counter` for counting and a `for` loop for iteration.

``````from collections import Counter

k = int(input())
room_numbers = list(map(int, input().split()))

# Count occurrences of each room number
room_count = Counter(room_numbers)

# Find the room number that appears only once (Captain's room)
for room, count in room_count.items():
if count == 1:
print(room)
break``````

### 2. Using Mathematical Formula

In this solution, we read the total number of elements and the room numbers into a list. We calculate the total sum of all room numbers and the sum of unique room numbers using the `set` function. We then use a mathematical formula `(unique_sum x k - total_sum)/(kโ1)` to find the Captain's room number and print it. This method uses arithmetic operations and the `set` function for unique values.

``````# Read input
k = int(input())
room_numbers = list(map(int, input().split()))

# Compute the sum of all room numbers
total_sum = sum(room_numbers)

# Compute the sum of unique room numbers
unique_sum = sum(set(room_numbers))

# Calculate the Captain's room number using the formula
captain_room = (unique_sum * k - total_sum) // (k - 1)

print(captain_room)``````

### 3. Using Set Difference

In this solution, we start by reading the total number of elements and the room numbers into a list. We create a set of all room numbers and a set of room numbers that appear exactly `k` times using a for loop with the `count` method. We then find the Captain's room by computing the set difference between all rooms and multiple rooms, and print the result. This method uses sets, the `count` method, and set difference operations.

``````# Read input
k = int(input())
room_numbers = list(map(int, input().split()))

# Create sets for all rooms and multiple rooms
all_rooms = set(room_numbers)
multiple_rooms = set(room for room in room_numbers if room_numbers.count(room) == k)

# Find the Captain's room by set difference
captain_room = list(all_rooms - multiple_rooms)[0]

print(captain_room)``````

When we run the code from all three possible solutions on Hacker Rank, the sample Test case is shown as successful:

## Summary

In this tutorial we explored three solutions solve HackerRank problem on Python Sets to identify the Captain's room number from a list of room numbers where all but one appear `K` times. The first solution uses the `Counter` from the `collections` module to count occurrences and a `for` loop to find the unique room. The second solution calculates the Captain's room number using a mathematical formula involving the sum of all room numbers and the sum of unique room numbers. The third solution employs set operations and the `count` method within a `for` loop to determine the room number that does not appear `k` times. Each approach showcases different techniques for solving the problem efficiently.

Views: 37

Bashir Alam

He is a Computer Science graduate from the University of Central Asia, currently employed as a full-time Machine Learning Engineer at uExel. His expertise lies in Python, Java, Machine Learning, OCR, text extraction, data preprocessing, and predictive models. You can connect with him on his LinkedIn profile.

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

For any other feedbacks or questions you can send mail to admin@golinuxcloud.com