Recent Tutorials and Articles
    HackerRank Solution: Save the Prisoner!
    Published on: 15th July 2016

    This tutorial provides Java and Python solution to "Save the Prisoner!" problem of Hackerrank.

    Hackerrank Challenge Details

    Problem Statement:

    A jail has N prisoners, and each prisoner has a unique id number, S, ranging from 1 to N. There are M sweets that must be distributed to the prisoners.

    The jailer decides the fairest way to do this is by sitting the prisoners down in a circle (ordered by ascending S), and then, starting with some random S, distribute one candy at a time to each sequentially numbered prisoner until all M candies are distributed. For example, if the jailer picks prisoner S = 2, then his distribution order would be (2, 3, 4, 5,..., n-1, n, 1, 2, 3, 4,...) until all M sweets are distributed.

    But wait—there's a catch—the very last sweet is poisoned! Can you find and print the ID number of the last prisoner to receive a sweet so he can be warned?

    Input Format:

    The first line contains an integer, T, denoting the number of test cases. 
    The T subsequent lines each contain 3 space-separated integers: 
      N (the number of prisoners), M (the number of sweets), and S (the prisoner ID), respectively.

    Output Format:

    For each test case, print the ID number of the prisoner who receives the poisoned sweet on a new line.

    Sample Input:

    5 2 1

    Sample Output:



    There are N = 5 prisoners and M = 2 sweets. Distribution starts at ID number S = 1, so prisoner 1 gets the first sweet and prisoner 2 gets the second (last) sweet. Thus, we must warn prisoner 2 about the poison, so we print 2 on a new line.

    Solution Details

    Java Implementation:

    package com.saintech.allprogtutorials.hackerrank.algos;
    import java.util.Scanner;
     * @author Sain Technology Solutions
     * Solution to Problem -
    public class SavePrisoner {
    	private static int getConcernedPrisoner(int N, int M, int S) {
    		final int prisonerId = (S + (M - 1)) % N;
    		//if prisonerId comes as 0 means we are talking about Nth as Mod will never give us N
    		return prisonerId == 0 ? N : prisonerId;
    	public static void main(String[] args) {
    		final Scanner in = new Scanner(;
    		final int T = Integer.parseInt(;
    		for(int i = 0; i < T; i++) {
    			final int N = Integer.parseInt(;
    			final int M =  Integer.parseInt(;
    			final int S = Integer.parseInt(;
    			System.out.println(getConcernedPrisoner(N, M, S));

    Thank you for reading through the tutorial. In case of any feedback/questions/concerns, you can communicate same to us through your comments and we shall get back to you as soon as possible.

    Published on: 15th July 2016