Java solution for Grid Challenge HackerRank problem
Problem description :
Given a square grid of characters in the range ascii[a-z], rearrange elements of each row alphabetically, ascending. Determine if the columns are also in ascending alphabetical order, top to bottom. Return YES if they are or NO if they are not.
Example :
grid = ['abc', 'ade', 'efg']
The grid is illustrated below.
a b c
a d e
e f g
The rows are already in alphabetical order. The columns a a e
, b d f
and c e g
are also in alphabetical order, so the answer would be YES
. Only elements within the same row can be rearranged. They cannot be moved to a different row.
In this problem, we have to print YES
if it is possible to rearrange the grid alphabetically ascending in both its rows and columns, or NO
otherwise.
Input :
grid = ['ebacd', 'fghij', 'olmkn', 'trpqs', 'xywuv']
The grid is illustrated below.
e b a c d
f g h i j
o l m k n
t r p q s
x y w u v
Output :
YESAfter reordered it will alphabetically sorted with rows and columns
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
So we have to sort all string of characters and check if it is sorted also column vise or not.
Solution 1 :
Output Explanation :
grid = [ABC, ADE, EFG]
- In first for loop, convert String to Char array using toCharArray() method, Then sort Character array using Arrays.sort() method. After set sorted character string into list.
- Second for loop :
- i = 0 | 0 < 3 becomes true
- j = 0 | 0 < 2 becomes true
- grid.get(j).charAt(i) | grid.get(0).charAt(0) | A
- grid.get(j+1).charAt(i) | grid.get(1).charAt(0) | A
- A > A becomes false
- j = 1 | 1 < 2 becomes true
- grid.get(1).charAt(0) | A
- grid.get(2).charAt(0) | A
- A > E becomes false
- j = 2 | 2 < 2 becomes false
- i = 1 | 1 < 3 becomes true
- j = 0 | 0 < 2 becomes true
- grid.get(j).charAt(i) | grid.get(0).charAt(1) | B
- grid.get(j+1).charAt(i) | grid.get(1).charAt(1) | D
- B > D becomes false
- j = 1 | 1 < 2 becomes true
- grid.get(1).charAt(1) | D
- grid.get(2).charAt(1) | F
- D > F becomes false
- j = 2 | 2 < 2 becomes false
- i = 2 | 2 < 3 becomes true
- j = 0 | 0 < 2 becomes true
- grid.get(j).charAt(i) | grid.get(0).charAt(2) | C
- grid.get(j+1).charAt(i) | grid.get(1).charAt(2) | E
- C > E becomes false
- j = 1 | 1 < 2 becomes true
- grid.get(1).charAt(2) | E
- grid.get(2).charAt(2) | G
- E > G becomes false
- j = 2 | 2 < 2 becomes false
- i = 3 | 3 < 3 becomes false
- Return YES
Happy learning. Happy coding
Other HackerRank problem and solution with explanation :
Comments
Post a Comment