Java basic | Java OOP | โครงสร้างข้อมูล | โจทย์ ACM



โจทย์ ACM MinimumSwapQ JAVA



โจทย์ ACM MinimumSwapQ JAVA



          เป็นการหาจำนวน ครั้งในการสลับที่ ที่น้อยที่สุดสำหรับการจัดเรียงข้อมูลตัวอักษรจากน้อยไปมาก
โจทย์ 


Minimum Swap
การเรียงข้อมูลเป็นขั้นตอนวิธีที่ถูกเรียกใช้บ่อยครั้งในการพัฒนาซอฟต์แวร์ซึ่งมีทั้งแบบจากน้อยไปมาก
และทั้งจากมากไปน้อย ซึ่งในการเรียงข้อมูลจะต้องมีการเปรียบเทียบและการสลับที่ของข้อมูล จงหาจำนวน
ครั้งในการสลับที่ ที่น้อยที่สุดสำหรับการจัดเรียงข้อมูลตัวอักษรจากน้อยไปมาก
input
แต่ละบรรทัดประกอบด้วยชุดของตัวอักษรตัวเล็ก (a ถึง z) โดยอินพุทแต่ละชุดจะไม่มีตัวอักษรที่
ซ้ำกัน อินพุทสิ้นสุดเมื่อพบข้อความ “000”
output
ผลลัพธ์แต่ละบรรทัดให้ค่าจำนวนครั้งต่ำสุดในการสลับที่ข้อมูลที่ทำการเรียงลำดับของตัวอักษรจาก
น้อยไปมาก



ดูจาก output ของโปรแกรม คือ จะนับเฉพาะตำแหน่งที่อยู่ผิกตำแหน่งเท่านั้น สังเกตุจาก cba โปรแกรมจะนับเฉพาะที่ c สลับกับ a เท่านั้น output เลยได้ 1

code ที่ผมเขียนนะครับ


          import java.util.Scanner;
          /**
         *
         * @author JOKE
         */
         public class MinimumSwap {
              int counter= 0;
         public static void main(String[] args){
              MinimumSwap MT = new MinimumSwap();
Scanner sn =new Scanner(System.in);
String input ="";
try{

while(!(input = sn.nextLine()).equals("000")){
char [] charecter = MT.charArr(input);
int current = 0, last = charecter.length-1;
int walker, smallest;
while(current < last) {
smallest = current;
walker = current + 1;
while(walker <= last) {                                //วนหาอักษรที่เล็กที่สุด
if(charecter[smallest] > charecter[walker])
smallest = walker;
walker++;
}//เจอแล้วก็สลับตำแหน่งกัน
MT.swap(charecter, current, smallest);
current++;
}
MT.print();// แสดงจำนวนที่สลับ
}
}catch(Exception e){
System.out.println(e.getClass());
System.out.println("Re-enter.!!!");
            }

         }

          public char[] charArr(String input){
char [] charecter = new char[input.length()];
for(int i=0 ;i< input.length();i++){
charecter[i] = (char) input.codePointAt(i);
}
return charecter;
        }
       // เมทอดสำหรับ สำหรับ สลับตำแหน่ง
         public char[] swap(char[] arr, int current, int smallest) {
if(arr[current] > arr[smallest])
counter++;
char temp = arr[current];
arr[current] = arr[smallest];
arr[smallest] = temp;
return arr;
         }

         void print(){
System.out.println(counter);
counter = 0;
          }
}



ดูโค้ดแล้วสงสัยก็ เข้าไปดู อธิบายโค้ดอย่างละเอียด MinimumSwapQ JAVA ได้นะครับ
หรือ จะเอา code ไปรันดู ก็ได้ นะครับ

share