DEV Community

Hussein
Hussein

Posted on

simple Hacker Earth Problem Solution

it ,s simple problem but I asked to solve it during interview

so let ,s start solving the problem:

I have three solution for this problem:

Problem Explanation:
link to the problem

input two line like this (the first line contain number of element , and second line contain the data)
5
85 25 65 21 84

output : "Yes" or "No"

requirements :concatenate the last digit of each number and check if accept divisible on 10 if yes print "Yes" else print "No"

so in this case the last digit of 58 is 5 , last digit of 25 is 5 and so on
the result is "55514" , and this number don ,t accept divide on 10 so the result will be "No"

So before reading the solutions go and solve the problem and tell me how much time you take to pass all the test cases?.

The First solution:

 approach to solve this problem:

  • make a variable called  data in this problem which contain the input and convert it to array. 
  • second make a variable called arr to catch the the second line in input or the second index from the data variable.
  • third make a variable result and assign it to 0.
  • loop through arr and update result to with the last digit of number mean from e.g. 80 only take 0 and 21 only take 1.  
  • and finally check if result is divisible on 10 ?"Yes" :"No".

this solution pass all the test cases which the result of concat of  the last digit of all the arr numbers is not Infinity ,and also if the result is infinity and output is N0  will pass because this function will print "No" in all test cases which result is Infinity not because the logic of this function is true but because this function any way print "No" if the result is infinity  because no 11 line code if divide infinity % 10 the result NaN mean the function will move to else condition and print "No"

So this solution is not correct  for a large number , in the problem some test cases contain more than 80,000(Eighty Thousand) elements ,Infinity may contain 309 digit so imagine a number of 80,000 digit will also be Infinity .and the next solution is the correct answer for a large number  , and this is the reason why we take this problem  because the result in some cases will be Infinity.

1.  function main (input){
2.  let data = input.split("\n");
3.  let arr = data[1].split(" ").map(String)
4.  
5.  let result = '';
6.  
7.  for(let v of arr)(
8.     result+=parseInt(v[v.length-1])
9.  ) 
10.  
11. if (parseInt(result) % 10 == 0){
12.     console.log('Yes')
13. }
14.  
15. else console.log('No')

}
Enter fullscreen mode Exit fullscreen mode

The Second solution:

so the previous solution is not correct for large number , so instead check the whole number we check the last number
so if for example number like this 9999999889....................1
we only check the last digit meaning 1
instead check the whole number which in some cases infinity

if the last number accept divide on 10 meaning the whole number accept,
and it passed all test cases.

function main (input){
 let data = input.split("\n");
 let arr = data[1].split(" ").map(String);

 let result = '';

 for(let v of arr){
    result += parseInt(v[v.length-1])
 } 
 /*check only the last element of number and if 
 accept divide on 10 meaning the entire 
 element accept or simply if it ,s 0*/
console.log(result[result.length-1]==0?"Yes":"No")
//console.log(result[result.length-1]%10==0?'Yes':"No")

}
Enter fullscreen mode Exit fullscreen mode

The Third solution:

so in the previous solution all test cases passed ,but we can improve and reduce the code ,  we want to  check the number  accept divide on 10 but if the last digit of number accept meaning the number accept, so no need to declare a variable in previous solution called "result" and loop through arr to update the result , we only want to catch the last digit of number and check if it ,s accept divide on 10 and that is  what we did in the next code ,and it passed all the test cases.

function main (input){
 let data = input.split("\n");
 let arr = data[1].split(" ").map(String);

 console.log(arr[arr.length-1].slice(-1)%10==0?'Yes':"No")

}
Enter fullscreen mode Exit fullscreen mode

can write this function like this also :

function main (input){

 let arr = input.split("\n")[1].split(" ").map(String);

console.log(arr[arr.length-1].slice(-1)==0?'Yes':"No")

}
Enter fullscreen mode Exit fullscreen mode

Finally we learn how to improve and reduce the code
and this is a simple problem so don't spend much time on it ,
just read the solutions fast.

Top comments (0)