โจทย์ 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 ไปรันดู ก็ได้ นะครับ